From 0c0bbcd6eddc284d82a22adccb99e5fb9ef34cda Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 4 Mar 2024 16:07:38 -0500 Subject: [PATCH 001/136] init commit --- src/api/aptos.ts | 6 + src/api/aptosConfig.ts | 47 ++- src/api/keyless.ts | 60 ++++ src/bcs/serializer.ts | 18 + src/client/core.ts | 4 + src/client/get.ts | 6 + src/client/post.ts | 13 + src/core/account/Account.ts | 7 - src/core/account/EphemeralAccount.ts | 69 ++++ src/core/account/KeylessAccount.ts | 152 +++++++++ src/core/account/index.ts | 2 + src/core/crypto/ephemeral.ts | 140 ++++++++ src/core/crypto/index.ts | 2 + src/core/crypto/keyless.ts | 494 +++++++++++++++++++++++++++ src/core/crypto/poseidon.ts | 134 ++++++++ src/core/crypto/singleKey.ts | 11 + src/internal/keyless.ts | 160 +++++++++ src/types/index.ts | 20 ++ src/utils/apiEndpoints.ts | 14 + src/utils/const.ts | 2 + 20 files changed, 1353 insertions(+), 8 deletions(-) create mode 100644 src/api/keyless.ts create mode 100644 src/core/account/EphemeralAccount.ts create mode 100644 src/core/account/KeylessAccount.ts create mode 100644 src/core/crypto/ephemeral.ts create mode 100644 src/core/crypto/keyless.ts create mode 100644 src/core/crypto/poseidon.ts create mode 100644 src/internal/keyless.ts diff --git a/src/api/aptos.ts b/src/api/aptos.ts index 92dc0e106..12d366eb3 100644 --- a/src/api/aptos.ts +++ b/src/api/aptos.ts @@ -12,6 +12,7 @@ import { General } from "./general"; import { ANS } from "./ans"; import { Staking } from "./staking"; import { Transaction } from "./transaction"; +import { Keyless } from "./keyless"; /** * This class is the main entry point into Aptos's @@ -43,6 +44,8 @@ export class Aptos { readonly transaction: Transaction; + readonly keyless: Keyless; + constructor(settings?: AptosConfig) { this.config = new AptosConfig(settings); this.account = new Account(this.config); @@ -55,6 +58,7 @@ export class Aptos { this.general = new General(this.config); this.staking = new Staking(this.config); this.transaction = new Transaction(this.config); + this.keyless = new Keyless(this.config); } } @@ -69,6 +73,7 @@ export interface Aptos Faucet, FungibleAsset, General, + Keyless, Staking, Omit {} @@ -103,3 +108,4 @@ applyMixin(Aptos, FungibleAsset, "fungibleAsset"); applyMixin(Aptos, General, "general"); applyMixin(Aptos, Staking, "staking"); applyMixin(Aptos, Transaction, "transaction"); +applyMixin(Aptos, Keyless, "keyless"); diff --git a/src/api/aptosConfig.ts b/src/api/aptosConfig.ts index 7b8893066..0cc4a142e 100644 --- a/src/api/aptosConfig.ts +++ b/src/api/aptosConfig.ts @@ -3,7 +3,14 @@ import aptosClient from "@aptos-labs/aptos-client"; import { AptosSettings, ClientConfig, Client } from "../types"; -import { NetworkToNodeAPI, NetworkToFaucetAPI, NetworkToIndexerAPI, Network } from "../utils/apiEndpoints"; +import { + NetworkToNodeAPI, + NetworkToFaucetAPI, + NetworkToIndexerAPI, + Network, + NetworkToPepperAPI, + NetworkToProverAPI, +} from "../utils/apiEndpoints"; import { AptosApiType } from "../utils/const"; /** @@ -28,6 +35,16 @@ export class AptosConfig { */ readonly faucet?: string; + /** + * The optional hardcoded pepper service URL to send requests to instead of using the network + */ + readonly pepper?: string; + + /** + * The optional hardcoded prover service URL to send requests to instead of using the network + */ + readonly prover?: string; + /** * The optional hardcoded indexer URL to send requests to instead of using the network */ @@ -39,6 +56,8 @@ export class AptosConfig { this.network = settings?.network ?? Network.DEVNET; this.fullnode = settings?.fullnode; this.faucet = settings?.faucet; + this.pepper = settings?.pepper; + this.prover = settings?.prover; this.indexer = settings?.indexer; this.client = settings?.client ?? { provider: aptosClient }; this.clientConfig = settings?.clientConfig ?? {}; @@ -68,6 +87,14 @@ export class AptosConfig { if (this.indexer !== undefined) return this.indexer; if (this.network === Network.CUSTOM) throw new Error("Please provide a custom indexer url"); return NetworkToIndexerAPI[this.network]; + case AptosApiType.PEPPER: + if (this.pepper !== undefined) return this.pepper; + if (this.network === Network.CUSTOM) throw new Error("Please provide a custom pepper service url"); + return NetworkToPepperAPI[this.network]; + case AptosApiType.PROVER: + if (this.prover !== undefined) return this.prover; + if (this.network === Network.CUSTOM) throw new Error("Please provide a custom prover service url"); + return NetworkToProverAPI[this.network]; default: throw Error(`apiType ${apiType} is not supported`); } @@ -99,4 +126,22 @@ export class AptosConfig { isFaucetRequest(url: string): boolean { return NetworkToFaucetAPI[this.network] === url; } + + /** + * Checks if the URL is a known pepper service endpoint + * + * @internal + * */ + isPepperServiceRequest(url: string): boolean { + return NetworkToPepperAPI[this.network] === url; + } + + /** + * Checks if the URL is a known prover service endpoint + * + * @internal + * */ + isProverServiceRequest(url: string): boolean { + return NetworkToProverAPI[this.network] === url; + } } diff --git a/src/api/keyless.ts b/src/api/keyless.ts new file mode 100644 index 000000000..c4309029c --- /dev/null +++ b/src/api/keyless.ts @@ -0,0 +1,60 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { deriveAccountFromJWTAndEphemAccount, deriveKeylessAccount, getPepper } from "../internal/keyless"; +import { HexInput } from "../types"; +import { AptosConfig } from "./aptosConfig"; + +/** + * A class to query all `OIDB` related queries on Aptos. + */ +export class Keyless { + constructor(readonly config: AptosConfig) {} + + /** + * TODO + * + * @param args.jwt jwt token + * @returns The pepper + */ + async getPepper(args: { jwt: string, ephemeralAccount: EphemeralAccount; }): Promise { + return getPepper({ aptosConfig: this.config, ...args }); + } + + /** + * TODO + * + * @param args.jwt jwt token + * @param args.ephemeralAccount + * @param args.uidKey + * @param args.pepper + * @returns + */ + async deriveAccountFromJWTAndEphemAccount(args: { + jwt: string; + ephemeralAccount: EphemeralAccount; + uidKey?: string; + pepper?: HexInput; + }): Promise { + return deriveAccountFromJWTAndEphemAccount({ aptosConfig: this.config, ...args }); + } + + /** + * TODO + * + * @param args.jwt jwt token + * @param args.ephemeralAccount + * @param args.uidKey + * @param args.pepper + * @returns + */ + async deriveKeylessAccount(args: { + jwt: string; + ephemeralAccount: EphemeralAccount; + uidKey?: string; + pepper?: HexInput; + extraFieldKey?: string + }): Promise { + return deriveKeylessAccount({ aptosConfig: this.config, ...args }); + } +} diff --git a/src/bcs/serializer.ts b/src/bcs/serializer.ts index 9852b0cc3..aeb03c1ff 100644 --- a/src/bcs/serializer.ts +++ b/src/bcs/serializer.ts @@ -316,6 +316,24 @@ export class Serializer { item.serialize(this); }); } + + serializeOption(value?: T): void { + if (value === undefined) { + this.serializeU32AsUleb128(0); + } else { + this.serializeU32AsUleb128(1); + value.serialize(this); + } + } + + serializeOptionStr(value?: string): void { + if (value === undefined) { + this.serializeU32AsUleb128(0); + } else { + this.serializeU32AsUleb128(1); + this.serializeStr(value); + } + } } export function ensureBoolean(value: unknown): asserts value is boolean { diff --git a/src/client/core.ts b/src/client/core.ts index dbcc4fe8f..2ea7e5a25 100644 --- a/src/client/core.ts +++ b/src/client/core.ts @@ -101,6 +101,10 @@ export async function aptosRequest( return result; } + if (aptosConfig.isPepperServiceRequest(url)) { + throw new AptosApiError(options, result, `${response.data}`); + } + let errorMessage: string; if (result && result.data && "message" in result.data && "error_code" in result.data) { diff --git a/src/client/get.ts b/src/client/get.ts index 35f569403..b9352e944 100644 --- a/src/client/get.ts +++ b/src/client/get.ts @@ -77,6 +77,12 @@ export async function getAptosFullNode( return get({ ...options, type: AptosApiType.FULLNODE }); } +export async function getAptosPepperService( + options: GetAptosRequestOptions, +): Promise> { + return get({ ...options, type: AptosApiType.PEPPER }); +} + /// This function is a helper for paginating using a function wrapping an API export async function paginateWithCursor, Res extends Array<{}>>( options: GetAptosRequestOptions, diff --git a/src/client/post.ts b/src/client/post.ts index 74eab5e94..bc60bbd0f 100644 --- a/src/client/post.ts +++ b/src/client/post.ts @@ -96,3 +96,16 @@ export async function postAptosFaucet( ): Promise> { return post({ ...options, type: AptosApiType.FAUCET }); } + + +export async function postAptosPepperService( + options: PostAptosRequestOptions, +): Promise> { + return post({ ...options, type: AptosApiType.PEPPER }); +} + +export async function postAptosProvingService( + options: PostAptosRequestOptions, +): Promise> { + return post({ ...options, type: AptosApiType.PROVER }); +} \ No newline at end of file diff --git a/src/core/account/Account.ts b/src/core/account/Account.ts index bb6e8a426..0b3620513 100644 --- a/src/core/account/Account.ts +++ b/src/core/account/Account.ts @@ -106,13 +106,6 @@ export interface PrivateKeyFromDerivationPathArgs { * Note: Generating an account instance does not create the account on-chain. */ export abstract class Account { - /** - * Private key associated with the account. - * Note: this will be removed in the next major release, - * as not all accounts have a private key. - */ - abstract readonly privateKey: PrivateKey; - /** * Public key associated with the account */ diff --git a/src/core/account/EphemeralAccount.ts b/src/core/account/EphemeralAccount.ts new file mode 100644 index 000000000..c54e40a4a --- /dev/null +++ b/src/core/account/EphemeralAccount.ts @@ -0,0 +1,69 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { randomBytes } from "@noble/hashes/utils"; + + +import { Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../crypto"; +import { Hex } from "../hex"; +import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../crypto/poseidon"; +import { GenerateAccount, HexInput, SigningSchemeInput } from "../../types"; + +export class EphemeralAccount { + readonly blinder: Uint8Array; + + readonly expiryTimestamp: bigint; + + readonly nonce: string; + + readonly privateKey: PrivateKey; + + readonly publicKey: EphemeralPublicKey; + + constructor(args: { privateKey: PrivateKey; expiryTimestamp?: bigint; blinder?: HexInput }) { + const { privateKey, expiryTimestamp, blinder } = args; + this.privateKey = privateKey; + this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); + const currentDate = new Date(); + const currentTimeInSeconds = Math.floor(currentDate.getTime() / 1000) + 10000; + this.expiryTimestamp = expiryTimestamp || BigInt(currentTimeInSeconds); + this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); + this.nonce = this.generateNonce(); + } + + static generate(args?: GenerateAccount): EphemeralAccount { + let privateKey: PrivateKey; + + switch (args?.scheme) { + case SigningSchemeInput.Ed25519: + default: + privateKey = Ed25519PrivateKey.generate(); + } + + const expiryTimestamp = BigInt(123); // TODO + + return new EphemeralAccount({ privateKey, expiryTimestamp }); + } + + generateNonce(): string { + const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); + fields.push(BigInt(this.expiryTimestamp)) + fields.push(bytesToBigIntLE(this.blinder)) + const nonceHash = poseidonHash(fields); + return nonceHash.toString(); + } + + /** + * Sign the given message with the private key. + * * + * @param data in HexInput format + * @returns EphemeralSignature + */ + sign(data: HexInput): EphemeralSignature { + return new EphemeralSignature(this.privateKey.sign(data)); + } +} + +function generateBlinder(): Uint8Array { + return randomBytes(31); +} diff --git a/src/core/account/KeylessAccount.ts b/src/core/account/KeylessAccount.ts new file mode 100644 index 000000000..60230e92b --- /dev/null +++ b/src/core/account/KeylessAccount.ts @@ -0,0 +1,152 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { HexInput, SigningScheme } from "../../types"; +import { AccountAddress } from "../accountAddress"; +import { AccountPublicKey, KeylessPublicKey, KeylessSignature, OpenIdSignature, OpenIdSignatureOrZkProof, Signature, SignedGroth16Signature, computeAddressSeed } from "../crypto"; +import { Account } from "./Account"; +import { EphemeralAccount } from "./EphemeralAccount"; + + +export class KeylessAccount implements Account { + static readonly PEPPER_LENGTH: number = 31; + + publicKey: AccountPublicKey; + + ephemeralAccount: EphemeralAccount; + + uidKey: string; + + uidVal: string; + + aud: string; + + pepper: Uint8Array; + + accountAddress: AccountAddress; + + proof: SignedGroth16Signature; + + signingScheme: SigningScheme; + + jwt: string; + + constructor(args: { + address?: AccountAddress; + ephemeralAccount: EphemeralAccount; + iss: string; + uidKey: string; + uidVal: string; + aud: string; + pepper: HexInput; + proof: SignedGroth16Signature; + jwt: string; + }) { + const { address, ephemeralAccount, iss, uidKey, uidVal, aud, pepper, proof, jwt } = args; + this.ephemeralAccount = ephemeralAccount; + const addressSeed = computeAddressSeed(args); + this.publicKey = new KeylessPublicKey(iss, addressSeed); + const authKey = AuthenticationKey.fromPublicKey({ publicKey: new AnyPublicKey(this.publicKey) }); + const derivedAddress = authKey.derivedAddress(); + this.accountAddress = address ?? derivedAddress; + this.uidKey = uidKey; + this.uidVal = uidVal; + this.aud = aud; + this.proof = proof; + this.jwt = jwt + + this.signingScheme = SigningScheme.SingleKey; + const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); + if (pepperBytes.length !== KeylessAccount.PEPPER_LENGTH) { + throw new Error(`Pepper length in bytes should be ${KeylessAccount.PEPPER_LENGTH}`); + } + this.pepper = pepperBytes; + } + + sign(data: HexInput): Signature { + const jwtHeader = this.jwt.split(".")[0]; + const { expiryTimestamp } = this.ephemeralAccount; + const ephemeralPublicKey = this.ephemeralAccount.publicKey; + const ephemeralSignature = this.ephemeralAccount.sign(data); + const oidbSig = new KeylessSignature({ + jwtHeader, + openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), + expiryTimestamp, + ephemeralPublicKey, + ephemeralSignature, + }); + return oidbSig + } + + signWithZkProof(data: HexInput): Signature { + const jwtHeader = this.jwt.split(".")[0]; + const { expiryTimestamp } = this.ephemeralAccount; + const ephemeralPublicKey = this.ephemeralAccount.publicKey; + const ephemeralSignature = this.ephemeralAccount.sign(data); + const oidbSig = new KeylessSignature({ + jwtHeader, + openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), + expiryTimestamp, + ephemeralPublicKey, + ephemeralSignature, + }); + return oidbSig + } + + signWithOpenIdSignature(data: HexInput): Signature { + const [jwtHeader, jwtPayload, jwtSignature] = this.jwt.split("."); + const openIdSig = new OpenIdSignature({ + jwtSignature, + jwtPayloadJson: jwtPayload, + uidKey: this.uidKey, + epkBlinder: this.ephemeralAccount.blinder, + pepper: this.pepper, + }); + + const { expiryTimestamp } = this.ephemeralAccount; + const ephemeralPublicKey = this.ephemeralAccount.publicKey; + const ephemeralSignature = this.ephemeralAccount.sign(data); + const oidbSig = new KeylessSignature({ + jwtHeader, + openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(openIdSig), + expiryTimestamp, + ephemeralPublicKey, + ephemeralSignature, + }); + return oidbSig + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this + verifySignature(args: { message: HexInput; signature: Signature }): boolean { + return true + } + + static fromJWTAndProof(args: { + proof: SignedGroth16Signature + jwt: string; + ephemeralAccount: EphemeralAccount; + pepper: HexInput; + uidKey?: string; + }): KeylessAccount { + const { proof, jwt, ephemeralAccount, pepper } = args; + const uidKey = args.uidKey ?? "sub"; + + const jwtPayload = jwtDecode(jwt); + const iss = jwtPayload.iss!; + if (typeof jwtPayload.aud !== "string") { + throw new Error("aud was not found or an array of values"); + } + const aud = jwtPayload.aud!; + const uidVal = jwtPayload[uidKey]; + return new KeylessAccount({ + proof, + ephemeralAccount, + iss, + uidKey, + uidVal, + aud, + pepper, + jwt + }); + } +} diff --git a/src/core/account/index.ts b/src/core/account/index.ts index 873149228..fbf8265ae 100644 --- a/src/core/account/index.ts +++ b/src/core/account/index.ts @@ -1,3 +1,5 @@ export * from "./Ed25519Account"; export * from "./Account"; export * from "./SingleKeyAccount"; +export * from "./KeylessAccount"; +export * from "./EphemeralAccount"; diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts new file mode 100644 index 000000000..b6229e23c --- /dev/null +++ b/src/core/crypto/ephemeral.ts @@ -0,0 +1,140 @@ +import { Serializer, Deserializer } from "../../bcs"; +import { EphemeralPublicKeyVariant, EphemeralSignatureVariant, HexInput } from "../../types"; +import { PublicKey } from "./publicKey"; +import { Signature } from "./signature"; +import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; + +/** + * Represents any public key supported by Aptos. + * + * TODO + */ +export class EphemeralPublicKey extends PublicKey { + /** + * Reference to the inner public key + */ + public readonly publicKey: PublicKey; + + constructor(publicKey: PublicKey) { + super(); + const publicKeyType = publicKey.constructor.name; + switch (publicKeyType) { + case Ed25519PublicKey.name: + this.publicKey = publicKey; + break; + default: + throw new Error(`Unsupported key for EphemeralPublicKey - ${publicKeyType}`); + } + } + + /** + * Get the public key in bytes (Uint8Array). + * + * @returns Uint8Array representation of the public key + */ + toUint8Array(): Uint8Array { + return this.bcsToBytes(); + } + + /** + * Get the public key as a hex string with the 0x prefix. + * + * @returns string representation of the public key + */ + toString(): string { + return this.bcsToHex().toString() + } + + /** + * Verifies a signed data with a public key + * + * @param args.message message + * @param args.signature The signature + * @returns true if the signature is valid + */ + verifySignature(args: { message: HexInput; signature: EphemeralSignature }): boolean { + const { message, signature } = args; + return this.publicKey.verifySignature({ message, signature }); + } + + serialize(serializer: Serializer): void { + if (this.publicKey instanceof Ed25519PublicKey) { + serializer.serializeU32AsUleb128(EphemeralPublicKeyVariant.Ed25519); + this.publicKey.serialize(serializer); + } else { + throw new Error("Unknown public key type"); + } + } + + static deserialize(deserializer: Deserializer): EphemeralPublicKey { + const index = deserializer.deserializeUleb128AsU32(); + switch (index) { + case EphemeralPublicKeyVariant.Ed25519: + return new EphemeralPublicKey(Ed25519PublicKey.deserialize(deserializer)); + default: + throw new Error(`Unknown variant index for EphemeralPublicKey: ${index}`); + } + } + + static isPublicKey(publicKey: PublicKey): publicKey is EphemeralPublicKey { + return publicKey instanceof EphemeralPublicKey; + } + + isEd25519(): this is Ed25519PublicKey { + return this.publicKey instanceof Ed25519PublicKey; + } +} + + +export class EphemeralSignature extends Signature { + public readonly signature: Signature; + + constructor(signature: Signature) { + super(); + const signatureType = signature.constructor.name; + switch (signatureType) { + case Ed25519Signature.name: + this.signature = signature; + break; + default: + throw new Error(`Unsupported signature for EphemeralSignature - ${signatureType}`); + } + } + + /** + * Get the public key in bytes (Uint8Array). + * + * @returns Uint8Array representation of the public key + */ + toUint8Array(): Uint8Array { + return this.signature.toUint8Array(); + } + + /** + * Get the public key as a hex string with the 0x prefix. + * + * @returns string representation of the public key + */ + toString(): string { + return this.signature.toString(); + } + + serialize(serializer: Serializer): void { + if (this.signature instanceof Ed25519Signature) { + serializer.serializeU32AsUleb128(EphemeralSignatureVariant.Ed25519); + this.signature.serialize(serializer); + } else { + throw new Error("Unknown signature type"); + } + } + + static deserialize(deserializer: Deserializer): EphemeralSignature { + const index = deserializer.deserializeUleb128AsU32(); + switch (index) { + case EphemeralSignatureVariant.Ed25519: + return new EphemeralSignature(Ed25519Signature.deserialize(deserializer)); + default: + throw new Error(`Unknown variant index for EphemeralSignature: ${index}`); + } + } +} diff --git a/src/core/crypto/index.ts b/src/core/crypto/index.ts index 75ddf1613..6b3c87573 100644 --- a/src/core/crypto/index.ts +++ b/src/core/crypto/index.ts @@ -5,6 +5,8 @@ export * from "./ed25519"; export * from "./hdKey"; export * from "./multiEd25519"; export * from "./multiKey"; +export * from "./ephemeral"; +export * from "./keyless"; export * from "./privateKey"; export * from "./publicKey"; export * from "./secp256k1"; diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts new file mode 100644 index 000000000..4d11fc5ef --- /dev/null +++ b/src/core/crypto/keyless.ts @@ -0,0 +1,494 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { bytesToHex } from "@noble/curves/abstract/utils"; +import { AccountPublicKey, PublicKey } from "./publicKey"; +import { Signature } from "./signature"; +import { Deserializer, Serializable, Serializer } from "../../bcs"; +import { Hex } from "../hex"; +import { HexInput, OpenIdSignatureOrZkProofVariant, SigningScheme } from "../../types"; +import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; +import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; +import { AuthenticationKey } from "../authenticationKey"; + +export const EPK_LIFESPAN = 10000000; +export const MAX_AUD_VAL_BYTES = 120; +export const MAX_UID_KEY_BYTES = 30; +export const MAX_UID_VAL_BYTES = 330; +export const MAX_ISS_VAL_BYTES = 120; +export const MAX_EXTRA_FIELD_BYTES = 350; +export const MAX_JWT_HEADER_B64_BYTES = 300; +export const MAX_COMMITED_EPK_BYTES = 93; + +/** + * Represents the KeylessPublicKey public key + * + * KeylessPublicKey authentication key is represented in the SDK as `AnyPublicKey`. + */ +export class KeylessPublicKey extends AccountPublicKey { + static readonly ADDRESS_SEED_LENGTH: number = 32; + + readonly iss: string; + + readonly addressSeed: Uint8Array; + + constructor(iss: string, addressSeed: HexInput) { + super(); + const addressSeedBytes = Hex.fromHexInput(addressSeed).toUint8Array(); + if (addressSeedBytes.length !== KeylessPublicKey.ADDRESS_SEED_LENGTH) { + throw new Error(`Address seed length in bytes should be ${KeylessPublicKey.ADDRESS_SEED_LENGTH}`); + } + + this.iss = iss; + this.addressSeed = addressSeedBytes; + } + + authKey(): AuthenticationKey { + return AuthenticationKey.fromSchemeAndBytes({ + scheme: SigningScheme.SingleKey, + input: this.toUint8Array(), + }); + } + + /** + * Get the public key in bytes (Uint8Array). + * + * @returns Uint8Array representation of the public key + */ + toUint8Array(): Uint8Array { + return this.addressSeed; // TODO + } + + /** + * Get the public key as a hex string with the 0x prefix. + * + * @returns string representation of the public key + */ + toString(): string { + return `${this.iss }.${ bytesToHex(this.addressSeed)}`; + } + + /** + * Verifies a signed data with a public key + * + * @param args.message message + * @param args.signature The signature + * @returns true if the signature is valid + */ + // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars + verifySignature(args: { message: HexInput; signature: KeylessSignature }): boolean { + // TODO + return true; + } + + serialize(serializer: Serializer): void { + serializer.serializeStr(this.iss); + serializer.serializeBytes(this.addressSeed); + } + + static deserialize(deserializer: Deserializer): KeylessPublicKey { + const iss = deserializer.deserializeStr(); + const addressSeed = deserializer.deserializeBytes(); + return new KeylessPublicKey(iss, addressSeed); + } + + static load(deserializer: Deserializer): KeylessPublicKey { + const iss = deserializer.deserializeStr(); + const addressSeed = deserializer.deserializeBytes(); + return new KeylessPublicKey(iss, addressSeed); + } + + static isPublicKey(publicKey: PublicKey): publicKey is KeylessPublicKey { + return publicKey instanceof KeylessPublicKey; + } + + static create(args: { + iss: string; + uidKey: string; + uidVal: string; + aud: string; + pepper: HexInput; + }): KeylessPublicKey { + computeAddressSeed(args); + return new KeylessPublicKey(args.iss,computeAddressSeed(args)); + } +} + +export function computeAddressSeed(args: { + uidKey: string; + uidVal: string; + aud: string; + pepper: HexInput; +}): Uint8Array { + const { uidKey, uidVal, aud, pepper } = args; + + const fields = [ + bytesToBigIntLE(Hex.fromHexInput(pepper).toUint8Array()), + hashASCIIStrToField(aud, MAX_AUD_VAL_BYTES), + hashASCIIStrToField(uidVal, MAX_UID_VAL_BYTES), + hashASCIIStrToField(uidKey, MAX_UID_KEY_BYTES), + ]; + + return bigIntToBytesLE(poseidonHash(fields), KeylessPublicKey.ADDRESS_SEED_LENGTH); +} + +export class OpenIdSignatureOrZkProof extends Signature { + public readonly signature: Signature; + + constructor(signature: Signature) { + super(); + this.signature = signature; + } + + /** + * Get the public key in bytes (Uint8Array). + * + * @returns Uint8Array representation of the public key + */ + toUint8Array(): Uint8Array { + return this.signature.toUint8Array(); + } + + /** + * Get the public key as a hex string with the 0x prefix. + * + * @returns string representation of the public key + */ + toString(): string { + return this.signature.toString(); + } + + serialize(serializer: Serializer): void { + if (this.signature instanceof OpenIdSignature) { + serializer.serializeU32AsUleb128(OpenIdSignatureOrZkProofVariant.OpenIdSignature); + this.signature.serialize(serializer); + } else if (this.signature instanceof SignedGroth16Signature) { + serializer.serializeU32AsUleb128(OpenIdSignatureOrZkProofVariant.ZkProof); + this.signature.serialize(serializer); + } else { + throw new Error("Not a valid OIDB signature"); + } + } + + static deserialize(deserializer: Deserializer): OpenIdSignatureOrZkProof { + const index = deserializer.deserializeUleb128AsU32(); + switch (index) { + // case OpenIdSignatureOrZkProofVariant.ZkProof: + // return new AnySignature(Ed25519Signature.load(deserializer)); + case OpenIdSignatureOrZkProofVariant.OpenIdSignature: + return new OpenIdSignatureOrZkProof(OpenIdSignature.load(deserializer)); + default: + throw new Error(`Unknown variant index for OpenIdSignatureOrZkProofVariant: ${index}`); + } + } +} + +export class Groth16Zkp extends Serializable{ + a: Uint8Array; + + b: Uint8Array; + + c: Uint8Array; + + constructor(args: { + a: HexInput, + b: HexInput, + c: HexInput, + }) { + super(); + const { a, b, c } = args; + this.a = Hex.fromHexInput(a).toUint8Array(); + this.b = Hex.fromHexInput(b).toUint8Array(); + this.c = Hex.fromHexInput(c).toUint8Array(); + } + + toUint8Array(): Uint8Array { + const serializer = new Serializer(); + this.serialize(serializer); + return serializer.toUint8Array(); + } + + serialize(serializer: Serializer): void { + serializer.serializeFixedBytes(this.a); // Should this be fixedBytes?? + serializer.serializeFixedBytes(this.b); + serializer.serializeFixedBytes(this.c); + } + + static deserialize(deserializer: Deserializer): Groth16Zkp { + const a = deserializer.deserializeBytes(); + const b = deserializer.deserializeBytes(); + const c = deserializer.deserializeBytes(); + return new Groth16Zkp({ a, b, c }); + } +} + +export class SignedGroth16Signature extends Signature { + readonly proof: Groth16Zkp; + + readonly nonMalleabilitySignature: EphemeralSignature; + + readonly extraField?: string; + + readonly overrideAudVal?: string; + + readonly trainingWheelsSignature?: EphemeralSignature; + + + constructor(args: { + proof: Groth16Zkp; + nonMalleabilitySignature: EphemeralSignature; + extraField?: string; + overrideAudVal?: string; + trainingWheelsSignature?: EphemeralSignature; + + }) { + super(); + const { proof, nonMalleabilitySignature, trainingWheelsSignature, extraField, overrideAudVal } = args; + this.proof = proof; + this.nonMalleabilitySignature = nonMalleabilitySignature; + this.trainingWheelsSignature = trainingWheelsSignature; + this.extraField = extraField; + this.overrideAudVal = overrideAudVal; + } + + /** + * Get the signature in bytes (Uint8Array). + * + * @returns Uint8Array representation of the signature + */ + toUint8Array(): Uint8Array { + const serializer = new Serializer(); + this.serialize(serializer); + return serializer.toUint8Array(); + } + + /** + * Get the signature as a hex string with the 0x prefix. + * + * @returns string representation of the signature + */ + toString(): string { + return this.toString(); + } + + serialize(serializer: Serializer): void { + this.proof.serialize(serializer); + this.nonMalleabilitySignature.serialize(serializer); + serializer.serializeU64(EPK_LIFESPAN); + serializer.serializeOptionStr(this.extraField); + serializer.serializeOptionStr(this.overrideAudVal); + serializer.serializeOption(this.trainingWheelsSignature); + + } + + static deserialize(deserializer: Deserializer): SignedGroth16Signature { + const proof = Groth16Zkp.deserialize(deserializer); + const nonMalleabilitySignature = EphemeralSignature.deserialize(deserializer); + const trainingWheelsSignature = EphemeralSignature.deserialize(deserializer); + const extraField = deserializer.deserializeStr(); + return new SignedGroth16Signature({ proof, nonMalleabilitySignature, trainingWheelsSignature, extraField }); + } + + static load(deserializer: Deserializer): SignedGroth16Signature { + const proof = Groth16Zkp.deserialize(deserializer); + const nonMalleabilitySignature = EphemeralSignature.deserialize(deserializer); + const trainingWheelsSignature = EphemeralSignature.deserialize(deserializer); + const extraField = deserializer.deserializeStr(); + return new SignedGroth16Signature({ proof, nonMalleabilitySignature, trainingWheelsSignature, extraField }); + } + + // static isSignature(signature: Signature): signature is OpenIdSignature { + // return signature instanceof OpenIdSignature; + // } +} + +/** + * A OpenId signature which contains the private inputs to an OIDB proof. + */ +export class OpenIdSignature extends Signature { + readonly jwtSignature: string; + + readonly uidKey: string; + + readonly jwtPayloadJson: string; + + readonly epkBlinder: Uint8Array; + + readonly pepper: Uint8Array; + + readonly overrideAudValue?: string; + + /** + * Create a new Signature instance from a Uint8Array or String. + * + * @param hexInput A HexInput (string or Uint8Array) + */ + constructor(args: { + jwtSignature: string; + jwtPayloadJson: string; + uidKey?: string; + epkBlinder: Uint8Array; + pepper: Uint8Array; + overrideAudValue?: string; + }) { + super(); + const { jwtSignature, uidKey, jwtPayloadJson, epkBlinder, pepper, overrideAudValue } = args; + this.jwtSignature = jwtSignature; + this.jwtPayloadJson = jwtPayloadJson; + this.uidKey = uidKey ?? "sub"; + this.epkBlinder = epkBlinder; + this.pepper = pepper; + this.overrideAudValue = overrideAudValue; + } + + /** + * Get the signature in bytes (Uint8Array). + * + * @returns Uint8Array representation of the signature + */ + toUint8Array(): Uint8Array { + // const textEncoder = new TextEncoder(); + // const jwtSigBytes = textEncoder.encode(this.jwtSignature); + // const jwtPayloadJsonBytes = textEncoder.encode(this.jwtPayloadJson); + // const uidKeyBytes = textEncoder.encode(this.jwtSignature); + // const uidKeyBytes = textEncoder.encode(this.jwtSignature); + + return this.epkBlinder; + } + + /** + * Get the signature as a hex string with the 0x prefix. + * + * @returns string representation of the signature + */ + toString(): string { + return this.toString(); + } + + serialize(serializer: Serializer): void { + serializer.serializeStr(this.jwtSignature); + serializer.serializeStr(this.jwtPayloadJson); + serializer.serializeStr(this.uidKey); + serializer.serializeBytes(this.epkBlinder); + serializer.serializeFixedBytes(this.pepper); + serializer.serializeOptionStr(this.overrideAudValue); + } + + static deserialize(deserializer: Deserializer): OpenIdSignature { + const jwtSignature = deserializer.deserializeStr(); + const jwtPayloadJson = deserializer.deserializeStr(); + const uidKey = deserializer.deserializeStr(); + const epkBlinder = deserializer.deserializeFixedBytes(31); + const pepper = deserializer.deserializeFixedBytes(31); + return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper }); + } + + static load(deserializer: Deserializer): OpenIdSignature { + const jwtSignature = deserializer.deserializeStr(); + const jwtPayloadJson = deserializer.deserializeStr(); + const uidKey = deserializer.deserializeStr(); + const epkBlinder = deserializer.deserializeFixedBytes(31); + const pepper = deserializer.deserializeFixedBytes(31); + return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper }); + } + + static isSignature(signature: Signature): signature is OpenIdSignature { + return signature instanceof OpenIdSignature; + } +} + +/** + * A signature of a message signed via OIDC that uses proofs or the jwt token to authenticate. + */ +export class KeylessSignature extends Signature { + readonly openIdSignatureOrZkProof: OpenIdSignatureOrZkProof; + + readonly jwtHeader: string; + + readonly expiryTimestamp: bigint; + + readonly ephemeralPublicKey: EphemeralPublicKey; + + readonly ephemeralSignature: EphemeralSignature; + + /** + * Create a new Signature instance from a Uint8Array or String. + * + * @param hexInput A HexInput (string or Uint8Array) + */ + constructor(args: { + jwtHeader: string; + openIdSignatureOrZkProof: OpenIdSignatureOrZkProof; + expiryTimestamp: bigint; + ephemeralPublicKey: EphemeralPublicKey; + ephemeralSignature: EphemeralSignature; + }) { + super(); + const { jwtHeader, openIdSignatureOrZkProof, expiryTimestamp, ephemeralPublicKey, ephemeralSignature } = args; + this.jwtHeader = jwtHeader; + this.openIdSignatureOrZkProof = openIdSignatureOrZkProof; + this.expiryTimestamp = expiryTimestamp; + this.ephemeralPublicKey = ephemeralPublicKey; + this.ephemeralSignature = ephemeralSignature; + } + + /** + * Get the signature in bytes (Uint8Array). + * + * @returns Uint8Array representation of the signature + */ + toUint8Array(): Uint8Array { + return this.ephemeralSignature.toUint8Array(); + } + + /** + * Get the signature as a hex string with the 0x prefix. + * + * @returns string representation of the signature + */ + toString(): string { + return this.toString(); + } + + serialize(serializer: Serializer): void { + this.openIdSignatureOrZkProof.serialize(serializer); + serializer.serializeStr(this.jwtHeader); + serializer.serializeU64(this.expiryTimestamp); + this.ephemeralPublicKey.serialize(serializer); + this.ephemeralSignature.serialize(serializer); + } + + static deserialize(deserializer: Deserializer): KeylessSignature { + const jwtHeader = deserializer.deserializeStr(); + const expiryTimestamp = deserializer.deserializeU64(); + const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); + const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); + const ephemeralSignature = EphemeralSignature.deserialize(deserializer); + return new KeylessSignature({ + jwtHeader, + expiryTimestamp, + openIdSignatureOrZkProof, + ephemeralPublicKey, + ephemeralSignature, + }); + } + + static load(deserializer: Deserializer): KeylessSignature { + const jwtHeader = deserializer.deserializeStr(); + const expiryTimestamp = deserializer.deserializeU64(); + const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); + const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); + const ephemeralSignature = EphemeralSignature.deserialize(deserializer); + return new KeylessSignature({ + jwtHeader, + expiryTimestamp, + openIdSignatureOrZkProof, + ephemeralPublicKey, + ephemeralSignature, + }); + } + + static isSignature(signature: Signature): signature is KeylessSignature { + return signature instanceof KeylessSignature; + } +} diff --git a/src/core/crypto/poseidon.ts b/src/core/crypto/poseidon.ts new file mode 100644 index 000000000..9583838bf --- /dev/null +++ b/src/core/crypto/poseidon.ts @@ -0,0 +1,134 @@ +/* eslint-disable no-bitwise */ +import { + poseidon1, + poseidon2, + poseidon3, + poseidon4, + poseidon5, + poseidon6, + poseidon7, + poseidon8, + poseidon9, + poseidon10, + poseidon11, + poseidon12, + poseidon13, + poseidon14, + poseidon15, + poseidon16, +} from "poseidon-lite"; + +const numInputsToPoseidonFunc = [ + poseidon1, + poseidon2, + poseidon3, + poseidon4, + poseidon5, + poseidon6, + poseidon7, + poseidon8, + poseidon9, + poseidon10, + poseidon11, + poseidon12, + poseidon13, + poseidon14, + poseidon15, + poseidon16, +]; + +const BYTES_PACKED_PER_SCALAR = 31; +const MAX_NUM_INPUT_SCALARS = 16; +const MAX_NUM_INPUT_BYTES = (MAX_NUM_INPUT_SCALARS - 1) * BYTES_PACKED_PER_SCALAR; + +// hashes an ASCII string to a field element +export function hashASCIIStrToField(str: string, maxSizeBytes: number) { + const textEncoder = new TextEncoder(); + const strBytes = textEncoder.encode(str); + return hashBytesWithLen(strBytes, maxSizeBytes); +} + +function hashBytesWithLen(bytes: Uint8Array, maxSizeBytes: number) { + if (bytes.length > maxSizeBytes) { + throw new Error(`Inputted bytes of length ${bytes} is longer than ${maxSizeBytes}`); + } + const packed = padAndPackBytesWithLen(bytes, maxSizeBytes); + return poseidonHash(packed); +} + +function padAndPackBytesNoLen(bytes: Uint8Array, maxSizeBytes: number): bigint[] { + if (bytes.length > maxSizeBytes) { + throw new Error(`Input bytes of length ${bytes} is longer than ${maxSizeBytes}`); + } + const paddedStrBytes = padUint8ArrayWithZeros(bytes, maxSizeBytes); + return packBytes(paddedStrBytes); +} + +export function padAndPackBytesWithLen(bytes: Uint8Array, maxSizeBytes: number): bigint[] { + if (bytes.length > maxSizeBytes) { + throw new Error(`Input bytes of length ${bytes} is longer than ${maxSizeBytes}`); + } + return padAndPackBytesNoLen(bytes, maxSizeBytes).concat([BigInt(bytes.length)]); +} + +function packBytes(bytes: Uint8Array): bigint[] { + if (bytes.length > MAX_NUM_INPUT_BYTES) { + throw new Error(`Can't pack more than ${MAX_NUM_INPUT_BYTES}. Was given ${bytes.length} bytes`); + } + return chunkUint8Array(bytes, BYTES_PACKED_PER_SCALAR).map((chunk) => bytesToBigIntLE(chunk)); +} + +function chunkUint8Array(array: Uint8Array, chunkSize: number): Uint8Array[] { + const result: Uint8Array[] = []; + for (let i = 0; i < array.length; i += chunkSize) { + result.push(array.subarray(i, i + chunkSize)); + } + return result; +} + +export function bytesToBigIntLE(bytes: Uint8Array): bigint { + let result = BigInt(0); + for (let i = bytes.length - 1; i >= 0; i -= 1) { + result = (result << BigInt(8)) | BigInt(bytes[i]); + } + return result; +} + +export function bigIntToBytesLE(value: bigint, length: number): Uint8Array { + const bytes = new Uint8Array(length); + for (let i = 0; i < length; i += 1) { + bytes[i] = Number(value & BigInt(0xff)); + // eslint-disable-next-line no-param-reassign + value >>= BigInt(8); + } + return bytes; +} + +// From chatGPT +function padUint8ArrayWithZeros(inputArray: Uint8Array, paddedSize: number): Uint8Array { + if (paddedSize < inputArray.length) { + throw new Error("Padded size must be greater than or equal to the input array size."); + } + + // Create a new Uint8Array with the padded size + const paddedArray = new Uint8Array(paddedSize); + + // Copy the content of the input array to the new array + paddedArray.set(inputArray); + + // Fill the remaining space with zeros + for (let i = inputArray.length; i < paddedSize; i += 1) { + paddedArray[i] = 0; + } + + return paddedArray; +} + +export function poseidonHash(inputs: (number | bigint | string)[]): bigint { + const poseidonFixedHash = numInputsToPoseidonFunc[inputs.length - 1]; + + if (poseidonFixedHash) { + return poseidonFixedHash(inputs); + } + throw new Error(`Unable to hash input of length ${inputs.length}`); +} diff --git a/src/core/crypto/singleKey.ts b/src/core/crypto/singleKey.ts index 44e644636..fde96aed3 100644 --- a/src/core/crypto/singleKey.ts +++ b/src/core/crypto/singleKey.ts @@ -4,6 +4,7 @@ import { AuthenticationKey } from "../authenticationKey"; import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; import { AccountPublicKey, PublicKey, VerifySignatureArgs } from "./publicKey"; import { Secp256k1PublicKey, Secp256k1Signature } from "./secp256k1"; +import { KeylessPublicKey, KeylessSignature } from "./keyless"; import { Signature } from "./signature"; /** @@ -34,6 +35,8 @@ export class AnyPublicKey extends AccountPublicKey { this.variant = AnyPublicKeyVariant.Ed25519; } else if (publicKey instanceof Secp256k1PublicKey) { this.variant = AnyPublicKeyVariant.Secp256k1; + } else if (publicKey instanceof KeylessPublicKey) { + this.variant = AnyPublicKeyVariant.Keyless; } else { throw new Error("Unsupported public key type"); } @@ -85,6 +88,9 @@ export class AnyPublicKey extends AccountPublicKey { case AnyPublicKeyVariant.Secp256k1: publicKey = Secp256k1PublicKey.deserialize(deserializer); break; + case AnyPublicKeyVariant.Keyless: + publicKey = KeylessPublicKey.deserialize(deserializer); + break; default: throw new Error(`Unknown variant index for AnyPublicKey: ${variantIndex}`); } @@ -138,6 +144,8 @@ export class AnySignature extends Signature { this.variant = AnySignatureVariant.Ed25519; } else if (signature instanceof Secp256k1Signature) { this.variant = AnySignatureVariant.Secp256k1; + } else if (signature instanceof KeylessSignature) { + this.variant = AnySignatureVariant.Keyless; } else { throw new Error("Unsupported signature type"); } @@ -170,6 +178,9 @@ export class AnySignature extends Signature { case AnySignatureVariant.Secp256k1: signature = Secp256k1Signature.deserialize(deserializer); break; + case AnySignatureVariant.Keyless: + signature = KeylessSignature.deserialize(deserializer); + break; default: throw new Error(`Unknown variant index for AnySignature: ${variantIndex}`); } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts new file mode 100644 index 000000000..2abf8ff00 --- /dev/null +++ b/src/internal/keyless.ts @@ -0,0 +1,160 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +/** + * This file contains the underlying implementations for exposed API surface in + * the {@link api/oidb}. By moving the methods out into a separate file, + * other namespaces and processes can access these methods without depending on the entire + * faucet namespace and without having a dependency cycle error. + */ +import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; +import { jwtDecode } from "jwt-decode"; +import { bls12_381 as bls } from "@noble/curves/bls12-381"; +import { ProjPointType } from "@noble/curves/abstract/weierstrass"; +import { AptosConfig } from "../api/aptosConfig"; +import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; +import { + EPK_LIFESPAN, + Groth16Zkp, + Hex, + SignedGroth16Signature, +} from "../core"; +import { generateSigningMessage } from "../transactions"; +import { HexInput } from "../types"; +import { Serializer } from "../bcs"; + +function getPepperInput(args: {jwt: string, uidKey?: string}): ProjPointType { + const {jwt, uidKey } = args; + const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); + const serializer = new Serializer(); + serializer.serializeStr(jwtPayload.iss); + serializer.serializeStr(jwtPayload.aud); + serializer.serializeStr(jwtPayload[uidKey || "sub"]); + serializer.serializeStr(uidKey || "sub"); + const serial = serializer.toUint8Array() + const mess = bls.G1.hashToCurve(serial, { DST: "APTOS_OIDB_VUF_SCHEME0_DST" }).toAffine(); + const pp = bls.G1.ProjectivePoint.fromAffine(mess); + return pp +} + +export async function getPepper(args: { + aptosConfig: AptosConfig; + jwt: string; + ephemeralAccount: EphemeralAccount; + uidKey?: string; + verify?: boolean; +}): Promise { + const { aptosConfig, jwt, ephemeralAccount, uidKey, verify } = args; + + const body = { + jwt_b64: jwt, + epk_hex_string: ephemeralAccount.publicKey.bcsToHex().toStringWithoutPrefix(), + epk_expiry_time_secs: Number(ephemeralAccount.expiryTimestamp), + epk_blinder_hex_string: Hex.fromHexInput(ephemeralAccount.blinder).toStringWithoutPrefix(), + uid_key: uidKey, + }; + const jsonString = JSON.stringify(body); + console.log(jsonString); + const { data } = await postAptosPepperService({ + aptosConfig, + path: "", + body, + originMethod: "getPepper", + }); + console.log(data); + const pepperBase = Hex.fromHexInput(data.pepper_key_hex_string).toUint8Array(); + + if (verify) { + const { data: pubKeyResponse } = await getAptosPepperService({ + aptosConfig, + path: "vrf-pub-key", + originMethod: "getPepper", + }); + const publicKeyFromService = bls.G2.ProjectivePoint.fromHex(pubKeyResponse.vrf_public_key_hex_string); + const pepperVerified = bls.verifyShortSignature(pepperBase, getPepperInput(args), publicKeyFromService); + if (!pepperVerified) { + throw new Error("Unable to verify"); + } + } + + const hash = sha3Hash.create(); + hash.update(pepperBase); + const hashDigest = hash.digest(); + + const pepper = Hex.fromHexInput(hashDigest).toUint8Array().slice(0, 31) + + return pepper; +} + +export async function getProof(args: { + aptosConfig: AptosConfig; + jwt: string; + ephemeralAccount: EphemeralAccount; + pepper: HexInput; + uidKey?: string; + extraFieldKey?: string; +}): Promise { + const { aptosConfig, jwt, ephemeralAccount, pepper, uidKey, extraFieldKey } = args; + const extraFieldKey2 = extraFieldKey || "iss"; + const json = { + jwt_b64: jwt, + epk_hex_string: ephemeralAccount.publicKey.bcsToHex().toStringWithoutPrefix(), + epk_blinder_hex_string: Hex.fromHexInput(ephemeralAccount.blinder).toStringWithoutPrefix(), + epk_expiry_time_secs: Number(ephemeralAccount.expiryTimestamp), + epk_expiry_horizon_secs: EPK_LIFESPAN, + pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), + extra_field: extraFieldKey2, + uid_key: uidKey || "sub", + }; + const jsonString = JSON.stringify(json); + console.log(jsonString); + const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); + const extraFieldVal = jwtPayload[extraFieldKey2]; + const extraField = `"${extraFieldKey2}":"${extraFieldVal}",`; + // console.log(extraField); + if (typeof jwtPayload.aud !== "string") { + throw new Error("aud was not found or an array of values"); + } + + const { data } = await postAptosProvingService< + any, + { data: { proof: { pi_a: string; pi_b: string; pi_c: string }; public_inputs_hash: string } } + >({ + aptosConfig, + path: "prove", + body: json, + originMethod: "getProof", + }); + console.log(data); + + const proofPoints = data.data.proof; + + const proof = new Groth16Zkp({ + a: proofPoints.pi_a, + b: proofPoints.pi_b, + c: proofPoints.pi_c, + }); + const signMess = generateSigningMessage(proof.bcsToBytes(), "Groth16Zkp"); + const nonMalleabilitySignature = ephemeralAccount.sign(signMess); + const signedProof = new SignedGroth16Signature({ proof, nonMalleabilitySignature, extraField }); + return signedProof; +} + +export async function deriveKeylessAccount(args: { + aptosConfig: AptosConfig; + jwt: string; + ephemeralAccount: EphemeralAccount; + uidKey?: string; + pepper?: HexInput; + extraFieldKey?: string; +}): Promise { + let { pepper } = args; + if (pepper === undefined) { + pepper = await getPepper(args); + } else if (Hex.fromHexInput(pepper).toUint8Array().length !== 31) { + throw new Error("Pepper needs to be 31 bytes"); + } + + const proof = await getProof({ ...args, pepper }); + return KeylessAccount.fromJWTAndProof({ ...args, proof, pepper }); +} diff --git a/src/types/index.ts b/src/types/index.ts index 3d07ee70f..4377cc52f 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -107,11 +107,27 @@ export enum AccountAuthenticatorVariant { export enum AnyPublicKeyVariant { Ed25519 = 0, Secp256k1 = 1, + Keyless = 3, } export enum AnySignatureVariant { Ed25519 = 0, Secp256k1 = 1, + Keyless = 3, +} + + +export enum EphemeralPublicKeyVariant { + Ed25519 = 0, +} + +export enum EphemeralSignatureVariant { + Ed25519 = 0, +} + +export enum OpenIdSignatureOrZkProofVariant { + ZkProof = 0, + OpenIdSignature = 1, } /** @@ -139,6 +155,10 @@ export type AptosSettings = { readonly indexer?: string; + readonly pepper?: string; + + readonly prover?: string; + readonly clientConfig?: ClientConfig; readonly client?: Client; diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index 2858de818..d6bc773a7 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -25,6 +25,20 @@ export const NetworkToFaucetAPI: Record = { local: "http://127.0.0.1:8081", }; +export const NetworkToPepperAPI: Record = { + mainnet: "https://aptos-zkid-pepper-service-6vgsvc5oma-uc.a.run.app", + testnet: "https://aptos-zkid-pepper-service-6vgsvc5oma-uc.a.run.app", + devnet: "https://aptos-zkid-pepper-service-6vgsvc5oma-uc.a.run.app", + local: "http://127.0.0.1:8000", +}; + +export const NetworkToProverAPI: Record = { + mainnet: "TODO", + testnet: "https://prover-service-image-c6wgp6n6ia-uc.a.run.app", + devnet: "https://prover-service-image-c6wgp6n6ia-uc.a.run.app", + local: "http://35.236.15.8:8080", +}; + export enum Network { MAINNET = "mainnet", TESTNET = "testnet", diff --git a/src/utils/const.ts b/src/utils/const.ts index 256760e05..ff1879324 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -8,6 +8,8 @@ export enum AptosApiType { FULLNODE, INDEXER, FAUCET, + PEPPER, + PROVER, } /** From 61212445936bb93fed263fb7b4a46c3d8b18f03d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 7 Mar 2024 16:24:29 -0500 Subject: [PATCH 002/136] name ephemaccount to keypair --- examples/typescript/keyless.ts | 164 +++++++++++++++++++++++++++++++ examples/typescript/package.json | 1 + src/api/keyless.ts | 21 +--- src/internal/keyless.ts | 2 + 4 files changed, 169 insertions(+), 19 deletions(-) create mode 100644 examples/typescript/keyless.ts diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts new file mode 100644 index 000000000..787148933 --- /dev/null +++ b/examples/typescript/keyless.ts @@ -0,0 +1,164 @@ +/* eslint-disable max-len */ +/* eslint-disable no-console */ + +/** + * This example shows how to use the Aptos client to create accounts, fund them, and transfer between them. + */ + +import * as readline from "readline"; + +import { + Account, + AccountAddress, + Aptos, + AptosConfig, + Ed25519PrivateKey, + EphemeralAccount, + Network +} from "@aptos-labs/ts-sdk"; +import { promisify } from "util"; + +// TODO: There currently isn't a way to use the APTOS_COIN in the COIN_STORE due to a regex +const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; +const COIN_STORE = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; +const ALICE_INITIAL_BALANCE = 100_000_000; +const BOB_INITIAL_BALANCE = 100; +const TRANSFER_AMOUNT = 10_000; + +const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjZmOTc3N2E2ODU5MDc3OThlZjc5NDA2MmMwMGI2NWQ2NmMyNDBiMWIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTE2Mjc3NzI0NjA3NTIzNDIzMTIiLCJhdF9oYXNoIjoid3p4TGw3X2ZOVElNdWQ4bjJocGV2QSIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MDk1OTAyMzksImV4cCI6MTcwOTU5MzgzOX0.JifuCscRP9MFjgTIpKps6di9dW-KE8_b2iyguRLoxV_-Qdkb1vYFuLOBEPj-7ofWCM2RKOJsLXhRXNIIwmugNCDMSMfd8alocr2o2G0wpauEuFpg5GZJ135g6Kcd6Yrb2WtapzVGOad3ABSa3DXbgRkN0u4elSXZhWVCSlIYUllDl8C3zfMPZwtFsZJLu-QJhiLROkRETHTG11tIiwinC0XQBN1BdbAAxW5EH3DB4LVR73dMrC6qsNRN6sDme5-D10HBmbyascLRRb8RP9wc2AAlDHmuJXTpULT2RXp54OGs3QEC0zgv_JTIiw4-QCUnPf0dxGg10iLLD7T_KGSjWg"; + +/** + * Prints the balance of an account + * @param aptos + * @param name + * @param address + * @returns {Promise<*>} + * + */ +const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { + type Coin = { coin: { value: string } }; + const resource = await aptos.getAccountResource({ + accountAddress: address, + resourceType: COIN_STORE, + }); + const amount = Number(resource.coin.value); + + console.log(`${name}'s balance is: ${amount}`); + return amount; +}; + +const example = async () => { + // Setup the client + const config = new AptosConfig({network: Network.DEVNET}); + // const config = new AptosConfig(); + + const aptos = new Aptos(config); + + const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); + const expiryTimestamp = BigInt(1718911224); + const blinder = new Uint8Array(31); + for (let i = 0; i < blinder.length; i += 1) { + blinder[i] = 0; + } + const aliceEphem = new EphemeralAccount({ privateKey, expiryTimestamp, blinder }); + + console.log(); + console.log("=== Get token via the below link ==="); + console.log(); + + const link = `https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=openid&access_type=offline&service=lso&o2v=2&theme=glif&flowName=GeneralOAuthFlow&nonce=${aliceEphem.nonce}`; + console.log(link); + console.log(); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + const questionAsync = promisify(rl.question).bind(rl); + + // eslint-disable-next-line consistent-return + async function getUserInput(): Promise { + try { + const response = await questionAsync("Paste the JWT token (or press enter to use default test token): "); + if (response.trim() === "") { + console.log(); + console.log("No jwt token inputted. Using test jwt token"); + console.log(); + rl.close(); + return TEST_JWT + } + rl.close(); + return response.trim() + } catch (error) { + rl.close(); + console.error("Error reading user input:", error); + } + } + + const jwt = await getUserInput(); + + const bob = Account.generate(); + + const alice = await aptos.deriveKeylessAccount({ + jwt, + ephemeralAccount: aliceEphem, + // pepper: "4c000000000000000000000000000000000000000000000000000000000000", + // extraFieldKey: "family_name" + }); + + console.log("=== Addresses ===\n"); + console.log(`Alice's keyless account address is: ${alice.accountAddress}`); + console.log(`Alice's pk is: ${aliceEphem.privateKey}`); + console.log(`Alice's nonce is: ${aliceEphem.nonce}`); + console.log(`Alice's zkid is: ${alice.publicKey.addressSeed}`); + // console.log(`Alice's pk is: ${aliceEphem.privateKey}`); + + console.log(`Bob's address is: ${bob.accountAddress}`); + + // Fund the accounts + console.log("\n=== Funding accounts ===\n"); + + await aptos.faucet.fundAccount({ + accountAddress: alice.accountAddress, + amount: ALICE_INITIAL_BALANCE, + options: { waitForIndexer: false }, + }); + await aptos.faucet.fundAccount({ + accountAddress: bob.accountAddress, + amount: BOB_INITIAL_BALANCE, + options: { waitForIndexer: false }, + }); + + // // Show the balances + console.log("\n=== Balances ===\n"); + const aliceBalance = await balance(aptos, "Alice", alice.accountAddress); + const bobBalance = await balance(aptos, "Bob", bob.accountAddress); + + // Transfer between users + const transaction = await aptos.transaction.build.simple({ + sender: alice.accountAddress, + data: { + function: "0x1::coin::transfer", + typeArguments: [APTOS_COIN], + functionArguments: [bob.accountAddress, TRANSFER_AMOUNT], + }, + }); + + const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); + + await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); + console.log(`Committed transaction: ${committedTxn.hash}`); + + console.log("\n=== Balances after transfer ===\n"); + const newAliceBalance = await balance(aptos, "Alice", alice.accountAddress); + const newBobBalance = await balance(aptos, "Bob", bob.accountAddress); + + // Bob should have the transfer amount + if (TRANSFER_AMOUNT !== newBobBalance - bobBalance) throw new Error("Bob's balance after transfer is incorrect"); + + // Alice should have the remainder minus gas + if (TRANSFER_AMOUNT >= aliceBalance - newAliceBalance) throw new Error("Alice's balance after transfer is incorrect"); +}; + +example(); diff --git a/examples/typescript/package.json b/examples/typescript/package.json index 880899a76..465fe076b 100644 --- a/examples/typescript/package.json +++ b/examples/typescript/package.json @@ -15,6 +15,7 @@ "external_signing": "ts-node external_signing.ts", "your_coin": "ts-node your_coin.ts", "your_fungible_asset": "ts-node your_fungible_asset.ts", + "zkid3": "ts-node keyless.ts", "test": "run-s simple_transfer multi_agent_transfer simple_sponsored_transaction transfer_coin custom_client publish_package_from_filepath external_signing sign_struct" }, "keywords": [], diff --git a/src/api/keyless.ts b/src/api/keyless.ts index c4309029c..7bb926d3e 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,7 +1,8 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { deriveAccountFromJWTAndEphemAccount, deriveKeylessAccount, getPepper } from "../internal/keyless"; +import { EphemeralAccount, KeylessAccount } from "../core"; +import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; @@ -21,24 +22,6 @@ export class Keyless { return getPepper({ aptosConfig: this.config, ...args }); } - /** - * TODO - * - * @param args.jwt jwt token - * @param args.ephemeralAccount - * @param args.uidKey - * @param args.pepper - * @returns - */ - async deriveAccountFromJWTAndEphemAccount(args: { - jwt: string; - ephemeralAccount: EphemeralAccount; - uidKey?: string; - pepper?: HexInput; - }): Promise { - return deriveAccountFromJWTAndEphemAccount({ aptosConfig: this.config, ...args }); - } - /** * TODO * diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 2abf8ff00..1735f7017 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -15,8 +15,10 @@ import { AptosConfig } from "../api/aptosConfig"; import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; import { EPK_LIFESPAN, + EphemeralAccount, Groth16Zkp, Hex, + KeylessAccount, SignedGroth16Signature, } from "../core"; import { generateSigningMessage } from "../transactions"; From 4038477836ffc4e17d8d84c52c065a32197eaf9d Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 8 Mar 2024 16:57:06 -0500 Subject: [PATCH 003/136] 1.9.1-zeta.0 working --- examples/typescript/keyless.ts | 6 +- examples/typescript/keyless_escrow.ts | 258 ++++++++++++++++++ examples/typescript/package.json | 3 +- package.json | 13 +- pnpm-lock.yaml | 54 ++-- src/api/keyless.ts | 8 +- ...phemeralAccount.ts => EphemeralKeyPair.ts} | 6 +- src/core/account/KeylessAccount.ts | 92 +++++-- src/core/account/MultiKeyAccount.ts | 103 +++++++ src/core/account/index.ts | 3 +- src/core/crypto/keyless.ts | 14 +- src/core/crypto/multiKey.ts | 12 + src/internal/keyless.ts | 65 ++--- src/internal/transactionSubmission.ts | 3 +- src/transactions/authenticator/account.ts | 16 +- .../transactionBuilder/transactionBuilder.ts | 35 ++- src/types/index.ts | 2 +- src/utils/apiEndpoints.ts | 16 +- src/utils/const.ts | 4 +- src/version.ts | 2 +- 20 files changed, 573 insertions(+), 142 deletions(-) create mode 100644 examples/typescript/keyless_escrow.ts rename src/core/account/{EphemeralAccount.ts => EphemeralKeyPair.ts} (92%) create mode 100644 src/core/account/MultiKeyAccount.ts diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 787148933..0ff9a99f8 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -13,7 +13,7 @@ import { Aptos, AptosConfig, Ed25519PrivateKey, - EphemeralAccount, + EphemeralKeyPair, Network } from "@aptos-labs/ts-sdk"; import { promisify } from "util"; @@ -60,7 +60,7 @@ const example = async () => { for (let i = 0; i < blinder.length; i += 1) { blinder[i] = 0; } - const aliceEphem = new EphemeralAccount({ privateKey, expiryTimestamp, blinder }); + const aliceEphem = new EphemeralKeyPair({ privateKey, expiryTimestamp, blinder }); console.log(); console.log("=== Get token via the below link ==="); @@ -102,7 +102,7 @@ const example = async () => { const alice = await aptos.deriveKeylessAccount({ jwt, - ephemeralAccount: aliceEphem, + ephemeralKeyPair: aliceEphem, // pepper: "4c000000000000000000000000000000000000000000000000000000000000", // extraFieldKey: "family_name" }); diff --git a/examples/typescript/keyless_escrow.ts b/examples/typescript/keyless_escrow.ts new file mode 100644 index 000000000..b84025225 --- /dev/null +++ b/examples/typescript/keyless_escrow.ts @@ -0,0 +1,258 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable max-len */ +/* eslint-disable no-console */ + +/** + * This example shows how to use the Aptos client to create accounts, fund them, and transfer between them. + */ + +import * as readline from "readline"; + +import { promisify } from "util"; +import { randomBytes } from "crypto"; +import { + AuthenticationKey, + AccountAddress, + computeAddressSeed, + Aptos, + AptosConfig, + Ed25519PrivateKey, + EphemeralKeyPair, + KeylessPublicKey, + MultiKey, + Network, + MultiKeyAccount, +} from "../../dist/common"; +// import { AccountAuthenticatorMultiKey, AuthenticationKey, computeAddressSeed } from "../../dist/common"; + +// TODO: There currently isn't a way to use the APTOS_COIN in the COIN_STORE due to a regex +const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; +const COIN_STORE = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; +const ALICE_INITIAL_BALANCE = 100_000_000_000; +const TRANSFER_AMOUNT = 100_000_000; +const TRANSFER_AMOUNT_WITH_FEE = TRANSFER_AMOUNT + 600; + +const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjZmOTc3N2E2ODU5MDc3OThlZjc5NDA2MmMwMGI2NWQ2NmMyNDBiMWIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTE2Mjc3NzI0NjA3NTIzNDIzMTIiLCJhdF9oYXNoIjoid3p4TGw3X2ZOVElNdWQ4bjJocGV2QSIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MDk1OTAyMzksImV4cCI6MTcwOTU5MzgzOX0.JifuCscRP9MFjgTIpKps6di9dW-KE8_b2iyguRLoxV_-Qdkb1vYFuLOBEPj-7ofWCM2RKOJsLXhRXNIIwmugNCDMSMfd8alocr2o2G0wpauEuFpg5GZJ135g6Kcd6Yrb2WtapzVGOad3ABSa3DXbgRkN0u4elSXZhWVCSlIYUllDl8C3zfMPZwtFsZJLu-QJhiLROkRETHTG11tIiwinC0XQBN1BdbAAxW5EH3DB4LVR73dMrC6qsNRN6sDme5-D10HBmbyascLRRb8RP9wc2AAlDHmuJXTpULT2RXp54OGs3QEC0zgv_JTIiw4-QCUnPf0dxGg10iLLD7T_KGSjWg"; + +/** + * Prints the balance of an account + * @param aptos + * @param name + * @param address + * @returns {Promise<*>} + * + */ +const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { + type Coin = { coin: { value: string } }; + const resource = await aptos.getAccountResource({ + accountAddress: address, + resourceType: COIN_STORE, + }); + const amount = Number(resource.coin.value); + + console.log(`${name}'s balance is: ${amount}`); + return amount; +}; + +const example = async () => { + // Setup the client + const config = new AptosConfig({network: Network.DEVNET}); + const aptos = new Aptos(config); + + // Create two accounts + const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); + const expiryTimestamp = BigInt(1718911224); + const blinder = new Uint8Array(31); + for (let i = 0; i < blinder.length; i += 1) { + blinder[i] = 0; + } + const aliceEphem = new EphemeralKeyPair({ privateKey, expiryTimestamp, blinder }); + + console.log(); + console.log("=== Get token via the below link ==="); + console.log(); + + const link = `https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=openid%20email&access_type=offline&service=lso&o2v=2&theme=glif&flowName=GeneralOAuthFlow&nonce=${aliceEphem.nonce}`; + console.log(link); + console.log(); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + const questionAsync = promisify(rl.question).bind(rl); + + // eslint-disable-next-line consistent-return + async function getUserInput(): Promise { + try { + const response = await questionAsync("Paste the JWT token (or press enter to use default test token): "); + if (response.trim() === "") { + console.log(); + console.log("No jwt token inputted. Using test jwt token"); + console.log(); + // rl.close(); + return TEST_JWT + } + return response.trim() + } catch (error) { + rl.close(); + console.error("Error reading user input:", error); + } + } + + // eslint-disable-next-line consistent-return + async function getUserInputBobEmail(): Promise { + try { + const response = await questionAsync("Enter the bob's email address (the recipient): "); + if (response.trim() === "") { + console.log(); + console.log("No email inputted. Using heliuchuan@gmail.com"); + console.log(); + // rl.close(); + return "heliuchuan@gmail.com" + } + return response.trim() + } catch (error) { + rl.close(); + console.error("Error reading user input:", error); + } + } + + const iss = "https://accounts.google.com"; + const aud = "407408718192.apps.googleusercontent.com" + const uidKey = "email" + + const jwt = await getUserInput(); + + const bobEmail = await getUserInputBobEmail(); + + // const bobEmail = "oliver.he@aptoslabs.com"; + + const alice = await aptos.deriveKeylessAccount({ + jwt, + ephemeralKeyPair: aliceEphem, + }); + + const uidVal = bobEmail + const pepper = randomBytes(31);; + const escrowAddressSeed = computeAddressSeed({ + uidKey, + uidVal, + aud, + pepper, + }); + const escrowPublicKey = new KeylessPublicKey(iss, escrowAddressSeed); + + const multiKey = new MultiKey({publicKeys: [alice.publicKey, escrowPublicKey], signaturesRequired: 1}) + const mkAddr = AuthenticationKey.fromPublicKey({ publicKey: multiKey} ).derivedAddress(); + + console.log("\n=== Addresses ===\n"); + console.log(`Alice's address is: ${alice.accountAddress}`); + console.log(`Alice's ephem secret key is: ${aliceEphem.privateKey}`); + + // Fund the accounts + console.log("\n=== Funding accounts ===\n"); + + await aptos.faucet.fundAccount({ + accountAddress: alice.accountAddress, + amount: ALICE_INITIAL_BALANCE, + options: { waitForIndexer: false }, + }); + await aptos.faucet.fundAccount({ + accountAddress: mkAddr, + amount: 1, + options: { waitForIndexer: false }, + }); + + // // Show the balances + console.log("\n=== Balances ===\n"); + const aliceBalance = await balance(aptos, "Alice", alice.accountAddress); + const escrowBalance = await balance(aptos, "escrow", mkAddr); + + // Transfer between users + const transaction = await aptos.transaction.build.simple({ + sender: alice.accountAddress, + data: { + function: "0x1::coin::transfer", + typeArguments: [APTOS_COIN], + functionArguments: [mkAddr, TRANSFER_AMOUNT_WITH_FEE], + }, + }); + + console.log("\n=== Transferring ===\n"); + + const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); + + await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); + console.log(`Committed transaction: ${committedTxn.hash}`); + + console.log("\n=== Balances after transfer ===\n"); + const newAliceBalance = await balance(aptos, "Alice", alice.accountAddress); + const newEscrowBalance = await balance(aptos, "escrow", mkAddr); + + console.error("Amount transferred:", TRANSFER_AMOUNT_WITH_FEE); + console.error("Transfer fee:", aliceBalance - (newAliceBalance + TRANSFER_AMOUNT_WITH_FEE)); + console.error(""); + + const bobJWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJlbWFpbCI6ImhlbGl1Y2h1YW5AZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJZSlIybkNLYV9kcUlLZjRlOGRJcmt3Iiwibm9uY2UiOiIxMDE3MTg3NDI5NjYzNzY0MDIyMzkyNTM5Nzc4NjU1MzQwMzE0MjA3OTM5MTI0ODAxNDIwOTI2NTYzMzk3NTMzNjg2MzQ4NDk3MDEzMSIsImlhdCI6MTcwOTkzMzgwMiwiZXhwIjoxNzA5OTM3NDAyfQ.iqVu6Uae_lUS7B-nJ_eVIisfgHqHFikb0cwxROuudnSwMYND5OiuG0Zlslx-ZgqEV0Dy28aRJT1zmt-xvgtqjJjiPikgf_1sncgs1M7LweUVDKw88DSifuM9UV5JkuHBFmDgiEAbAlLGdlpAJqgbNNG02yN-cxqLaluXSB13yDUzbBz3b_eHivZiHjp9f2E2x2-vw9MY6x6G6bpc1xBPjjR0Nm1GsPpaz8hyhLj_lUX-dRKwbq2xTrOciucRE0rVEqby1smVfS83AQ9P8wW1nhuo3okuFMM9qut1NsFwRQ0EiS8H4kRd8O5Rc-J2CtNrLAC-gmUfzBDzIjGeuj4VUg" + +// const bobJWT = await getUserInput(); + + const bobTempZkIDAccount = await aptos.deriveKeylessAccount({ + jwt: bobJWT, + uidKey, + ephemeralKeyPair: aliceEphem, + pepper + }); + + const bobZkID = await aptos.deriveKeylessAccount({ + jwt: bobJWT, + uidKey, + ephemeralKeyPair: aliceEphem, + }); + + const escrowAccount = new MultiKeyAccount({ multiKey, signers: [bobTempZkIDAccount] }) + + // Fund the accounts + console.log("\n=== Funding Bob's account ===\n"); + await aptos.faucet.fundAccount({ + accountAddress: bobZkID.accountAddress, + amount: 1, + options: { waitForIndexer: false }, + }); + + console.log("\n=== Balances ===\n"); + await balance(aptos, "Alice", alice.accountAddress); + const esc = await balance(aptos, "escrow", escrowAccount.accountAddress); + await balance(aptos, "Bob", bobZkID.accountAddress); + + const transferToBobTxn = await aptos.transaction.build.simple({ + sender: mkAddr, + data: { + function: "0x1::coin::transfer", + typeArguments: [APTOS_COIN], + functionArguments: [bobZkID.accountAddress, TRANSFER_AMOUNT], + }, + }); + + console.log("\n=== Transferring ===\n"); + + const response = await aptos.signAndSubmitTransaction({ signer: escrowAccount, transaction:transferToBobTxn }); + console.log("Transaction hash: ", response.hash) + await aptos.waitForTransaction({ + transactionHash: response.hash, + }); + + console.log("\n=== Balances after transfer ===\n"); + await balance(aptos, "Alice", alice.accountAddress); + const esc2 = await balance(aptos, "escrow", mkAddr); + await balance(aptos, "Bob", bobZkID.accountAddress); + + console.error("Amount transferred:", TRANSFER_AMOUNT); + console.error("Transfer fee:", esc - (esc2 + TRANSFER_AMOUNT)); + + rl.close(); +}; + +example(); diff --git a/examples/typescript/package.json b/examples/typescript/package.json index 465fe076b..1e329844c 100644 --- a/examples/typescript/package.json +++ b/examples/typescript/package.json @@ -15,7 +15,8 @@ "external_signing": "ts-node external_signing.ts", "your_coin": "ts-node your_coin.ts", "your_fungible_asset": "ts-node your_fungible_asset.ts", - "zkid3": "ts-node keyless.ts", + "keyless": "ts-node keyless.ts", + "keyless_escrow": "ts-node keyless_escrow.ts", "test": "run-s simple_transfer multi_agent_transfer simple_sponsored_transaction transfer_coin custom_client publish_package_from_filepath external_signing sign_struct" }, "keywords": [], diff --git a/package.json b/package.json index fe0a16b13..328d448b9 100644 --- a/package.json +++ b/package.json @@ -46,13 +46,17 @@ }, "dependencies": { "@aptos-labs/aptos-client": "^0.1.0", - "@noble/curves": "^1.2.0", + "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", "@scure/bip32": "^1.3.3", "@scure/bip39": "^1.2.1", + "base-64": "^1.0.0", + "eventemitter3": "^5.0.1", "form-data": "^4.0.0", - "tweetnacl": "^1.0.3", - "eventemitter3": "^5.0.1" + "jose": "^5.1.3", + "jwt-decode": "^4.0.0", + "poseidon-lite": "^0.2.0", + "tweetnacl": "^1.0.3" }, "devDependencies": { "@aptos-labs/aptos-cli": "^0.1.2", @@ -62,6 +66,7 @@ "@graphql-codegen/typescript": "^4.0.1", "@graphql-codegen/typescript-graphql-request": "^6.0.1", "@graphql-codegen/typescript-operations": "^4.0.1", + "@types/base-64": "^1.0.2", "@types/jest": "^29.5.11", "@types/node": "^20.10.4", "@typescript-eslint/eslint-plugin": "^6.14.0", @@ -84,5 +89,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.9.1" + "version": "1.9.1-zeta.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6d383949..07b3c8cb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: ^0.1.0 version: 0.1.0 '@noble/curves': - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.3.0 + version: 1.3.0 '@noble/hashes': specifier: ^1.3.3 version: 1.3.3 @@ -20,12 +20,24 @@ dependencies: '@scure/bip39': specifier: ^1.2.1 version: 1.2.1 + base-64: + specifier: ^1.0.0 + version: 1.0.0 eventemitter3: specifier: ^5.0.1 version: 5.0.1 form-data: specifier: ^4.0.0 version: 4.0.0 + jose: + specifier: ^5.1.3 + version: 5.2.3 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 + poseidon-lite: + specifier: ^0.2.0 + version: 0.2.0 tweetnacl: specifier: ^1.0.3 version: 1.0.3 @@ -52,6 +64,9 @@ devDependencies: '@graphql-codegen/typescript-operations': specifier: ^4.0.1 version: 4.0.1(graphql@16.8.1) + '@types/base-64': + specifier: ^1.0.2 + version: 1.0.2 '@types/jest': specifier: ^29.5.11 version: 29.5.11 @@ -1749,7 +1764,7 @@ packages: graphql-request: 6.1.0(graphql@16.8.1) http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 - jose: 5.1.0 + jose: 5.2.3 js-yaml: 4.1.0 json-stable-stringify: 1.0.2 lodash: 4.17.21 @@ -2190,23 +2205,12 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - dependencies: - '@noble/hashes': 1.3.2 - dev: false - /@noble/curves@1.3.0: resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} dependencies: '@noble/hashes': 1.3.3 dev: false - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} - dev: false - /@noble/hashes@1.3.3: resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} engines: {node: '>= 16'} @@ -2463,6 +2467,10 @@ packages: '@babel/types': 7.23.0 dev: true + /@types/base-64@1.0.2: + resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} + dev: true + /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: @@ -3222,6 +3230,10 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true @@ -5544,9 +5556,8 @@ packages: hasBin: true dev: true - /jose@5.1.0: - resolution: {integrity: sha512-H+RVqxA6apaJ0rcQYupKYhos7uosAiF42gUcWZiwhICWMphDULFj/CRr1R0tV/JCv9DEeJaSyYYpc9luHHNT4g==} - dev: true + /jose@5.2.3: + resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} @@ -5629,6 +5640,11 @@ packages: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} dev: true + /jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + dev: false + /keyv@4.5.3: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: @@ -6217,6 +6233,10 @@ packages: find-up: 4.1.0 dev: true + /poseidon-lite@0.2.0: + resolution: {integrity: sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==} + dev: false + /postcss-load-config@4.0.1(ts-node@10.9.2): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 7bb926d3e..5735126da 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { EphemeralAccount, KeylessAccount } from "../core"; +import { EphemeralKeyPair, KeylessAccount } from "../core"; import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; @@ -18,7 +18,7 @@ export class Keyless { * @param args.jwt jwt token * @returns The pepper */ - async getPepper(args: { jwt: string, ephemeralAccount: EphemeralAccount; }): Promise { + async getPepper(args: { jwt: string, ephemeralKeyPair: EphemeralKeyPair; }): Promise { return getPepper({ aptosConfig: this.config, ...args }); } @@ -26,14 +26,14 @@ export class Keyless { * TODO * * @param args.jwt jwt token - * @param args.ephemeralAccount + * @param args.ephemeralKeyPair * @param args.uidKey * @param args.pepper * @returns */ async deriveKeylessAccount(args: { jwt: string; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; pepper?: HexInput; extraFieldKey?: string diff --git a/src/core/account/EphemeralAccount.ts b/src/core/account/EphemeralKeyPair.ts similarity index 92% rename from src/core/account/EphemeralAccount.ts rename to src/core/account/EphemeralKeyPair.ts index c54e40a4a..f69edf3df 100644 --- a/src/core/account/EphemeralAccount.ts +++ b/src/core/account/EphemeralKeyPair.ts @@ -9,7 +9,7 @@ import { Hex } from "../hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../crypto/poseidon"; import { GenerateAccount, HexInput, SigningSchemeInput } from "../../types"; -export class EphemeralAccount { +export class EphemeralKeyPair { readonly blinder: Uint8Array; readonly expiryTimestamp: bigint; @@ -31,7 +31,7 @@ export class EphemeralAccount { this.nonce = this.generateNonce(); } - static generate(args?: GenerateAccount): EphemeralAccount { + static generate(args?: GenerateAccount): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { @@ -42,7 +42,7 @@ export class EphemeralAccount { const expiryTimestamp = BigInt(123); // TODO - return new EphemeralAccount({ privateKey, expiryTimestamp }); + return new EphemeralKeyPair({ privateKey, expiryTimestamp }); } generateNonce(): string { diff --git a/src/core/account/KeylessAccount.ts b/src/core/account/KeylessAccount.ts index 60230e92b..d661bf748 100644 --- a/src/core/account/KeylessAccount.ts +++ b/src/core/account/KeylessAccount.ts @@ -1,19 +1,47 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 +import { JwtPayload, jwtDecode } from "jwt-decode"; +import { decode } from "base-64"; import { HexInput, SigningScheme } from "../../types"; import { AccountAddress } from "../accountAddress"; -import { AccountPublicKey, KeylessPublicKey, KeylessSignature, OpenIdSignature, OpenIdSignatureOrZkProof, Signature, SignedGroth16Signature, computeAddressSeed } from "../crypto"; +import { AuthenticationKey } from "../authenticationKey"; +import { + AnyPublicKey, + AnySignature, + KeylessPublicKey, + KeylessSignature, + OpenIdSignature, + OpenIdSignatureOrZkProof, + Signature, + SignedGroth16Signature, + computeAddressSeed, +} from "../crypto"; + import { Account } from "./Account"; -import { EphemeralAccount } from "./EphemeralAccount"; +import { EphemeralKeyPair } from "./EphemeralKeyPair"; +import { Hex } from "../hex"; +import { AccountAuthenticatorSingleKey } from "../../transactions/authenticator/account"; + +function base64UrlDecode(base64Url: string): string { + // Replace base64url-specific characters + const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); + + // Pad the string with '=' characters if needed + const paddedBase64 = base64 + "==".substring(0, (3 - base64.length % 3) % 3); + // Decode the base64 string using the base-64 library + const decodedString = decode(paddedBase64); + + return decodedString; +} export class KeylessAccount implements Account { static readonly PEPPER_LENGTH: number = 31; - publicKey: AccountPublicKey; + publicKey: KeylessPublicKey; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; uidKey: string; @@ -33,7 +61,7 @@ export class KeylessAccount implements Account { constructor(args: { address?: AccountAddress; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; iss: string; uidKey: string; uidVal: string; @@ -42,8 +70,8 @@ export class KeylessAccount implements Account { proof: SignedGroth16Signature; jwt: string; }) { - const { address, ephemeralAccount, iss, uidKey, uidVal, aud, pepper, proof, jwt } = args; - this.ephemeralAccount = ephemeralAccount; + const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proof, jwt } = args; + this.ephemeralKeyPair = ephemeralKeyPair; const addressSeed = computeAddressSeed(args); this.publicKey = new KeylessPublicKey(iss, addressSeed); const authKey = AuthenticationKey.fromPublicKey({ publicKey: new AnyPublicKey(this.publicKey) }); @@ -53,7 +81,7 @@ export class KeylessAccount implements Account { this.uidVal = uidVal; this.aud = aud; this.proof = proof; - this.jwt = jwt + this.jwt = jwt; this.signingScheme = SigningScheme.SingleKey; const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); @@ -63,34 +91,40 @@ export class KeylessAccount implements Account { this.pepper = pepperBytes; } + signWithAuthenticator(message: HexInput): AccountAuthenticatorSingleKey { + const signature = new AnySignature(this.sign(message)); + const publicKey = new AnyPublicKey(this.publicKey); + return new AccountAuthenticatorSingleKey(publicKey, signature); + } + sign(data: HexInput): Signature { const jwtHeader = this.jwt.split(".")[0]; - const { expiryTimestamp } = this.ephemeralAccount; - const ephemeralPublicKey = this.ephemeralAccount.publicKey; - const ephemeralSignature = this.ephemeralAccount.sign(data); + const { expiryTimestamp } = this.ephemeralKeyPair; + const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + const ephemeralSignature = this.ephemeralKeyPair.sign(data); const oidbSig = new KeylessSignature({ - jwtHeader, + jwtHeader: base64UrlDecode(jwtHeader), openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), expiryTimestamp, ephemeralPublicKey, ephemeralSignature, }); - return oidbSig + return oidbSig; } signWithZkProof(data: HexInput): Signature { const jwtHeader = this.jwt.split(".")[0]; - const { expiryTimestamp } = this.ephemeralAccount; - const ephemeralPublicKey = this.ephemeralAccount.publicKey; - const ephemeralSignature = this.ephemeralAccount.sign(data); + const { expiryTimestamp } = this.ephemeralKeyPair; + const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + const ephemeralSignature = this.ephemeralKeyPair.sign(data); const oidbSig = new KeylessSignature({ - jwtHeader, + jwtHeader: base64UrlDecode(jwtHeader), openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), expiryTimestamp, ephemeralPublicKey, ephemeralSignature, }); - return oidbSig + return oidbSig; } signWithOpenIdSignature(data: HexInput): Signature { @@ -99,13 +133,13 @@ export class KeylessAccount implements Account { jwtSignature, jwtPayloadJson: jwtPayload, uidKey: this.uidKey, - epkBlinder: this.ephemeralAccount.blinder, + epkBlinder: this.ephemeralKeyPair.blinder, pepper: this.pepper, }); - const { expiryTimestamp } = this.ephemeralAccount; - const ephemeralPublicKey = this.ephemeralAccount.publicKey; - const ephemeralSignature = this.ephemeralAccount.sign(data); + const { expiryTimestamp } = this.ephemeralKeyPair; + const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + const ephemeralSignature = this.ephemeralKeyPair.sign(data); const oidbSig = new KeylessSignature({ jwtHeader, openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(openIdSig), @@ -113,22 +147,22 @@ export class KeylessAccount implements Account { ephemeralPublicKey, ephemeralSignature, }); - return oidbSig + return oidbSig; } // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this verifySignature(args: { message: HexInput; signature: Signature }): boolean { - return true + return true; } static fromJWTAndProof(args: { - proof: SignedGroth16Signature + proof: SignedGroth16Signature; jwt: string; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; uidKey?: string; }): KeylessAccount { - const { proof, jwt, ephemeralAccount, pepper } = args; + const { proof, jwt, ephemeralKeyPair, pepper } = args; const uidKey = args.uidKey ?? "sub"; const jwtPayload = jwtDecode(jwt); @@ -140,13 +174,13 @@ export class KeylessAccount implements Account { const uidVal = jwtPayload[uidKey]; return new KeylessAccount({ proof, - ephemeralAccount, + ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, - jwt + jwt, }); } } diff --git a/src/core/account/MultiKeyAccount.ts b/src/core/account/MultiKeyAccount.ts new file mode 100644 index 000000000..bd20ef319 --- /dev/null +++ b/src/core/account/MultiKeyAccount.ts @@ -0,0 +1,103 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { Account } from "./Account"; +import { MultiKey, MultiKeySignature, PublicKey, Signature } from "../crypto"; +import { AccountAddress } from "../accountAddress"; +import { HexInput, SigningScheme } from "../../types"; +import { AccountAuthenticatorMultiKey } from "../../transactions"; + + +export class MultiKeyAccount implements Account { + /** + * Public key associated with the account + */ + readonly publicKey: MultiKey; + + /** + * Account address associated with the account + */ + readonly accountAddress: AccountAddress; + + /** + * Signing scheme used to sign transactions + */ + readonly signingScheme: SigningScheme; + + signers: Account[]; + + signaturesBitmap: Uint8Array; + + /** + * constructor for Account + * + * Need to update this to use the new crypto library if new schemes are added. + * + * @param args.privateKey PrivateKey - private key of the account + * @param args.address AccountAddress - address of the account + * @param args.legacy optional. If set to false, the keypair authentication keys will be derived with a unified scheme. + * Defaults to deriving an authentication key with the legacy scheme. + * + * This method is private because it should only be called by the factory static methods. + * @returns Account + */ + constructor(args: { multiKey: MultiKey; signers: Account[] }) { + const { multiKey, signers } = args; + + this.publicKey = multiKey; + this.signers = signers + this.signingScheme = SigningScheme.MultiKey; + + this.accountAddress = this.publicKey.authKey().derivedAddress(); + + const bits : number[] = []; + for (const signer of signers) { + bits.push(this.publicKey.getIndex(signer.publicKey)); + } + this.signaturesBitmap = this.publicKey.createBitmap({bits}); + } + + static fromPublicKeysAndSigners( + args: { publicKeys: PublicKey[]; signaturesRequired: number; signers: Account[] } + ): MultiKeyAccount { + const { publicKeys, signaturesRequired, signers } = args; + const multiKey = new MultiKey({publicKeys, signaturesRequired}) + return new MultiKeyAccount({multiKey, signers}) + } + + static isMultiKeySigner(account: Account): account is MultiKeyAccount { + return account instanceof MultiKeyAccount; + } + + signWithAuthenticator(message: HexInput): AccountAuthenticatorMultiKey { + return new AccountAuthenticatorMultiKey(this.publicKey, this.sign(message)); + } + + /** + * Sign the given message with the private key. + * + * TODO: Add sign transaction or specific types + * + * @param data in HexInput format + * @returns Signature + */ + sign(data: HexInput): MultiKeySignature { + const signatures = []; + for (const signer of this.signers) { + signatures.push(signer.sign(data)); + } + return new MultiKeySignature({signatures, bitmap: this.signaturesBitmap}); + } + + /** + * Verify the given message and signature with the public key. + * + * @param args.message raw message data in HexInput format + * @param args.signature signed message Signature + * @returns + */ + // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars + verifySignature(args: { message: HexInput; signature: Signature }): boolean { + return true; + } +} diff --git a/src/core/account/index.ts b/src/core/account/index.ts index fbf8265ae..1c0f72561 100644 --- a/src/core/account/index.ts +++ b/src/core/account/index.ts @@ -2,4 +2,5 @@ export * from "./Ed25519Account"; export * from "./Account"; export * from "./SingleKeyAccount"; export * from "./KeylessAccount"; -export * from "./EphemeralAccount"; +export * from "./EphemeralKeyPair"; +export * from "./MultiKeyAccount"; diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 4d11fc5ef..76f635d1b 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -6,7 +6,7 @@ import { AccountPublicKey, PublicKey } from "./publicKey"; import { Signature } from "./signature"; import { Deserializer, Serializable, Serializer } from "../../bcs"; import { Hex } from "../hex"; -import { HexInput, OpenIdSignatureOrZkProofVariant, SigningScheme } from "../../types"; +import { HexInput, EphemeralCertificate, SigningScheme } from "../../types"; import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; @@ -160,10 +160,10 @@ export class OpenIdSignatureOrZkProof extends Signature { serialize(serializer: Serializer): void { if (this.signature instanceof OpenIdSignature) { - serializer.serializeU32AsUleb128(OpenIdSignatureOrZkProofVariant.OpenIdSignature); + serializer.serializeU32AsUleb128(EphemeralCertificate.OpenIdSignature); this.signature.serialize(serializer); } else if (this.signature instanceof SignedGroth16Signature) { - serializer.serializeU32AsUleb128(OpenIdSignatureOrZkProofVariant.ZkProof); + serializer.serializeU32AsUleb128(EphemeralCertificate.ZkProof); this.signature.serialize(serializer); } else { throw new Error("Not a valid OIDB signature"); @@ -173,12 +173,12 @@ export class OpenIdSignatureOrZkProof extends Signature { static deserialize(deserializer: Deserializer): OpenIdSignatureOrZkProof { const index = deserializer.deserializeUleb128AsU32(); switch (index) { - // case OpenIdSignatureOrZkProofVariant.ZkProof: - // return new AnySignature(Ed25519Signature.load(deserializer)); - case OpenIdSignatureOrZkProofVariant.OpenIdSignature: + case EphemeralCertificate.ZkProof: + return new OpenIdSignatureOrZkProof(SignedGroth16Signature.load(deserializer)); + case EphemeralCertificate.OpenIdSignature: return new OpenIdSignatureOrZkProof(OpenIdSignature.load(deserializer)); default: - throw new Error(`Unknown variant index for OpenIdSignatureOrZkProofVariant: ${index}`); + throw new Error(`Unknown variant index for EphemeralCertificate: ${index}`); } } } diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index c35a94157..68a3f4b68 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -139,6 +139,18 @@ export class MultiKey extends AccountPublicKey { return bitmap; } + + getIndex(publicKey: PublicKey): number { + + const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey) + const index = this.publicKeys.findIndex((pk) => pk.toString() === anyPublicKey.toString()); + + if (index !== -1) { + return index; + } + throw new Error("Public key not found in MultiKey"); + + } } export class MultiKeySignature extends Signature { diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 1735f7017..56ada5e1d 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -13,58 +13,51 @@ import { bls12_381 as bls } from "@noble/curves/bls12-381"; import { ProjPointType } from "@noble/curves/abstract/weierstrass"; import { AptosConfig } from "../api/aptosConfig"; import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; -import { - EPK_LIFESPAN, - EphemeralAccount, - Groth16Zkp, - Hex, - KeylessAccount, - SignedGroth16Signature, -} from "../core"; +import { EPK_LIFESPAN, EphemeralKeyPair, Groth16Zkp, KeylessAccount, Hex, SignedGroth16Signature } from "../core"; import { generateSigningMessage } from "../transactions"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; -function getPepperInput(args: {jwt: string, uidKey?: string}): ProjPointType { - const {jwt, uidKey } = args; +function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType { + const { jwt, uidKey } = args; const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); const serializer = new Serializer(); serializer.serializeStr(jwtPayload.iss); serializer.serializeStr(jwtPayload.aud); serializer.serializeStr(jwtPayload[uidKey || "sub"]); serializer.serializeStr(uidKey || "sub"); - const serial = serializer.toUint8Array() + const serial = serializer.toUint8Array(); const mess = bls.G1.hashToCurve(serial, { DST: "APTOS_OIDB_VUF_SCHEME0_DST" }).toAffine(); const pp = bls.G1.ProjectivePoint.fromAffine(mess); - return pp + return pp; } export async function getPepper(args: { aptosConfig: AptosConfig; jwt: string; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; verify?: boolean; }): Promise { - const { aptosConfig, jwt, ephemeralAccount, uidKey, verify } = args; + const { aptosConfig, jwt, ephemeralKeyPair, uidKey, verify } = args; const body = { - jwt_b64: jwt, - epk_hex_string: ephemeralAccount.publicKey.bcsToHex().toStringWithoutPrefix(), - epk_expiry_time_secs: Number(ephemeralAccount.expiryTimestamp), - epk_blinder_hex_string: Hex.fromHexInput(ephemeralAccount.blinder).toStringWithoutPrefix(), - uid_key: uidKey, + jwt_b64: jwt, + epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), + exp_date_secs: Number(ephemeralKeyPair.expiryTimestamp), + epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), + uid_key: uidKey, }; const jsonString = JSON.stringify(body); console.log(jsonString); - const { data } = await postAptosPepperService({ + const { data } = await postAptosPepperService({ aptosConfig, - path: "", + path: "fetch", body, originMethod: "getPepper", }); console.log(data); - const pepperBase = Hex.fromHexInput(data.pepper_key_hex_string).toUint8Array(); + const pepperBase = Hex.fromHexInput(data.signature).toUint8Array(); if (verify) { const { data: pubKeyResponse } = await getAptosPepperService({ @@ -83,7 +76,7 @@ export async function getPepper(args: { hash.update(pepperBase); const hashDigest = hash.digest(); - const pepper = Hex.fromHexInput(hashDigest).toUint8Array().slice(0, 31) + const pepper = Hex.fromHexInput(hashDigest).toUint8Array().slice(0, 31); return pepper; } @@ -91,19 +84,19 @@ export async function getPepper(args: { export async function getProof(args: { aptosConfig: AptosConfig; jwt: string; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; uidKey?: string; extraFieldKey?: string; }): Promise { - const { aptosConfig, jwt, ephemeralAccount, pepper, uidKey, extraFieldKey } = args; + const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey, extraFieldKey } = args; const extraFieldKey2 = extraFieldKey || "iss"; const json = { jwt_b64: jwt, - epk_hex_string: ephemeralAccount.publicKey.bcsToHex().toStringWithoutPrefix(), - epk_blinder_hex_string: Hex.fromHexInput(ephemeralAccount.blinder).toStringWithoutPrefix(), - epk_expiry_time_secs: Number(ephemeralAccount.expiryTimestamp), - epk_expiry_horizon_secs: EPK_LIFESPAN, + epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), + epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), + exp_date_secs: Number(ephemeralKeyPair.expiryTimestamp), + exp_horizon_secs: EPK_LIFESPAN, pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), extra_field: extraFieldKey2, uid_key: uidKey || "sub", @@ -120,7 +113,7 @@ export async function getProof(args: { const { data } = await postAptosProvingService< any, - { data: { proof: { pi_a: string; pi_b: string; pi_c: string }; public_inputs_hash: string } } + { proof: { a: string; b: string; c: string }; public_inputs_hash: string } >({ aptosConfig, path: "prove", @@ -129,15 +122,15 @@ export async function getProof(args: { }); console.log(data); - const proofPoints = data.data.proof; + const proofPoints = data.proof; const proof = new Groth16Zkp({ - a: proofPoints.pi_a, - b: proofPoints.pi_b, - c: proofPoints.pi_c, + a: proofPoints.a, + b: proofPoints.b, + c: proofPoints.c, }); const signMess = generateSigningMessage(proof.bcsToBytes(), "Groth16Zkp"); - const nonMalleabilitySignature = ephemeralAccount.sign(signMess); + const nonMalleabilitySignature = ephemeralKeyPair.sign(signMess); const signedProof = new SignedGroth16Signature({ proof, nonMalleabilitySignature, extraField }); return signedProof; } @@ -145,7 +138,7 @@ export async function getProof(args: { export async function deriveKeylessAccount(args: { aptosConfig: AptosConfig; jwt: string; - ephemeralAccount: EphemeralAccount; + ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; pepper?: HexInput; extraFieldKey?: string; diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 007e40f94..ccc5ad2f6 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -21,6 +21,7 @@ import { sign, generateSigningMessage, generateTransactionPayloadWithABI, + generateSigningMessageForTransaction, } from "../transactions/transactionBuilder/transactionBuilder"; import { InputGenerateTransactionData, @@ -190,7 +191,7 @@ function isMultiAgentTransactionInput( */ export function getSigningMessage(args: { transaction: AnyRawTransaction }): Uint8Array { const { transaction } = args; - return generateSigningMessage(transaction); + return generateSigningMessageForTransaction(transaction); } /** diff --git a/src/transactions/authenticator/account.ts b/src/transactions/authenticator/account.ts index 103fdfc2b..e16f9e4ad 100644 --- a/src/transactions/authenticator/account.ts +++ b/src/transactions/authenticator/account.ts @@ -7,7 +7,7 @@ import { Serializer, Deserializer, Serializable } from "../../bcs"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { MultiEd25519PublicKey, MultiEd25519Signature } from "../../core/crypto/multiEd25519"; -import { MultiKey } from "../../core/crypto/multiKey"; +import { MultiKey, MultiKeySignature } from "../../core/crypto/multiKey"; import { AccountAuthenticatorVariant } from "../../types"; export abstract class AccountAuthenticator extends Serializable { @@ -149,28 +149,24 @@ export class AccountAuthenticatorSingleKey extends AccountAuthenticator { export class AccountAuthenticatorMultiKey extends AccountAuthenticator { public readonly public_keys: MultiKey; - public readonly signatures: Array; + public readonly signatures: MultiKeySignature; - public readonly signatures_bitmap: Uint8Array; - constructor(public_keys: MultiKey, signatures: Array, signatures_bitmap: Uint8Array) { + constructor(public_keys: MultiKey, signatures: MultiKeySignature) { super(); this.public_keys = public_keys; this.signatures = signatures; - this.signatures_bitmap = signatures_bitmap; } serialize(serializer: Serializer): void { serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.MultiKey); this.public_keys.serialize(serializer); - serializer.serializeVector(this.signatures); - serializer.serializeBytes(this.signatures_bitmap); + this.signatures.serialize(serializer); } static load(deserializer: Deserializer): AccountAuthenticatorMultiKey { const public_keys = MultiKey.deserialize(deserializer); - const signatures = deserializer.deserializeVector(AnySignature); - const signatures_bitmap = deserializer.deserializeBytes(); - return new AccountAuthenticatorMultiKey(public_keys, signatures, signatures_bitmap); + const signatures = MultiKeySignature.deserialize(deserializer); + return new AccountAuthenticatorMultiKey(public_keys, signatures); } } diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 5cec0b60f..82bc7d4e8 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -74,6 +74,7 @@ import { convertArgument, fetchEntryFunctionAbi, standardizeTypeTags } from "./r import { memoizeAsync } from "../../utils/memoize"; import { AnyNumber } from "../../types"; import { getFunctionParts, isScriptDataInput } from "./helpers"; +import { Serializable } from "../../bcs"; /** * We are defining function signatures, each with its specific input and output. @@ -418,7 +419,7 @@ export function sign(args: { signer: Account; transaction: AnyRawTransaction }): const { signer, transaction } = args; // get the signing message - const message = generateSigningMessage(transaction); + const message = generateSigningMessageForTransaction(transaction); // account.signMessage return signer.signWithAuthenticator(message); @@ -546,23 +547,14 @@ export function generateMultiSignersSignedTransaction( ); } -export function generateSigningMessage(transaction: AnyRawTransaction): Uint8Array { - const rawTxn = deriveTransactionType(transaction); +export function generateSigningMessage(bytes: Uint8Array, domainSeparator: string): Uint8Array { const hash = sha3Hash.create(); - if (rawTxn instanceof RawTransaction) { - hash.update(RAW_TRANSACTION_SALT); - } else if (rawTxn instanceof MultiAgentRawTransaction) { - hash.update(RAW_TRANSACTION_WITH_DATA_SALT); - } else if (rawTxn instanceof FeePayerRawTransaction) { - hash.update(RAW_TRANSACTION_WITH_DATA_SALT); - } else { - throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); - } - + hash.update(`APTOS::${domainSeparator}`); + const prefix = hash.digest(); - const body = rawTxn.bcsToBytes(); + const body = bytes; const mergedArray = new Uint8Array(prefix.length + body.length); mergedArray.set(prefix); @@ -570,3 +562,18 @@ export function generateSigningMessage(transaction: AnyRawTransaction): Uint8Arr return mergedArray; } + +export function generateSigningMessageForSerializable(obj: Serializable): Uint8Array { + return generateSigningMessage(obj.bcsToBytes(), obj.constructor.name); +} + +export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { + const rawTxn = deriveTransactionType(transaction); + if (rawTxn instanceof RawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_SALT); + } if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_WITH_DATA_SALT); + } + throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); +} + diff --git a/src/types/index.ts b/src/types/index.ts index 4377cc52f..ab4db05bf 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -125,7 +125,7 @@ export enum EphemeralSignatureVariant { Ed25519 = 0, } -export enum OpenIdSignatureOrZkProofVariant { +export enum EphemeralCertificate { ZkProof = 0, OpenIdSignature = 1, } diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index d6bc773a7..ff1de1205 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -26,17 +26,17 @@ export const NetworkToFaucetAPI: Record = { }; export const NetworkToPepperAPI: Record = { - mainnet: "https://aptos-zkid-pepper-service-6vgsvc5oma-uc.a.run.app", - testnet: "https://aptos-zkid-pepper-service-6vgsvc5oma-uc.a.run.app", - devnet: "https://aptos-zkid-pepper-service-6vgsvc5oma-uc.a.run.app", - local: "http://127.0.0.1:8000", + mainnet: "https://pepper.keyless.mainnet.aptoslabs.com/v0", + testnet: "https://pepper.keyless.testnet.aptoslabs.com/v0", + devnet: "https://pepper.keyless.devnet.aptoslabs.com/v0", + local: "https://pepper.keyless.devnet.aptoslabs.com/v0", }; export const NetworkToProverAPI: Record = { - mainnet: "TODO", - testnet: "https://prover-service-image-c6wgp6n6ia-uc.a.run.app", - devnet: "https://prover-service-image-c6wgp6n6ia-uc.a.run.app", - local: "http://35.236.15.8:8080", + mainnet: "https://prover.keyless.mainnet.aptoslabs.com/v0", + testnet: "https://prover.keyless.testnet.aptoslabs.com/v0", + devnet: "https://prover.keyless.devnet.aptoslabs.com/v0", + local: "https://prover.keyless.devnet.aptoslabs.com/v0", }; export enum Network { diff --git a/src/utils/const.ts b/src/utils/const.ts index ff1879324..3c9057517 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -45,8 +45,8 @@ export const DEFAULT_TXN_TIMEOUT_SEC = 20; */ export const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; -export const RAW_TRANSACTION_SALT = "APTOS::RawTransaction"; -export const RAW_TRANSACTION_WITH_DATA_SALT = "APTOS::RawTransactionWithData"; +export const RAW_TRANSACTION_SALT = "RawTransaction"; +export const RAW_TRANSACTION_WITH_DATA_SALT = "RawTransactionWithData"; /** * The list of supported Processor types for our indexer api. diff --git a/src/version.ts b/src/version.ts index d4f1e009b..49d2e9b99 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.9.1"; +export const VERSION = "1.9.1.zeta.0"; From 418cc08e9e5b82a03832466ff6e8b8f380755960 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 8 Mar 2024 17:06:51 -0500 Subject: [PATCH 004/136] rename expirytimestamp --- examples/typescript/keyless.ts | 4 ++-- examples/typescript/keyless_escrow.ts | 4 ++-- src/core/account/EphemeralKeyPair.ts | 16 +++++++-------- src/core/account/KeylessAccount.ts | 29 ++++++--------------------- src/core/crypto/keyless.ts | 18 ++++++++--------- src/internal/keyless.ts | 4 ++-- 6 files changed, 28 insertions(+), 47 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 0ff9a99f8..83aebcf5c 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -55,12 +55,12 @@ const example = async () => { const aptos = new Aptos(config); const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryTimestamp = BigInt(1718911224); + const expiryDateSecs = BigInt(1718911224); const blinder = new Uint8Array(31); for (let i = 0; i < blinder.length; i += 1) { blinder[i] = 0; } - const aliceEphem = new EphemeralKeyPair({ privateKey, expiryTimestamp, blinder }); + const aliceEphem = new EphemeralKeyPair({ privateKey, expiryDateSecs, blinder }); console.log(); console.log("=== Get token via the below link ==="); diff --git a/examples/typescript/keyless_escrow.ts b/examples/typescript/keyless_escrow.ts index b84025225..77c38c77d 100644 --- a/examples/typescript/keyless_escrow.ts +++ b/examples/typescript/keyless_escrow.ts @@ -61,12 +61,12 @@ const example = async () => { // Create two accounts const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryTimestamp = BigInt(1718911224); + const expiryDateSecs = BigInt(1718911224); const blinder = new Uint8Array(31); for (let i = 0; i < blinder.length; i += 1) { blinder[i] = 0; } - const aliceEphem = new EphemeralKeyPair({ privateKey, expiryTimestamp, blinder }); + const aliceEphem = new EphemeralKeyPair({ privateKey, blinder }); console.log(); console.log("=== Get token via the below link ==="); diff --git a/src/core/account/EphemeralKeyPair.ts b/src/core/account/EphemeralKeyPair.ts index f69edf3df..f84f8d199 100644 --- a/src/core/account/EphemeralKeyPair.ts +++ b/src/core/account/EphemeralKeyPair.ts @@ -12,7 +12,7 @@ import { GenerateAccount, HexInput, SigningSchemeInput } from "../../types"; export class EphemeralKeyPair { readonly blinder: Uint8Array; - readonly expiryTimestamp: bigint; + readonly expiryDateSecs: bigint; readonly nonce: string; @@ -20,13 +20,13 @@ export class EphemeralKeyPair { readonly publicKey: EphemeralPublicKey; - constructor(args: { privateKey: PrivateKey; expiryTimestamp?: bigint; blinder?: HexInput }) { - const { privateKey, expiryTimestamp, blinder } = args; + constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint; blinder?: HexInput }) { + const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); const currentDate = new Date(); - const currentTimeInSeconds = Math.floor(currentDate.getTime() / 1000) + 10000; - this.expiryTimestamp = expiryTimestamp || BigInt(currentTimeInSeconds); + const currentTimeInSeconds = Math.floor(currentDate.getTime() / 1000) + 100000; + this.expiryDateSecs = expiryDateSecs || BigInt(currentTimeInSeconds); this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); this.nonce = this.generateNonce(); } @@ -40,14 +40,12 @@ export class EphemeralKeyPair { privateKey = Ed25519PrivateKey.generate(); } - const expiryTimestamp = BigInt(123); // TODO - - return new EphemeralKeyPair({ privateKey, expiryTimestamp }); + return new EphemeralKeyPair({ privateKey }); } generateNonce(): string { const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); - fields.push(BigInt(this.expiryTimestamp)) + fields.push(BigInt(this.expiryDateSecs)) fields.push(bytesToBigIntLE(this.blinder)) const nonceHash = poseidonHash(fields); return nonceHash.toString(); diff --git a/src/core/account/KeylessAccount.ts b/src/core/account/KeylessAccount.ts index d661bf748..5406a1580 100644 --- a/src/core/account/KeylessAccount.ts +++ b/src/core/account/KeylessAccount.ts @@ -99,32 +99,16 @@ export class KeylessAccount implements Account { sign(data: HexInput): Signature { const jwtHeader = this.jwt.split(".")[0]; - const { expiryTimestamp } = this.ephemeralKeyPair; + const { expiryDateSecs } = this.ephemeralKeyPair; const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; const ephemeralSignature = this.ephemeralKeyPair.sign(data); - const oidbSig = new KeylessSignature({ + return new KeylessSignature({ jwtHeader: base64UrlDecode(jwtHeader), openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), - expiryTimestamp, + expiryDateSecs, ephemeralPublicKey, ephemeralSignature, }); - return oidbSig; - } - - signWithZkProof(data: HexInput): Signature { - const jwtHeader = this.jwt.split(".")[0]; - const { expiryTimestamp } = this.ephemeralKeyPair; - const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; - const ephemeralSignature = this.ephemeralKeyPair.sign(data); - const oidbSig = new KeylessSignature({ - jwtHeader: base64UrlDecode(jwtHeader), - openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), - expiryTimestamp, - ephemeralPublicKey, - ephemeralSignature, - }); - return oidbSig; } signWithOpenIdSignature(data: HexInput): Signature { @@ -137,17 +121,16 @@ export class KeylessAccount implements Account { pepper: this.pepper, }); - const { expiryTimestamp } = this.ephemeralKeyPair; + const { expiryDateSecs } = this.ephemeralKeyPair; const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; const ephemeralSignature = this.ephemeralKeyPair.sign(data); - const oidbSig = new KeylessSignature({ + return new KeylessSignature({ jwtHeader, openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(openIdSig), - expiryTimestamp, + expiryDateSecs, ephemeralPublicKey, ephemeralSignature, }); - return oidbSig; } // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 76f635d1b..b5e502a60 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -405,7 +405,7 @@ export class KeylessSignature extends Signature { readonly jwtHeader: string; - readonly expiryTimestamp: bigint; + readonly expiryDateSecs: bigint; readonly ephemeralPublicKey: EphemeralPublicKey; @@ -419,15 +419,15 @@ export class KeylessSignature extends Signature { constructor(args: { jwtHeader: string; openIdSignatureOrZkProof: OpenIdSignatureOrZkProof; - expiryTimestamp: bigint; + expiryDateSecs: bigint; ephemeralPublicKey: EphemeralPublicKey; ephemeralSignature: EphemeralSignature; }) { super(); - const { jwtHeader, openIdSignatureOrZkProof, expiryTimestamp, ephemeralPublicKey, ephemeralSignature } = args; + const { jwtHeader, openIdSignatureOrZkProof, expiryDateSecs, ephemeralPublicKey, ephemeralSignature } = args; this.jwtHeader = jwtHeader; this.openIdSignatureOrZkProof = openIdSignatureOrZkProof; - this.expiryTimestamp = expiryTimestamp; + this.expiryDateSecs = expiryDateSecs; this.ephemeralPublicKey = ephemeralPublicKey; this.ephemeralSignature = ephemeralSignature; } @@ -453,20 +453,20 @@ export class KeylessSignature extends Signature { serialize(serializer: Serializer): void { this.openIdSignatureOrZkProof.serialize(serializer); serializer.serializeStr(this.jwtHeader); - serializer.serializeU64(this.expiryTimestamp); + serializer.serializeU64(this.expiryDateSecs); this.ephemeralPublicKey.serialize(serializer); this.ephemeralSignature.serialize(serializer); } static deserialize(deserializer: Deserializer): KeylessSignature { const jwtHeader = deserializer.deserializeStr(); - const expiryTimestamp = deserializer.deserializeU64(); + const expiryDateSecs = deserializer.deserializeU64(); const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); const ephemeralSignature = EphemeralSignature.deserialize(deserializer); return new KeylessSignature({ jwtHeader, - expiryTimestamp, + expiryDateSecs, openIdSignatureOrZkProof, ephemeralPublicKey, ephemeralSignature, @@ -475,13 +475,13 @@ export class KeylessSignature extends Signature { static load(deserializer: Deserializer): KeylessSignature { const jwtHeader = deserializer.deserializeStr(); - const expiryTimestamp = deserializer.deserializeU64(); + const expiryDateSecs = deserializer.deserializeU64(); const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); const ephemeralSignature = EphemeralSignature.deserialize(deserializer); return new KeylessSignature({ jwtHeader, - expiryTimestamp, + expiryDateSecs, openIdSignatureOrZkProof, ephemeralPublicKey, ephemeralSignature, diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 56ada5e1d..6210b59eb 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -44,7 +44,7 @@ export async function getPepper(args: { const body = { jwt_b64: jwt, epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), - exp_date_secs: Number(ephemeralKeyPair.expiryTimestamp), + exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, }; @@ -95,7 +95,7 @@ export async function getProof(args: { jwt_b64: jwt, epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), - exp_date_secs: Number(ephemeralKeyPair.expiryTimestamp), + exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), exp_horizon_secs: EPK_LIFESPAN, pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), extra_field: extraFieldKey2, From bb100a2fa260209b50000d0628b9a710b2caa7eb Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 8 Mar 2024 17:08:22 -0500 Subject: [PATCH 005/136] remove console statements --- src/internal/keyless.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 6210b59eb..8f7576b62 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -48,15 +48,15 @@ export async function getPepper(args: { epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, }; - const jsonString = JSON.stringify(body); - console.log(jsonString); + // const jsonString = JSON.stringify(body); + // console.log(jsonString); const { data } = await postAptosPepperService({ aptosConfig, path: "fetch", body, originMethod: "getPepper", }); - console.log(data); + // console.log(data); const pepperBase = Hex.fromHexInput(data.signature).toUint8Array(); if (verify) { @@ -101,8 +101,8 @@ export async function getProof(args: { extra_field: extraFieldKey2, uid_key: uidKey || "sub", }; - const jsonString = JSON.stringify(json); - console.log(jsonString); + // const jsonString = JSON.stringify(json); + // console.log(jsonString); const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); const extraFieldVal = jwtPayload[extraFieldKey2]; const extraField = `"${extraFieldKey2}":"${extraFieldVal}",`; @@ -120,7 +120,7 @@ export async function getProof(args: { body: json, originMethod: "getProof", }); - console.log(data); + // console.log(data); const proofPoints = data.proof; From f0e01bb3ff6d700962985d9a3a513285d916c5ba Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 11 Mar 2024 16:32:46 -0400 Subject: [PATCH 006/136] refactor accounts --- examples/typescript/keyless.ts | 4 +- examples/typescript/keyless_escrow.ts | 6 +- src/{core => }/account/Account.ts | 15 ++-- src/{core => }/account/Ed25519Account.ts | 20 +++-- src/{core => }/account/EphemeralKeyPair.ts | 8 +- src/{core => }/account/KeylessAccount.ts | 37 ++++++--- src/{core => }/account/MultiKeyAccount.ts | 21 +++-- src/{core => }/account/SingleKeyAccount.ts | 20 +++-- src/{core => }/account/index.ts | 0 src/api/account.ts | 3 +- src/api/ans.ts | 3 +- src/api/digitalAsset.ts | 3 +- src/api/fungibleAsset.ts | 3 +- src/api/keyless.ts | 2 +- src/api/transaction.ts | 3 +- src/api/transactionSubmission/management.ts | 2 +- src/api/transactionSubmission/sign.ts | 2 +- src/client/core.ts | 4 + src/core/crypto/keyless.ts | 26 +++---- src/core/index.ts | 1 - src/index.ts | 1 + src/internal/account.ts | 2 +- src/internal/ans.ts | 3 +- src/internal/digitalAsset.ts | 3 +- src/internal/fungibleAsset.ts | 3 +- src/internal/keyless.ts | 7 +- src/internal/transactionSubmission.ts | 11 +-- .../management/accountSequenceNumber.ts | 2 +- .../management/transactionWorker.ts | 2 +- src/transactions/transactionBuilder/index.ts | 2 + .../transactionBuilder/signingMessage.ts | 75 ++++++++++++++++++ .../transactionBuilder/transactionBuilder.ts | 78 +------------------ 32 files changed, 207 insertions(+), 165 deletions(-) rename src/{core => }/account/Account.ts (94%) rename src/{core => }/account/Ed25519Account.ts (76%) rename src/{core => }/account/EphemeralKeyPair.ts (94%) rename src/{core => }/account/KeylessAccount.ts (77%) rename src/{core => }/account/MultiKeyAccount.ts (82%) rename src/{core => }/account/SingleKeyAccount.ts (83%) rename src/{core => }/account/index.ts (100%) create mode 100644 src/transactions/transactionBuilder/signingMessage.ts diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 83aebcf5c..b77b158ea 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -25,7 +25,7 @@ const ALICE_INITIAL_BALANCE = 100_000_000; const BOB_INITIAL_BALANCE = 100; const TRANSFER_AMOUNT = 10_000; -const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjZmOTc3N2E2ODU5MDc3OThlZjc5NDA2MmMwMGI2NWQ2NmMyNDBiMWIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTE2Mjc3NzI0NjA3NTIzNDIzMTIiLCJhdF9oYXNoIjoid3p4TGw3X2ZOVElNdWQ4bjJocGV2QSIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MDk1OTAyMzksImV4cCI6MTcwOTU5MzgzOX0.JifuCscRP9MFjgTIpKps6di9dW-KE8_b2iyguRLoxV_-Qdkb1vYFuLOBEPj-7ofWCM2RKOJsLXhRXNIIwmugNCDMSMfd8alocr2o2G0wpauEuFpg5GZJ135g6Kcd6Yrb2WtapzVGOad3ABSa3DXbgRkN0u4elSXZhWVCSlIYUllDl8C3zfMPZwtFsZJLu-QJhiLROkRETHTG11tIiwinC0XQBN1BdbAAxW5EH3DB4LVR73dMrC6qsNRN6sDme5-D10HBmbyascLRRb8RP9wc2AAlDHmuJXTpULT2RXp54OGs3QEC0zgv_JTIiw4-QCUnPf0dxGg10iLLD7T_KGSjWg"; +const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; /** * Prints the balance of an account @@ -49,7 +49,7 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client - const config = new AptosConfig({network: Network.DEVNET}); + const config = new AptosConfig({network: Network.LOCAL}); // const config = new AptosConfig(); const aptos = new Aptos(config); diff --git a/examples/typescript/keyless_escrow.ts b/examples/typescript/keyless_escrow.ts index 77c38c77d..524b7e541 100644 --- a/examples/typescript/keyless_escrow.ts +++ b/examples/typescript/keyless_escrow.ts @@ -32,7 +32,7 @@ const ALICE_INITIAL_BALANCE = 100_000_000_000; const TRANSFER_AMOUNT = 100_000_000; const TRANSFER_AMOUNT_WITH_FEE = TRANSFER_AMOUNT + 600; -const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjZmOTc3N2E2ODU5MDc3OThlZjc5NDA2MmMwMGI2NWQ2NmMyNDBiMWIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTE2Mjc3NzI0NjA3NTIzNDIzMTIiLCJhdF9oYXNoIjoid3p4TGw3X2ZOVElNdWQ4bjJocGV2QSIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MDk1OTAyMzksImV4cCI6MTcwOTU5MzgzOX0.JifuCscRP9MFjgTIpKps6di9dW-KE8_b2iyguRLoxV_-Qdkb1vYFuLOBEPj-7ofWCM2RKOJsLXhRXNIIwmugNCDMSMfd8alocr2o2G0wpauEuFpg5GZJ135g6Kcd6Yrb2WtapzVGOad3ABSa3DXbgRkN0u4elSXZhWVCSlIYUllDl8C3zfMPZwtFsZJLu-QJhiLROkRETHTG11tIiwinC0XQBN1BdbAAxW5EH3DB4LVR73dMrC6qsNRN6sDme5-D10HBmbyascLRRb8RP9wc2AAlDHmuJXTpULT2RXp54OGs3QEC0zgv_JTIiw4-QCUnPf0dxGg10iLLD7T_KGSjWg"; +const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; /** * Prints the balance of an account @@ -56,7 +56,7 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client - const config = new AptosConfig({network: Network.DEVNET}); + const config = new AptosConfig({network: Network.LOCAL}); const aptos = new Aptos(config); // Create two accounts @@ -66,7 +66,7 @@ const example = async () => { for (let i = 0; i < blinder.length; i += 1) { blinder[i] = 0; } - const aliceEphem = new EphemeralKeyPair({ privateKey, blinder }); + const aliceEphem = new EphemeralKeyPair({ privateKey, expiryDateSecs, blinder }); console.log(); console.log("=== Get token via the below link ==="); diff --git a/src/core/account/Account.ts b/src/account/Account.ts similarity index 94% rename from src/core/account/Account.ts rename to src/account/Account.ts index 0b3620513..c66c34da0 100644 --- a/src/core/account/Account.ts +++ b/src/account/Account.ts @@ -1,10 +1,11 @@ -import type { AccountAuthenticator } from "../../transactions/authenticator/account"; -import { HexInput, SigningScheme, SigningSchemeInput } from "../../types"; -import type { AccountAddress, AccountAddressInput } from "../accountAddress"; -import { AuthenticationKey } from "../authenticationKey"; -import { AccountPublicKey, Ed25519PrivateKey, PrivateKey, Signature, VerifySignatureArgs } from "../crypto"; +import type { AccountAuthenticator } from "../transactions/authenticator/account"; +import { HexInput, SigningScheme, SigningSchemeInput } from "../types"; +import type { AccountAddress, AccountAddressInput } from "../core/accountAddress"; +import { AuthenticationKey } from "../core/authenticationKey"; +import { AccountPublicKey, Ed25519PrivateKey, PrivateKey, Signature, VerifySignatureArgs } from "../core/crypto"; import { Ed25519Account } from "./Ed25519Account"; import { SingleKeyAccount } from "./SingleKeyAccount"; +import { AnyRawTransaction } from "../transactions/types"; /** * Arguments for creating an `Ed25519Account` from an `Ed25519PrivateKey`. @@ -219,7 +220,7 @@ export abstract class Account { * @param message the signing message, as binary input * @return the AccountAuthenticator containing the signature, together with the account's public key */ - abstract signWithAuthenticator(message: HexInput): AccountAuthenticator; + abstract signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; /** * Sign the given message with the private key. @@ -228,6 +229,8 @@ export abstract class Account { */ abstract sign(message: HexInput): Signature; + abstract signTransaction(transaction: AnyRawTransaction): Signature; + /** * @param args.message raw message data in HexInput format * @param args.signature signed message signature diff --git a/src/core/account/Ed25519Account.ts b/src/account/Ed25519Account.ts similarity index 76% rename from src/core/account/Ed25519Account.ts rename to src/account/Ed25519Account.ts index 5c820c006..ec7bc6c4c 100644 --- a/src/core/account/Ed25519Account.ts +++ b/src/account/Ed25519Account.ts @@ -1,8 +1,10 @@ -import { AccountAuthenticatorEd25519 } from "../../transactions/authenticator/account"; -import { HexInput, SigningScheme } from "../../types"; -import { AccountAddress, AccountAddressInput } from "../accountAddress"; -import { Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature } from "../crypto"; +import { AccountAuthenticatorEd25519 } from "../transactions/authenticator/account"; +import { HexInput, SigningScheme } from "../types"; +import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; +import { Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature } from "../core/crypto"; import type { Account } from "./Account"; +import { AnyRawTransaction } from "../transactions/types"; +import { generateSigningMessageForTransaction } from "../transactions/transactionBuilder/signingMessage"; export interface Ed25519SignerConstructorArgs { privateKey: Ed25519PrivateKey; @@ -75,13 +77,17 @@ export class Ed25519Account implements Account { return this.publicKey.verifySignature(args); } - signWithAuthenticator(message: HexInput) { - const signature = this.privateKey.sign(message); + signWithAuthenticator(transaction: AnyRawTransaction) { + const signature = this.privateKey.sign(generateSigningMessageForTransaction(transaction)); return new AccountAuthenticatorEd25519(this.publicKey, signature); } sign(message: HexInput) { - return this.signWithAuthenticator(message).signature; + return this.privateKey.sign(message); + } + + signTransaction(transaction: AnyRawTransaction) { + return this.sign(generateSigningMessageForTransaction(transaction)) } // endregion diff --git a/src/core/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts similarity index 94% rename from src/core/account/EphemeralKeyPair.ts rename to src/account/EphemeralKeyPair.ts index f84f8d199..55a339493 100644 --- a/src/core/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -4,10 +4,10 @@ import { randomBytes } from "@noble/hashes/utils"; -import { Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../crypto"; -import { Hex } from "../hex"; -import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../crypto/poseidon"; -import { GenerateAccount, HexInput, SigningSchemeInput } from "../../types"; +import { Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../core/crypto"; +import { Hex } from "../core/hex"; +import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; +import { GenerateAccount, HexInput, SigningSchemeInput } from "../types"; export class EphemeralKeyPair { readonly blinder: Uint8Array; diff --git a/src/core/account/KeylessAccount.ts b/src/account/KeylessAccount.ts similarity index 77% rename from src/core/account/KeylessAccount.ts rename to src/account/KeylessAccount.ts index 5406a1580..98aabeccd 100644 --- a/src/core/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -3,9 +3,8 @@ import { JwtPayload, jwtDecode } from "jwt-decode"; import { decode } from "base-64"; -import { HexInput, SigningScheme } from "../../types"; -import { AccountAddress } from "../accountAddress"; -import { AuthenticationKey } from "../authenticationKey"; +import { HexInput, SigningScheme } from "../types"; +import { AccountAddress } from "../core/accountAddress"; import { AnyPublicKey, AnySignature, @@ -16,12 +15,15 @@ import { Signature, SignedGroth16Signature, computeAddressSeed, -} from "../crypto"; +} from "../core/crypto"; import { Account } from "./Account"; import { EphemeralKeyPair } from "./EphemeralKeyPair"; -import { Hex } from "../hex"; -import { AccountAuthenticatorSingleKey } from "../../transactions/authenticator/account"; +import { Hex } from "../core/hex"; +import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; +import { Serializer } from "../bcs"; +import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; +import { AnyRawTransaction } from "../transactions/types"; function base64UrlDecode(base64Url: string): string { // Replace base64url-specific characters @@ -74,9 +76,7 @@ export class KeylessAccount implements Account { this.ephemeralKeyPair = ephemeralKeyPair; const addressSeed = computeAddressSeed(args); this.publicKey = new KeylessPublicKey(iss, addressSeed); - const authKey = AuthenticationKey.fromPublicKey({ publicKey: new AnyPublicKey(this.publicKey) }); - const derivedAddress = authKey.derivedAddress(); - this.accountAddress = address ?? derivedAddress; + this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); this.uidKey = uidKey; this.uidVal = uidVal; this.aud = aud; @@ -91,8 +91,9 @@ export class KeylessAccount implements Account { this.pepper = pepperBytes; } - signWithAuthenticator(message: HexInput): AccountAuthenticatorSingleKey { - const signature = new AnySignature(this.sign(message)); + signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { + const raw = deriveTransactionType(transaction); + const signature = new AnySignature(this.sign(raw.bcsToBytes())); const publicKey = new AnyPublicKey(this.publicKey); return new AccountAuthenticatorSingleKey(publicKey, signature); } @@ -101,7 +102,14 @@ export class KeylessAccount implements Account { const jwtHeader = this.jwt.split(".")[0]; const { expiryDateSecs } = this.ephemeralKeyPair; const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; - const ephemeralSignature = this.ephemeralKeyPair.sign(data); + + const serializer = new Serializer(); + serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()) + serializer.serializeOption(this.proof.proof); + const signMess = generateSigningMessage(serializer.toUint8Array(), "TransactionAndProof"); + + const ephemeralSignature = this.ephemeralKeyPair.sign(signMess); + return new KeylessSignature({ jwtHeader: base64UrlDecode(jwtHeader), openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), @@ -111,6 +119,11 @@ export class KeylessAccount implements Account { }); } + signTransaction(transaction: AnyRawTransaction): Signature { + const raw = deriveTransactionType(transaction); + return this.sign(raw.bcsToBytes()) + } + signWithOpenIdSignature(data: HexInput): Signature { const [jwtHeader, jwtPayload, jwtSignature] = this.jwt.split("."); const openIdSig = new OpenIdSignature({ diff --git a/src/core/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts similarity index 82% rename from src/core/account/MultiKeyAccount.ts rename to src/account/MultiKeyAccount.ts index bd20ef319..01fc02a1b 100644 --- a/src/core/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -2,10 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 import { Account } from "./Account"; -import { MultiKey, MultiKeySignature, PublicKey, Signature } from "../crypto"; -import { AccountAddress } from "../accountAddress"; -import { HexInput, SigningScheme } from "../../types"; -import { AccountAuthenticatorMultiKey } from "../../transactions"; +import { MultiKey, MultiKeySignature, PublicKey, Signature } from "../core/crypto"; +import { AccountAddress } from "../core/accountAddress"; +import { HexInput, SigningScheme } from "../types"; +import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; +import { AnyRawTransaction } from "../transactions/types"; export class MultiKeyAccount implements Account { @@ -69,8 +70,8 @@ export class MultiKeyAccount implements Account { return account instanceof MultiKeyAccount; } - signWithAuthenticator(message: HexInput): AccountAuthenticatorMultiKey { - return new AccountAuthenticatorMultiKey(this.publicKey, this.sign(message)); + signWithAuthenticator(transaction: AnyRawTransaction) { + return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } /** @@ -89,6 +90,14 @@ export class MultiKeyAccount implements Account { return new MultiKeySignature({signatures, bitmap: this.signaturesBitmap}); } + signTransaction(transaction: AnyRawTransaction) { + const signatures = []; + for (const signer of this.signers) { + signatures.push(signer.signTransaction(transaction)); + } + return new MultiKeySignature({signatures, bitmap: this.signaturesBitmap}); + } + /** * Verify the given message and signature with the public key. * diff --git a/src/core/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts similarity index 83% rename from src/core/account/SingleKeyAccount.ts rename to src/account/SingleKeyAccount.ts index c4a9d1156..57c94f13e 100644 --- a/src/core/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -1,8 +1,10 @@ -import { AccountAuthenticatorSingleKey } from "../../transactions/authenticator/account"; -import { type HexInput, SigningScheme, SigningSchemeInput } from "../../types"; -import { AccountAddress, AccountAddressInput } from "../accountAddress"; -import { AnyPublicKey, AnySignature, Ed25519PrivateKey, PrivateKey, Secp256k1PrivateKey } from "../crypto"; +import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; +import { type HexInput, SigningScheme, SigningSchemeInput } from "../types"; +import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; +import { AnyPublicKey, AnySignature, Ed25519PrivateKey, PrivateKey, Secp256k1PrivateKey } from "../core/crypto"; import type { Account } from "./Account"; +import { generateSigningMessageForTransaction } from "../transactions/transactionBuilder/signingMessage"; +import { AnyRawTransaction } from "../transactions/types"; export interface SingleKeySignerConstructorArgs { privateKey: PrivateKey; @@ -106,14 +108,18 @@ export class SingleKeyAccount implements Account { return this.publicKey.verifySignature(args); } - signWithAuthenticator(message: HexInput) { - const innerSignature = this.privateKey.sign(message); + signWithAuthenticator(transaction: AnyRawTransaction) { + const innerSignature = this.sign(generateSigningMessageForTransaction(transaction)); const signature = new AnySignature(innerSignature); return new AccountAuthenticatorSingleKey(this.publicKey, signature); } sign(message: HexInput) { - return this.signWithAuthenticator(message).signature; + return this.privateKey.sign(message); + } + + signTransaction(transaction: AnyRawTransaction) { + return this.sign(generateSigningMessageForTransaction(transaction)) } // endregion diff --git a/src/core/account/index.ts b/src/account/index.ts similarity index 100% rename from src/core/account/index.ts rename to src/account/index.ts diff --git a/src/api/account.ts b/src/api/account.ts index dd76abd97..8a6d15955 100644 --- a/src/api/account.ts +++ b/src/api/account.ts @@ -1,7 +1,8 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { AccountAddress, PrivateKey, Account as AccountModule, AccountAddressInput } from "../core"; +import { Account as AccountModule} from "../account" +import { AccountAddress, PrivateKey, AccountAddressInput } from "../core"; import { AccountData, AnyNumber, diff --git a/src/api/ans.ts b/src/api/ans.ts index 87803747e..582c99a51 100644 --- a/src/api/ans.ts +++ b/src/api/ans.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account, AccountAddressInput } from "../core"; +import { AccountAddressInput } from "../core"; import { RegisterNameParameters, getExpiration, @@ -25,6 +25,7 @@ import { import { GetANSNameResponse, MoveAddressType } from "../types"; import { InputGenerateTransactionOptions, SimpleTransaction } from "../transactions/types"; import { AptosConfig } from "./aptosConfig"; +import { Account } from "../account"; /** * A class to handle all `ANS` operations diff --git a/src/api/digitalAsset.ts b/src/api/digitalAsset.ts index 399575e76..e7d0b6eb1 100644 --- a/src/api/digitalAsset.ts +++ b/src/api/digitalAsset.ts @@ -13,7 +13,7 @@ import { PaginationArgs, TokenStandardArg, } from "../types"; -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { AccountAddress, AccountAddressInput } from "../core"; import { InputGenerateTransactionOptions, SimpleTransaction } from "../transactions/types"; import { addDigitalAssetPropertyTransaction, @@ -45,6 +45,7 @@ import { import { ProcessorType } from "../utils/const"; import { AptosConfig } from "./aptosConfig"; import { waitForIndexerOnVersion } from "./utils"; +import { Account } from "../account"; /** * A class to query all `DigitalAsset` related queries on Aptos. diff --git a/src/api/fungibleAsset.ts b/src/api/fungibleAsset.ts index 6051dc898..9ddc35a5f 100644 --- a/src/api/fungibleAsset.ts +++ b/src/api/fungibleAsset.ts @@ -23,8 +23,9 @@ import { import { ProcessorType } from "../utils/const"; import { AptosConfig } from "./aptosConfig"; import { waitForIndexerOnVersion } from "./utils"; -import { Account, AccountAddress } from "../core"; +import { AccountAddress } from "../core"; import { InputGenerateTransactionOptions, SimpleTransaction } from "../transactions"; +import { Account } from "../account"; /** * A class to query all `FungibleAsset` related queries on Aptos. diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 5735126da..f4a008e0f 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { EphemeralKeyPair, KeylessAccount } from "../core"; +import { EphemeralKeyPair, KeylessAccount } from "../account"; import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; diff --git a/src/api/transaction.ts b/src/api/transaction.ts index 2978df265..e8e21ac38 100644 --- a/src/api/transaction.ts +++ b/src/api/transaction.ts @@ -34,11 +34,12 @@ import { InputGenerateTransactionPayloadData, SimpleTransaction, } from "../transactions"; -import { AccountAddressInput, Account, PrivateKey } from "../core"; +import { AccountAddressInput, PrivateKey } from "../core"; import { Build } from "./transactionSubmission/build"; import { Simulate } from "./transactionSubmission/simulate"; import { Submit } from "./transactionSubmission/submit"; import { TransactionManagement } from "./transactionSubmission/management"; +import { Account } from "../account/Account"; export class Transaction { readonly config: AptosConfig; diff --git a/src/api/transactionSubmission/management.ts b/src/api/transactionSubmission/management.ts index 39e75a580..d3f8b78b5 100644 --- a/src/api/transactionSubmission/management.ts +++ b/src/api/transactionSubmission/management.ts @@ -2,7 +2,7 @@ import EventEmitter from "eventemitter3"; import { TransactionWorkerEvents, TransactionWorker, TransactionWorkerEventsEnum } from "../../transactions/management"; import { InputGenerateTransactionPayloadData, InputGenerateTransactionOptions } from "../../transactions"; import { AptosConfig } from "../aptosConfig"; -import { Account } from "../../core"; +import { Account } from "../../account"; export class TransactionManagement extends EventEmitter { account!: Account; diff --git a/src/api/transactionSubmission/sign.ts b/src/api/transactionSubmission/sign.ts index 8c5ec8d58..7e5a94147 100644 --- a/src/api/transactionSubmission/sign.ts +++ b/src/api/transactionSubmission/sign.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account } from "../../core"; +import { Account } from "../../account"; import { signTransaction } from "../../internal/transactionSubmission"; import { AccountAuthenticator, AnyRawTransaction } from "../../transactions"; import { AptosConfig } from "../aptosConfig"; diff --git a/src/client/core.ts b/src/client/core.ts index 2ea7e5a25..ffd2d02d0 100644 --- a/src/client/core.ts +++ b/src/client/core.ts @@ -101,6 +101,10 @@ export async function aptosRequest( return result; } + if (result.status >= 500) { + throw new AptosApiError(options, result, `${response.data}`); + } + if (aptosConfig.isPepperServiceRequest(url)) { throw new AptosApiError(options, result, `${response.data}`); } diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index b5e502a60..b67683712 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -1,12 +1,11 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { bytesToHex } from "@noble/curves/abstract/utils"; import { AccountPublicKey, PublicKey } from "./publicKey"; import { Signature } from "./signature"; import { Deserializer, Serializable, Serializer } from "../../bcs"; import { Hex } from "../hex"; -import { HexInput, EphemeralCertificate, SigningScheme } from "../../types"; +import { HexInput, EphemeralCertificate, AnyPublicKeyVariant, SigningScheme } from "../../types"; import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; @@ -44,9 +43,12 @@ export class KeylessPublicKey extends AccountPublicKey { } authKey(): AuthenticationKey { + const serializer = new Serializer(); + serializer.serializeU32AsUleb128(AnyPublicKeyVariant.Keyless); + serializer.serializeFixedBytes(this.bcsToBytes()); return AuthenticationKey.fromSchemeAndBytes({ scheme: SigningScheme.SingleKey, - input: this.toUint8Array(), + input: serializer.toUint8Array(), }); } @@ -56,7 +58,7 @@ export class KeylessPublicKey extends AccountPublicKey { * @returns Uint8Array representation of the public key */ toUint8Array(): Uint8Array { - return this.addressSeed; // TODO + return this.bcsToBytes(); } /** @@ -65,7 +67,7 @@ export class KeylessPublicKey extends AccountPublicKey { * @returns string representation of the public key */ toString(): string { - return `${this.iss }.${ bytesToHex(this.addressSeed)}`; + return Hex.fromHexInput(this.toUint8Array()).toString(); } /** @@ -209,6 +211,7 @@ export class Groth16Zkp extends Serializable{ } serialize(serializer: Serializer): void { + serializer.serializeU32AsUleb128(0); serializer.serializeFixedBytes(this.a); // Should this be fixedBytes?? serializer.serializeFixedBytes(this.b); serializer.serializeFixedBytes(this.c); @@ -225,8 +228,6 @@ export class Groth16Zkp extends Serializable{ export class SignedGroth16Signature extends Signature { readonly proof: Groth16Zkp; - readonly nonMalleabilitySignature: EphemeralSignature; - readonly extraField?: string; readonly overrideAudVal?: string; @@ -236,16 +237,14 @@ export class SignedGroth16Signature extends Signature { constructor(args: { proof: Groth16Zkp; - nonMalleabilitySignature: EphemeralSignature; extraField?: string; overrideAudVal?: string; trainingWheelsSignature?: EphemeralSignature; }) { super(); - const { proof, nonMalleabilitySignature, trainingWheelsSignature, extraField, overrideAudVal } = args; + const { proof, trainingWheelsSignature, extraField, overrideAudVal } = args; this.proof = proof; - this.nonMalleabilitySignature = nonMalleabilitySignature; this.trainingWheelsSignature = trainingWheelsSignature; this.extraField = extraField; this.overrideAudVal = overrideAudVal; @@ -273,7 +272,6 @@ export class SignedGroth16Signature extends Signature { serialize(serializer: Serializer): void { this.proof.serialize(serializer); - this.nonMalleabilitySignature.serialize(serializer); serializer.serializeU64(EPK_LIFESPAN); serializer.serializeOptionStr(this.extraField); serializer.serializeOptionStr(this.overrideAudVal); @@ -283,18 +281,16 @@ export class SignedGroth16Signature extends Signature { static deserialize(deserializer: Deserializer): SignedGroth16Signature { const proof = Groth16Zkp.deserialize(deserializer); - const nonMalleabilitySignature = EphemeralSignature.deserialize(deserializer); const trainingWheelsSignature = EphemeralSignature.deserialize(deserializer); const extraField = deserializer.deserializeStr(); - return new SignedGroth16Signature({ proof, nonMalleabilitySignature, trainingWheelsSignature, extraField }); + return new SignedGroth16Signature({ proof, trainingWheelsSignature, extraField }); } static load(deserializer: Deserializer): SignedGroth16Signature { const proof = Groth16Zkp.deserialize(deserializer); - const nonMalleabilitySignature = EphemeralSignature.deserialize(deserializer); const trainingWheelsSignature = EphemeralSignature.deserialize(deserializer); const extraField = deserializer.deserializeStr(); - return new SignedGroth16Signature({ proof, nonMalleabilitySignature, trainingWheelsSignature, extraField }); + return new SignedGroth16Signature({ proof, trainingWheelsSignature, extraField }); } // static isSignature(signature: Signature): signature is OpenIdSignature { diff --git a/src/core/index.ts b/src/core/index.ts index b31b387fd..3313d8fd5 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1,7 +1,6 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -export * from "./account"; export * from "./accountAddress"; export * from "./authenticationKey"; export * from "./common"; diff --git a/src/index.ts b/src/index.ts index ae708f657..0e5041546 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 +export * from "./account"; export * from "./api"; export * from "./bcs"; export * from "./client"; diff --git a/src/internal/account.ts b/src/internal/account.ts index 62c420894..2ce567d31 100644 --- a/src/internal/account.ts +++ b/src/internal/account.ts @@ -11,7 +11,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { AptosApiError, getAptosFullNode, paginateWithCursor } from "../client"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; -import { Account } from "../core/account"; +import { Account } from "../account"; import { AnyPublicKey, Ed25519PublicKey, PrivateKey } from "../core/crypto"; import { getTableItem, queryIndexer } from "./general"; import { diff --git a/src/internal/ans.ts b/src/internal/ans.ts index 17300232c..fb5bf1ef6 100644 --- a/src/internal/ans.ts +++ b/src/internal/ans.ts @@ -8,8 +8,9 @@ * name namespace and without having a dependency cycle error. */ +import { Account } from "../account"; import { AptosConfig } from "../api/aptosConfig"; -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { AccountAddress, AccountAddressInput } from "../core"; import { InputGenerateTransactionOptions, SimpleTransaction } from "../transactions/types"; import { GetANSNameResponse, MoveAddressType, MoveValue, OrderByArg, PaginationArgs, WhereArg } from "../types"; import { GetNamesQuery } from "../types/generated/operations"; diff --git a/src/internal/digitalAsset.ts b/src/internal/digitalAsset.ts index 7f687c38a..7099ab142 100644 --- a/src/internal/digitalAsset.ts +++ b/src/internal/digitalAsset.ts @@ -10,7 +10,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { Bool, MoveString, MoveVector, U64 } from "../bcs"; -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { AccountAddress, AccountAddressInput } from "../core"; import { EntryFunctionABI, InputGenerateTransactionOptions, SimpleTransaction } from "../transactions/types"; import { AnyNumber, @@ -53,6 +53,7 @@ import { TypeTagU64, TypeTagVector, } from "../transactions"; +import { Account } from "../account"; // A property type map for the user input and what Move expects const PropertyTypeMap = { diff --git a/src/internal/fungibleAsset.ts b/src/internal/fungibleAsset.ts index 91e6cb7e4..137e2237a 100644 --- a/src/internal/fungibleAsset.ts +++ b/src/internal/fungibleAsset.ts @@ -33,7 +33,7 @@ import { FungibleAssetActivitiesBoolExp, FungibleAssetMetadataBoolExp, } from "../types/generated/types"; -import { Account, AccountAddress } from "../core"; +import { AccountAddress } from "../core"; import { EntryFunctionABI, InputGenerateTransactionOptions, @@ -43,6 +43,7 @@ import { TypeTagU64, } from "../transactions"; import { generateTransaction } from "./transactionSubmission"; +import { Account } from "../account"; export async function getFungibleAssetMetadata(args: { aptosConfig: AptosConfig; diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 8f7576b62..c06374f22 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -13,10 +13,11 @@ import { bls12_381 as bls } from "@noble/curves/bls12-381"; import { ProjPointType } from "@noble/curves/abstract/weierstrass"; import { AptosConfig } from "../api/aptosConfig"; import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; -import { EPK_LIFESPAN, EphemeralKeyPair, Groth16Zkp, KeylessAccount, Hex, SignedGroth16Signature } from "../core"; +import { EPK_LIFESPAN, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; import { generateSigningMessage } from "../transactions"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; +import { EphemeralKeyPair, KeylessAccount } from "../account"; function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType { const { jwt, uidKey } = args; @@ -129,9 +130,7 @@ export async function getProof(args: { b: proofPoints.b, c: proofPoints.c, }); - const signMess = generateSigningMessage(proof.bcsToBytes(), "Groth16Zkp"); - const nonMalleabilitySignature = ephemeralKeyPair.sign(signMess); - const signedProof = new SignedGroth16Signature({ proof, nonMalleabilitySignature, extraField }); + const signedProof = new SignedGroth16Signature({ proof, extraField }); return signedProof; } diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index ccc5ad2f6..1716ea84e 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -8,7 +8,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { MoveVector, U8 } from "../bcs"; import { postAptosFullNode } from "../client"; -import { Account } from "../core/account"; +import { Account } from "../account"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; import { PrivateKey } from "../core/crypto"; import { AccountAuthenticator } from "../transactions/authenticator/account"; @@ -18,10 +18,7 @@ import { generateTransactionPayload, generateSignedTransactionForSimulation, generateSignedTransaction, - sign, - generateSigningMessage, generateTransactionPayloadWithABI, - generateSigningMessageForTransaction, } from "../transactions/transactionBuilder/transactionBuilder"; import { InputGenerateTransactionData, @@ -39,7 +36,7 @@ import { } from "../transactions/types"; import { getInfo } from "./account"; import { UserTransactionResponse, PendingTransactionResponse, MimeType, HexInput, TransactionResponse } from "../types"; -import { TypeTagU8, TypeTagVector } from "../transactions"; +import { TypeTagU8, TypeTagVector, generateSigningMessageForTransaction } from "../transactions"; /** * We are defining function signatures, each with its specific input and output. @@ -210,8 +207,8 @@ export function getSigningMessage(args: { transaction: AnyRawTransaction }): Uin * @return The signer AccountAuthenticator */ export function signTransaction(args: { signer: Account; transaction: AnyRawTransaction }): AccountAuthenticator { - const accountAuthenticator = sign({ ...args }); - return accountAuthenticator; + const { signer, transaction } = args; + return signer.signWithAuthenticator(transaction); } /** diff --git a/src/transactions/management/accountSequenceNumber.ts b/src/transactions/management/accountSequenceNumber.ts index 98a1a7a77..9b13e3b5d 100644 --- a/src/transactions/management/accountSequenceNumber.ts +++ b/src/transactions/management/accountSequenceNumber.ts @@ -24,7 +24,7 @@ */ import { AptosConfig } from "../../api/aptosConfig"; -import { Account } from "../../core"; +import { Account } from "../../account"; import { getInfo } from "../../internal/account"; import { sleep } from "../../utils/helpers"; diff --git a/src/transactions/management/transactionWorker.ts b/src/transactions/management/transactionWorker.ts index e0c2952cf..a7ab42574 100644 --- a/src/transactions/management/transactionWorker.ts +++ b/src/transactions/management/transactionWorker.ts @@ -2,7 +2,7 @@ import EventEmitter from "eventemitter3"; import { AptosConfig } from "../../api/aptosConfig"; -import { Account } from "../../core"; +import { Account } from "../../account"; import { waitForTransaction } from "../../internal/transaction"; import { generateTransaction, signAndSubmitTransaction } from "../../internal/transactionSubmission"; import { PendingTransactionResponse, TransactionResponse } from "../../types"; diff --git a/src/transactions/transactionBuilder/index.ts b/src/transactions/transactionBuilder/index.ts index f512f7969..e6fc29838 100644 --- a/src/transactions/transactionBuilder/index.ts +++ b/src/transactions/transactionBuilder/index.ts @@ -4,3 +4,5 @@ export * from "./helpers"; export * from "./transactionBuilder"; export * from "./remoteAbi"; +export * from "./signingMessage"; + diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts new file mode 100644 index 000000000..1abefe025 --- /dev/null +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -0,0 +1,75 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +/** + * This file handles the transaction creation lifecycle. + * It holds different operations to generate a transaction payload, a raw transaction, + * and a signed transaction that can be simulated, signed and submitted to chain. + */ +import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; +import { + RAW_TRANSACTION_SALT, + RAW_TRANSACTION_WITH_DATA_SALT, +} from "../../utils/const"; +import { + FeePayerRawTransaction, + MultiAgentRawTransaction, + RawTransaction, +} from "../instances"; +import { + AnyRawTransaction, AnyRawTransactionInstance, +} from "../types"; +import { Serializable } from "../../bcs"; + +/** + * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction + * + * @param transaction A aptos transaction type + * + * @returns FeePayerRawTransaction | MultiAgentRawTransaction | RawTransaction + */ +export function deriveTransactionType(transaction: AnyRawTransaction): AnyRawTransactionInstance { + if (transaction.feePayerAddress) { + return new FeePayerRawTransaction( + transaction.rawTransaction, + transaction.secondarySignerAddresses ?? [], + transaction.feePayerAddress, + ); + } + if (transaction.secondarySignerAddresses) { + return new MultiAgentRawTransaction(transaction.rawTransaction, transaction.secondarySignerAddresses); + } + + return transaction.rawTransaction; +} + +export function generateSigningMessage(bytes: Uint8Array, domainSeparator: string): Uint8Array { + const hash = sha3Hash.create(); + + hash.update(`APTOS::${domainSeparator}`); + + const prefix = hash.digest(); + + const body = bytes; + + const mergedArray = new Uint8Array(prefix.length + body.length); + mergedArray.set(prefix); + mergedArray.set(body, prefix.length); + + return mergedArray; +} + +export function generateSigningMessageForSerializable(obj: Serializable): Uint8Array { + return generateSigningMessage(obj.bcsToBytes(), obj.constructor.name); +} + +export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { + const rawTxn = deriveTransactionType(transaction); + if (rawTxn instanceof RawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_SALT); + } if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_WITH_DATA_SALT); + } + throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); +} + diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 82bc7d4e8..dbd75492a 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -6,10 +6,8 @@ * It holds different operations to generate a transaction payload, a raw transaction, * and a signed transaction that can be simulated, signed and submitted to chain. */ -import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; -import { Account } from "../../core/account"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { Secp256k1PublicKey, Secp256k1Signature } from "../../core/crypto/secp256k1"; @@ -20,8 +18,6 @@ import { NetworkToChainId } from "../../utils/apiEndpoints"; import { DEFAULT_MAX_GAS_AMOUNT, DEFAULT_TXN_EXP_SEC_FROM_NOW, - RAW_TRANSACTION_SALT, - RAW_TRANSACTION_WITH_DATA_SALT, } from "../../utils/const"; import { AccountAuthenticator, @@ -52,7 +48,6 @@ import { SignedTransaction } from "../instances/signedTransaction"; import { AnyRawTransaction, AnyTransactionPayloadInstance, - AnyRawTransactionInstance, EntryFunctionArgumentTypes, InputGenerateMultiAgentRawTransactionArgs, InputGenerateRawTransactionArgs, @@ -74,7 +69,7 @@ import { convertArgument, fetchEntryFunctionAbi, standardizeTypeTags } from "./r import { memoizeAsync } from "../../utils/memoize"; import { AnyNumber } from "../../types"; import { getFunctionParts, isScriptDataInput } from "./helpers"; -import { Serializable } from "../../bcs"; +import { deriveTransactionType } from "./signingMessage"; /** * We are defining function signatures, each with its specific input and output. @@ -407,24 +402,6 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { ); } -/** - * Sign a transaction that can later be submitted to chain - * - * @param args.signer The signer account to sign the transaction - * @param args.transaction A aptos transaction type to sign - * - * @return The signer AccountAuthenticator - */ -export function sign(args: { signer: Account; transaction: AnyRawTransaction }): AccountAuthenticator { - const { signer, transaction } = args; - - // get the signing message - const message = generateSigningMessageForTransaction(transaction); - - // account.signMessage - return signer.signWithAuthenticator(message); -} - /** * Prepare a transaction to be submitted to chain * @@ -476,28 +453,6 @@ export function generateSignedTransaction(args: InputSubmitTransactionData): Uin ); } -/** - * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction - * - * @param transaction A aptos transaction type - * - * @returns FeePayerRawTransaction | MultiAgentRawTransaction | RawTransaction - */ -export function deriveTransactionType(transaction: AnyRawTransaction): AnyRawTransactionInstance { - if (transaction.feePayerAddress) { - return new FeePayerRawTransaction( - transaction.rawTransaction, - transaction.secondarySignerAddresses ?? [], - transaction.feePayerAddress, - ); - } - if (transaction.secondarySignerAddresses) { - return new MultiAgentRawTransaction(transaction.rawTransaction, transaction.secondarySignerAddresses); - } - - return transaction.rawTransaction; -} - /** * Generate a multi signers signed transaction that can be submitted to chain * @@ -546,34 +501,3 @@ export function generateMultiSignersSignedTransaction( `Cannot prepare multi signers transaction to submission, ${typeof transaction} transaction is not supported`, ); } - -export function generateSigningMessage(bytes: Uint8Array, domainSeparator: string): Uint8Array { - const hash = sha3Hash.create(); - - hash.update(`APTOS::${domainSeparator}`); - - const prefix = hash.digest(); - - const body = bytes; - - const mergedArray = new Uint8Array(prefix.length + body.length); - mergedArray.set(prefix); - mergedArray.set(body, prefix.length); - - return mergedArray; -} - -export function generateSigningMessageForSerializable(obj: Serializable): Uint8Array { - return generateSigningMessage(obj.bcsToBytes(), obj.constructor.name); -} - -export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { - const rawTxn = deriveTransactionType(transaction); - if (rawTxn instanceof RawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_SALT); - } if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_WITH_DATA_SALT); - } - throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); -} - From 1ccd56ef9454bd270dcbd8d5d2642a4ab3a037d0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 12 Mar 2024 14:38:19 -0400 Subject: [PATCH 007/136] version 1.10.1-zeta.0 works locally --- examples/typescript/keyless.ts | 34 ++++++++++++++++++++++++++++------ package.json | 2 +- src/core/crypto/ephemeral.ts | 2 +- src/internal/keyless.ts | 6 +++--- src/types/keyless.ts | 2 ++ src/version.ts | 2 +- 6 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 src/types/keyless.ts diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index b77b158ea..4dee903e1 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -50,7 +50,6 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client const config = new AptosConfig({network: Network.LOCAL}); - // const config = new AptosConfig(); const aptos = new Aptos(config); @@ -99,12 +98,11 @@ const example = async () => { const jwt = await getUserInput(); const bob = Account.generate(); + const sponsor = Account.generate(); const alice = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair: aliceEphem, - // pepper: "4c000000000000000000000000000000000000000000000000000000000000", - // extraFieldKey: "family_name" }); console.log("=== Addresses ===\n"); @@ -129,15 +127,22 @@ const example = async () => { amount: BOB_INITIAL_BALANCE, options: { waitForIndexer: false }, }); + await aptos.faucet.fundAccount({ + accountAddress: sponsor.accountAddress, + amount: ALICE_INITIAL_BALANCE, + options: { waitForIndexer: false }, + }); // // Show the balances console.log("\n=== Balances ===\n"); const aliceBalance = await balance(aptos, "Alice", alice.accountAddress); const bobBalance = await balance(aptos, "Bob", bob.accountAddress); + const sponsorBalance = await balance(aptos, "Sponsor", sponsor.accountAddress); // Transfer between users const transaction = await aptos.transaction.build.simple({ sender: alice.accountAddress, + withFeePayer: true, data: { function: "0x1::coin::transfer", typeArguments: [APTOS_COIN], @@ -145,7 +150,20 @@ const example = async () => { }, }); - const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); + // Alice signs + const senderSignature = aptos.transaction.sign({ signer: alice, transaction }); + + // Sponsor signs + const sponsorSignature = aptos.transaction.signAsFeePayer({ signer: sponsor, transaction }); + + // Submit the transaction to chain + const committedTxn = await aptos.transaction.submit.simple({ + transaction, + senderAuthenticator: senderSignature, + feePayerAuthenticator: sponsorSignature, + }); + + // const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); console.log(`Committed transaction: ${committedTxn.hash}`); @@ -153,12 +171,16 @@ const example = async () => { console.log("\n=== Balances after transfer ===\n"); const newAliceBalance = await balance(aptos, "Alice", alice.accountAddress); const newBobBalance = await balance(aptos, "Bob", bob.accountAddress); + const newSponsorBalance = await balance(aptos, "Sponsor", sponsor.accountAddress); // Bob should have the transfer amount if (TRANSFER_AMOUNT !== newBobBalance - bobBalance) throw new Error("Bob's balance after transfer is incorrect"); - // Alice should have the remainder minus gas - if (TRANSFER_AMOUNT >= aliceBalance - newAliceBalance) throw new Error("Alice's balance after transfer is incorrect"); + // Alice should have the transfer amount as the fee was sponsored. + if (TRANSFER_AMOUNT !== aliceBalance - newAliceBalance) throw new Error("Alice's balance after transfer is incorrect"); + + // Alice should have the transfer amount as the fee was sponsored. + if (sponsorBalance <= newSponsorBalance) throw new Error("Sponsor's balance after transfer is incorrect"); }; example(); diff --git a/package.json b/package.json index 348f53839..02dbdab49 100644 --- a/package.json +++ b/package.json @@ -89,5 +89,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.10.1-zeta.0" + "version": "1.10.0-zeta.0" } diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts index b6229e23c..d18b62cfa 100644 --- a/src/core/crypto/ephemeral.ts +++ b/src/core/crypto/ephemeral.ts @@ -5,7 +5,7 @@ import { Signature } from "./signature"; import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; /** - * Represents any public key supported by Aptos. + * Represents ephemeral keys and signatures for Aptos Keyless accounts. * * TODO */ diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index c06374f22..480cf9bb4 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -14,10 +14,10 @@ import { ProjPointType } from "@noble/curves/abstract/weierstrass"; import { AptosConfig } from "../api/aptosConfig"; import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; import { EPK_LIFESPAN, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; -import { generateSigningMessage } from "../transactions"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; import { EphemeralKeyPair, KeylessAccount } from "../account"; +import { PepperFetchResponse, ProverResponse } from "../types/keyless"; function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType { const { jwt, uidKey } = args; @@ -51,7 +51,7 @@ export async function getPepper(args: { }; // const jsonString = JSON.stringify(body); // console.log(jsonString); - const { data } = await postAptosPepperService({ + const { data } = await postAptosPepperService({ aptosConfig, path: "fetch", body, @@ -114,7 +114,7 @@ export async function getProof(args: { const { data } = await postAptosProvingService< any, - { proof: { a: string; b: string; c: string }; public_inputs_hash: string } + ProverResponse >({ aptosConfig, path: "prove", diff --git a/src/types/keyless.ts b/src/types/keyless.ts new file mode 100644 index 000000000..83d533a4e --- /dev/null +++ b/src/types/keyless.ts @@ -0,0 +1,2 @@ +export type ProverResponse = { proof: { a: string; b: string; c: string }; public_inputs_hash: string }; +export type PepperFetchResponse = { signature: string }; \ No newline at end of file diff --git a/src/version.ts b/src/version.ts index e567f1ac1..d3bba2e67 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.10.1-zeta.0"; +export const VERSION = "1.10.0-zeta.0"; From 23c8e5c50cc7ed62d4d8616d44ea4c136b6387cc Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 12 Mar 2024 14:49:47 -0400 Subject: [PATCH 008/136] revert example --- examples/typescript/keyless.ts | 36 +++++++--------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 4dee903e1..f8466e015 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -49,7 +49,8 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client - const config = new AptosConfig({network: Network.LOCAL}); + const config = new AptosConfig({network: Network.DEVNET}); + // const config = new AptosConfig(); const aptos = new Aptos(config); @@ -98,11 +99,12 @@ const example = async () => { const jwt = await getUserInput(); const bob = Account.generate(); - const sponsor = Account.generate(); const alice = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair: aliceEphem, + // pepper: "4c000000000000000000000000000000000000000000000000000000000000", + // extraFieldKey: "family_name" }); console.log("=== Addresses ===\n"); @@ -127,22 +129,15 @@ const example = async () => { amount: BOB_INITIAL_BALANCE, options: { waitForIndexer: false }, }); - await aptos.faucet.fundAccount({ - accountAddress: sponsor.accountAddress, - amount: ALICE_INITIAL_BALANCE, - options: { waitForIndexer: false }, - }); // // Show the balances console.log("\n=== Balances ===\n"); const aliceBalance = await balance(aptos, "Alice", alice.accountAddress); const bobBalance = await balance(aptos, "Bob", bob.accountAddress); - const sponsorBalance = await balance(aptos, "Sponsor", sponsor.accountAddress); // Transfer between users const transaction = await aptos.transaction.build.simple({ sender: alice.accountAddress, - withFeePayer: true, data: { function: "0x1::coin::transfer", typeArguments: [APTOS_COIN], @@ -150,20 +145,7 @@ const example = async () => { }, }); - // Alice signs - const senderSignature = aptos.transaction.sign({ signer: alice, transaction }); - - // Sponsor signs - const sponsorSignature = aptos.transaction.signAsFeePayer({ signer: sponsor, transaction }); - - // Submit the transaction to chain - const committedTxn = await aptos.transaction.submit.simple({ - transaction, - senderAuthenticator: senderSignature, - feePayerAuthenticator: sponsorSignature, - }); - - // const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); + const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); console.log(`Committed transaction: ${committedTxn.hash}`); @@ -171,16 +153,12 @@ const example = async () => { console.log("\n=== Balances after transfer ===\n"); const newAliceBalance = await balance(aptos, "Alice", alice.accountAddress); const newBobBalance = await balance(aptos, "Bob", bob.accountAddress); - const newSponsorBalance = await balance(aptos, "Sponsor", sponsor.accountAddress); // Bob should have the transfer amount if (TRANSFER_AMOUNT !== newBobBalance - bobBalance) throw new Error("Bob's balance after transfer is incorrect"); - // Alice should have the transfer amount as the fee was sponsored. - if (TRANSFER_AMOUNT !== aliceBalance - newAliceBalance) throw new Error("Alice's balance after transfer is incorrect"); - - // Alice should have the transfer amount as the fee was sponsored. - if (sponsorBalance <= newSponsorBalance) throw new Error("Sponsor's balance after transfer is incorrect"); + // Alice should have the remainder minus gas + if (TRANSFER_AMOUNT >= aliceBalance - newAliceBalance) throw new Error("Alice's balance after transfer is incorrect"); }; example(); From 8cee6afc2adce035e83fe4c6a442ed97f1fd1c7a Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 12 Mar 2024 17:45:27 -0400 Subject: [PATCH 009/136] rename multikeysig to multisig --- src/account/Account.ts | 6 +++--- src/account/MultiKeyAccount.ts | 8 ++++---- src/core/crypto/multiKey.ts | 22 +++++++++++----------- src/transactions/authenticator/account.ts | 9 ++++----- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/account/Account.ts b/src/account/Account.ts index c66c34da0..6f26370f1 100644 --- a/src/account/Account.ts +++ b/src/account/Account.ts @@ -216,9 +216,9 @@ export abstract class Account { } /** - * Sign a message using the available signing capabilities. - * @param message the signing message, as binary input - * @return the AccountAuthenticator containing the signature, together with the account's public key + * Sign a transaction using the available signing capabilities. + * @param transaction the raw transaction + * @return the AccountAuthenticator containing the signature og the transaction, together with the account's public key */ abstract signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 01fc02a1b..f27c34634 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { Account } from "./Account"; -import { MultiKey, MultiKeySignature, PublicKey, Signature } from "../core/crypto"; +import { MultiKey, MultiSignature, PublicKey, Signature } from "../core/crypto"; import { AccountAddress } from "../core/accountAddress"; import { HexInput, SigningScheme } from "../types"; import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; @@ -82,12 +82,12 @@ export class MultiKeyAccount implements Account { * @param data in HexInput format * @returns Signature */ - sign(data: HexInput): MultiKeySignature { + sign(data: HexInput): MultiSignature { const signatures = []; for (const signer of this.signers) { signatures.push(signer.sign(data)); } - return new MultiKeySignature({signatures, bitmap: this.signaturesBitmap}); + return new MultiSignature({signatures, bitmap: this.signaturesBitmap}); } signTransaction(transaction: AnyRawTransaction) { @@ -95,7 +95,7 @@ export class MultiKeyAccount implements Account { for (const signer of this.signers) { signatures.push(signer.signTransaction(transaction)); } - return new MultiKeySignature({signatures, bitmap: this.signaturesBitmap}); + return new MultiSignature({signatures, bitmap: this.signaturesBitmap}); } /** diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index 68a3f4b68..cc6e44149 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -153,7 +153,7 @@ export class MultiKey extends AccountPublicKey { } } -export class MultiKeySignature extends Signature { +export class MultiSignature extends Signature { /** * Number of bytes in the bitmap representing who signed the transaction (32-bits) */ @@ -162,7 +162,7 @@ export class MultiKeySignature extends Signature { /** * Maximum number of Ed25519 signatures supported */ - static MAX_SIGNATURES_SUPPORTED = MultiKeySignature.BITMAP_LEN * 8; + static MAX_SIGNATURES_SUPPORTED = MultiSignature.BITMAP_LEN * 8; /** * The list of underlying Ed25519 signatures @@ -190,8 +190,8 @@ export class MultiKeySignature extends Signature { super(); const { signatures, bitmap } = args; - if (signatures.length > MultiKeySignature.MAX_SIGNATURES_SUPPORTED) { - throw new Error(`The number of signatures cannot be greater than ${MultiKeySignature.MAX_SIGNATURES_SUPPORTED}`); + if (signatures.length > MultiSignature.MAX_SIGNATURES_SUPPORTED) { + throw new Error(`The number of signatures cannot be greater than ${MultiSignature.MAX_SIGNATURES_SUPPORTED}`); } // Make sure that all signatures are normalized to the SingleKey authentication scheme @@ -200,9 +200,9 @@ export class MultiKeySignature extends Signature { ); if (!(bitmap instanceof Uint8Array)) { - this.bitmap = MultiKeySignature.createBitmap({ bits: bitmap }); - } else if (bitmap.length !== MultiKeySignature.BITMAP_LEN) { - throw new Error(`"bitmap" length should be ${MultiKeySignature.BITMAP_LEN}`); + this.bitmap = MultiSignature.createBitmap({ bits: bitmap }); + } else if (bitmap.length !== MultiSignature.BITMAP_LEN) { + throw new Error(`"bitmap" length should be ${MultiSignature.BITMAP_LEN}`); } else { this.bitmap = bitmap; } @@ -238,8 +238,8 @@ export class MultiKeySignature extends Signature { const dupCheckSet = new Set(); bits.forEach((bit: number) => { - if (bit >= MultiKeySignature.MAX_SIGNATURES_SUPPORTED) { - throw new Error(`Cannot have a signature larger than ${MultiKeySignature.MAX_SIGNATURES_SUPPORTED - 1}.`); + if (bit >= MultiSignature.MAX_SIGNATURES_SUPPORTED) { + throw new Error(`Cannot have a signature larger than ${MultiSignature.MAX_SIGNATURES_SUPPORTED - 1}.`); } if (dupCheckSet.has(bit)) { @@ -277,7 +277,7 @@ export class MultiKeySignature extends Signature { serializer.serializeBytes(this.bitmap); } - static deserialize(deserializer: Deserializer): MultiKeySignature { + static deserialize(deserializer: Deserializer): MultiSignature { const bitmap = deserializer.deserializeBytes(); const nSignatures = bitmap.reduce((acc, byte) => acc + bitCount(byte), 0); const signatures: AnySignature[] = []; @@ -285,7 +285,7 @@ export class MultiKeySignature extends Signature { const signature = AnySignature.deserialize(deserializer); signatures.push(signature); } - return new MultiKeySignature({ signatures, bitmap }); + return new MultiSignature({ signatures, bitmap }); } // endregion diff --git a/src/transactions/authenticator/account.ts b/src/transactions/authenticator/account.ts index e16f9e4ad..80ce546be 100644 --- a/src/transactions/authenticator/account.ts +++ b/src/transactions/authenticator/account.ts @@ -7,7 +7,7 @@ import { Serializer, Deserializer, Serializable } from "../../bcs"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { MultiEd25519PublicKey, MultiEd25519Signature } from "../../core/crypto/multiEd25519"; -import { MultiKey, MultiKeySignature } from "../../core/crypto/multiKey"; +import { MultiKey, MultiSignature } from "../../core/crypto/multiKey"; import { AccountAuthenticatorVariant } from "../../types"; export abstract class AccountAuthenticator extends Serializable { @@ -149,10 +149,9 @@ export class AccountAuthenticatorSingleKey extends AccountAuthenticator { export class AccountAuthenticatorMultiKey extends AccountAuthenticator { public readonly public_keys: MultiKey; - public readonly signatures: MultiKeySignature; + public readonly signatures: MultiSignature; - - constructor(public_keys: MultiKey, signatures: MultiKeySignature) { + constructor(public_keys: MultiKey, signatures: MultiSignature) { super(); this.public_keys = public_keys; this.signatures = signatures; @@ -166,7 +165,7 @@ export class AccountAuthenticatorMultiKey extends AccountAuthenticator { static load(deserializer: Deserializer): AccountAuthenticatorMultiKey { const public_keys = MultiKey.deserialize(deserializer); - const signatures = MultiKeySignature.deserialize(deserializer); + const signatures = MultiSignature.deserialize(deserializer); return new AccountAuthenticatorMultiKey(public_keys, signatures); } } From 1ab640458f89781ee8c5723e3081632ed4876779 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 13 Mar 2024 15:19:53 -0400 Subject: [PATCH 010/136] update local->devnet for escrow example --- examples/typescript/keyless_escrow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/typescript/keyless_escrow.ts b/examples/typescript/keyless_escrow.ts index 524b7e541..4fb4de798 100644 --- a/examples/typescript/keyless_escrow.ts +++ b/examples/typescript/keyless_escrow.ts @@ -56,7 +56,7 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client - const config = new AptosConfig({network: Network.LOCAL}); + const config = new AptosConfig({network: Network.DEVNET}); const aptos = new Aptos(config); // Create two accounts From 1df46b3b75fbb5132492dc001fbf433a80dbd4af Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 14 Mar 2024 03:43:23 -0400 Subject: [PATCH 011/136] turn with credentials off and add pinkas vuf --- src/internal/keyless.ts | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 480cf9bb4..042b13634 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -19,6 +19,16 @@ import { Serializer } from "../bcs"; import { EphemeralKeyPair, KeylessAccount } from "../account"; import { PepperFetchResponse, ProverResponse } from "../types/keyless"; +const APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST = "APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST" + +function stringToUint8Array(str: string): Uint8Array { + const encoder = new TextEncoder(); + return encoder.encode(str); +} + +const PINKAS_VUF_SECRET_KEY_BASE_AFFINE = bls.G2.hashToCurve( + stringToUint8Array("APTOS_KEYLESS_PEPPER_PINKAS_VUF_SECRET_KEY_BASE"), { DST: APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST }).toAffine(); + function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType { const { jwt, uidKey } = args; const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); @@ -28,8 +38,8 @@ function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType({ aptosConfig, path: "fetch", body, originMethod: "getPepper", + overrides: { WITH_CREDENTIALS: false }, }); - // console.log(data); const pepperBase = Hex.fromHexInput(data.signature).toUint8Array(); if (verify) { @@ -72,9 +80,14 @@ export async function getPepper(args: { throw new Error("Unable to verify"); } } - + // This takes the BLS VUF H(m)^sk and transforms it into a Pinkas VUF e(H(m), g_3^sk), where g_3 is the base of the secret key (computed pseudo-randomly via hash-to-curve). + // This gives us the freedom of either decentralizing the pepper service as a BLS-based MPC or on top of the validators, by reusing the Pinkas WVUF-based randomness infrastructure. + const newPepperBase = bls.pairing( + bls.G1.ProjectivePoint.fromHex(pepperBase), + bls.G2.ProjectivePoint.fromAffine(PINKAS_VUF_SECRET_KEY_BASE_AFFINE) + ); const hash = sha3Hash.create(); - hash.update(pepperBase); + hash.update(bls.fields.Fp12.toBytes(newPepperBase)); const hashDigest = hash.digest(); const pepper = Hex.fromHexInput(hashDigest).toUint8Array().slice(0, 31); @@ -102,8 +115,6 @@ export async function getProof(args: { extra_field: extraFieldKey2, uid_key: uidKey || "sub", }; - // const jsonString = JSON.stringify(json); - // console.log(jsonString); const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); const extraFieldVal = jwtPayload[extraFieldKey2]; const extraField = `"${extraFieldKey2}":"${extraFieldVal}",`; @@ -120,8 +131,8 @@ export async function getProof(args: { path: "prove", body: json, originMethod: "getProof", + overrides: { WITH_CREDENTIALS: false }, }); - // console.log(data); const proofPoints = data.proof; From b617f9f5b63de6d3922330ea5c1d04c0a5c152df Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 14 Mar 2024 03:45:14 -0400 Subject: [PATCH 012/136] @1.10.0-zeta.1 --- package.json | 2 +- src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 02dbdab49..084b94048 100644 --- a/package.json +++ b/package.json @@ -89,5 +89,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.10.0-zeta.0" + "version": "1.10.0-zeta.1" } diff --git a/src/version.ts b/src/version.ts index d3bba2e67..50ccd4fa0 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.10.0-zeta.0"; +export const VERSION = "1.10.0-zeta.1"; From e74f80aa4a7da02801a0ee4314e81bbd74a52b5a Mon Sep 17 00:00:00 2001 From: Gabriele Della Casa Venturelli Date: Tue, 19 Mar 2024 10:46:49 -0700 Subject: [PATCH 013/136] Fixed `KeylessSignature` serialization (#331) * Fixed `KeylessSignature` serialization * Fixed `KeylessSignature` serialization --- package.json | 2 +- src/core/crypto/keyless.ts | 68 ++++++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 084b94048..38691a78e 100644 --- a/package.json +++ b/package.json @@ -89,5 +89,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.10.0-zeta.1" + "version": "1.10.0-zeta.2" } diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index b67683712..15f8e223f 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -112,7 +112,7 @@ export class KeylessPublicKey extends AccountPublicKey { pepper: HexInput; }): KeylessPublicKey { computeAddressSeed(args); - return new KeylessPublicKey(args.iss,computeAddressSeed(args)); + return new KeylessPublicKey(args.iss, computeAddressSeed(args)); } } @@ -185,18 +185,14 @@ export class OpenIdSignatureOrZkProof extends Signature { } } -export class Groth16Zkp extends Serializable{ +export class Groth16Zkp extends Serializable { a: Uint8Array; b: Uint8Array; c: Uint8Array; - constructor(args: { - a: HexInput, - b: HexInput, - c: HexInput, - }) { + constructor(args: { a: HexInput; b: HexInput; c: HexInput }) { super(); const { a, b, c } = args; this.a = Hex.fromHexInput(a).toUint8Array(); @@ -211,16 +207,19 @@ export class Groth16Zkp extends Serializable{ } serialize(serializer: Serializer): void { + // There's currently only one variant serializer.serializeU32AsUleb128(0); - serializer.serializeFixedBytes(this.a); // Should this be fixedBytes?? + serializer.serializeFixedBytes(this.a); serializer.serializeFixedBytes(this.b); serializer.serializeFixedBytes(this.c); } static deserialize(deserializer: Deserializer): Groth16Zkp { - const a = deserializer.deserializeBytes(); - const b = deserializer.deserializeBytes(); - const c = deserializer.deserializeBytes(); + // Ignored, as there's currently only one possible ZKP variant + deserializer.deserializeUleb128AsU32(); + const a = deserializer.deserializeFixedBytes(32); + const b = deserializer.deserializeFixedBytes(64); + const c = deserializer.deserializeFixedBytes(32); return new Groth16Zkp({ a, b, c }); } } @@ -228,23 +227,25 @@ export class Groth16Zkp extends Serializable{ export class SignedGroth16Signature extends Signature { readonly proof: Groth16Zkp; + readonly expHorizonSecs: bigint; + readonly extraField?: string; readonly overrideAudVal?: string; readonly trainingWheelsSignature?: EphemeralSignature; - constructor(args: { proof: Groth16Zkp; + expHorizonSecs?: bigint; extraField?: string; overrideAudVal?: string; trainingWheelsSignature?: EphemeralSignature; - }) { super(); - const { proof, trainingWheelsSignature, extraField, overrideAudVal } = args; + const { proof, expHorizonSecs = BigInt(EPK_LIFESPAN), trainingWheelsSignature, extraField, overrideAudVal } = args; this.proof = proof; + this.expHorizonSecs = expHorizonSecs; this.trainingWheelsSignature = trainingWheelsSignature; this.extraField = extraField; this.overrideAudVal = overrideAudVal; @@ -272,25 +273,32 @@ export class SignedGroth16Signature extends Signature { serialize(serializer: Serializer): void { this.proof.serialize(serializer); - serializer.serializeU64(EPK_LIFESPAN); + serializer.serializeU64(this.expHorizonSecs); serializer.serializeOptionStr(this.extraField); serializer.serializeOptionStr(this.overrideAudVal); serializer.serializeOption(this.trainingWheelsSignature); - } static deserialize(deserializer: Deserializer): SignedGroth16Signature { const proof = Groth16Zkp.deserialize(deserializer); - const trainingWheelsSignature = EphemeralSignature.deserialize(deserializer); - const extraField = deserializer.deserializeStr(); - return new SignedGroth16Signature({ proof, trainingWheelsSignature, extraField }); + const expHorizonSecs = deserializer.deserializeU64(); + const hasExtraField = deserializer.deserializeUleb128AsU32(); + const extraField = hasExtraField ? deserializer.deserializeStr() : undefined; + const hasOverrideAudVal = deserializer.deserializeUleb128AsU32(); + const overrideAudVal = hasOverrideAudVal ? deserializer.deserializeStr() : undefined; + const [trainingWheelsSignature] = deserializer.deserializeVector(EphemeralSignature); + return new SignedGroth16Signature({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } static load(deserializer: Deserializer): SignedGroth16Signature { const proof = Groth16Zkp.deserialize(deserializer); - const trainingWheelsSignature = EphemeralSignature.deserialize(deserializer); - const extraField = deserializer.deserializeStr(); - return new SignedGroth16Signature({ proof, trainingWheelsSignature, extraField }); + const expHorizonSecs = deserializer.deserializeU64(); + const hasExtraField = deserializer.deserializeUleb128AsU32(); + const extraField = hasExtraField ? deserializer.deserializeStr() : undefined; + const hasOverrideAudVal = deserializer.deserializeUleb128AsU32(); + const overrideAudVal = hasOverrideAudVal ? deserializer.deserializeStr() : undefined; + const [trainingWheelsSignature] = deserializer.deserializeVector(EphemeralSignature); + return new SignedGroth16Signature({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } // static isSignature(signature: Signature): signature is OpenIdSignature { @@ -304,10 +312,10 @@ export class SignedGroth16Signature extends Signature { export class OpenIdSignature extends Signature { readonly jwtSignature: string; - readonly uidKey: string; - readonly jwtPayloadJson: string; + readonly uidKey: string; + readonly epkBlinder: Uint8Array; readonly pepper: Uint8Array; @@ -365,7 +373,7 @@ export class OpenIdSignature extends Signature { serializer.serializeStr(this.jwtSignature); serializer.serializeStr(this.jwtPayloadJson); serializer.serializeStr(this.uidKey); - serializer.serializeBytes(this.epkBlinder); + serializer.serializeFixedBytes(this.epkBlinder); serializer.serializeFixedBytes(this.pepper); serializer.serializeOptionStr(this.overrideAudValue); } @@ -376,7 +384,9 @@ export class OpenIdSignature extends Signature { const uidKey = deserializer.deserializeStr(); const epkBlinder = deserializer.deserializeFixedBytes(31); const pepper = deserializer.deserializeFixedBytes(31); - return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper }); + const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); + const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; + return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); } static load(deserializer: Deserializer): OpenIdSignature { @@ -385,7 +395,9 @@ export class OpenIdSignature extends Signature { const uidKey = deserializer.deserializeStr(); const epkBlinder = deserializer.deserializeFixedBytes(31); const pepper = deserializer.deserializeFixedBytes(31); - return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper }); + const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); + const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; + return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); } static isSignature(signature: Signature): signature is OpenIdSignature { @@ -455,9 +467,9 @@ export class KeylessSignature extends Signature { } static deserialize(deserializer: Deserializer): KeylessSignature { + const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); const jwtHeader = deserializer.deserializeStr(); const expiryDateSecs = deserializer.deserializeU64(); - const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); const ephemeralSignature = EphemeralSignature.deserialize(deserializer); return new KeylessSignature({ From 267df99a3c9c412c2f1bab19364659d5f3327581 Mon Sep 17 00:00:00 2001 From: Gabriele Della Casa Venturelli Date: Thu, 21 Mar 2024 08:17:02 -0700 Subject: [PATCH 014/136] Fixed keyless simulation (#332) --- .../transactionBuilder/transactionBuilder.ts | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index dbd75492a..484d71ea6 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -10,15 +10,11 @@ import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; -import { Secp256k1PublicKey, Secp256k1Signature } from "../../core/crypto/secp256k1"; import { getInfo } from "../../internal/account"; import { getLedgerInfo } from "../../internal/general"; import { getGasPriceEstimation } from "../../internal/transaction"; import { NetworkToChainId } from "../../utils/apiEndpoints"; -import { - DEFAULT_MAX_GAS_AMOUNT, - DEFAULT_TXN_EXP_SEC_FROM_NOW, -} from "../../utils/const"; +import { DEFAULT_MAX_GAS_AMOUNT, DEFAULT_TXN_EXP_SEC_FROM_NOW } from "../../utils/const"; import { AccountAuthenticator, AccountAuthenticatorEd25519, @@ -387,12 +383,7 @@ export function generateSignedTransactionForSimulation(args: InputSimulateTransa export function getAuthenticatorForSimulation(publicKey: PublicKey) { // TODO add support for AnyMultiKey if (publicKey instanceof AnyPublicKey) { - if (publicKey.publicKey instanceof Ed25519PublicKey) { - return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); - } - if (publicKey.publicKey instanceof Secp256k1PublicKey) { - return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Secp256k1Signature(new Uint8Array(64)))); - } + return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); } // legacy code From 747a8670231573b7afe26d9b51d97022ac77f7b4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 26 Mar 2024 14:45:27 -0400 Subject: [PATCH 015/136] extra field handling --- src/core/crypto/keyless.ts | 4 ++-- src/internal/keyless.ts | 28 ++++++++++++++++------------ src/version.ts | 2 +- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 15f8e223f..a0023eaf1 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -10,7 +10,7 @@ import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; -export const EPK_LIFESPAN = 10000000; +export const EPK_HORIZON_SECS = 10000000; export const MAX_AUD_VAL_BYTES = 120; export const MAX_UID_KEY_BYTES = 30; export const MAX_UID_VAL_BYTES = 330; @@ -243,7 +243,7 @@ export class SignedGroth16Signature extends Signature { trainingWheelsSignature?: EphemeralSignature; }) { super(); - const { proof, expHorizonSecs = BigInt(EPK_LIFESPAN), trainingWheelsSignature, extraField, overrideAudVal } = args; + const { proof, expHorizonSecs = BigInt(EPK_HORIZON_SECS), trainingWheelsSignature, extraField, overrideAudVal } = args; this.proof = proof; this.expHorizonSecs = expHorizonSecs; this.trainingWheelsSignature = trainingWheelsSignature; diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 042b13634..87c244ae3 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -13,7 +13,7 @@ import { bls12_381 as bls } from "@noble/curves/bls12-381"; import { ProjPointType } from "@noble/curves/abstract/weierstrass"; import { AptosConfig } from "../api/aptosConfig"; import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; -import { EPK_LIFESPAN, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; +import { EPK_HORIZON_SECS, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; import { EphemeralKeyPair, KeylessAccount } from "../account"; @@ -59,6 +59,9 @@ export async function getPepper(args: { epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, }; + // const jsonString = JSON.stringify(body); + + // console.log(jsonString); const { data } = await postAptosPepperService({ aptosConfig, path: "fetch", @@ -104,25 +107,27 @@ export async function getProof(args: { extraFieldKey?: string; }): Promise { const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey, extraFieldKey } = args; - const extraFieldKey2 = extraFieldKey || "iss"; + const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); + let extraField; + if (extraFieldKey) { + const extraFieldVal = jwtPayload[extraFieldKey]; + extraField = `"${extraFieldKey}":"${extraFieldVal}",`; + } const json = { jwt_b64: jwt, epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), - exp_horizon_secs: EPK_LIFESPAN, + exp_horizon_secs: EPK_HORIZON_SECS, pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), - extra_field: extraFieldKey2, + extra_field: extraFieldKey, uid_key: uidKey || "sub", }; - const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); - const extraFieldVal = jwtPayload[extraFieldKey2]; - const extraField = `"${extraFieldKey2}":"${extraFieldVal}",`; - // console.log(extraField); - if (typeof jwtPayload.aud !== "string") { - throw new Error("aud was not found or an array of values"); - } + // const jsonString = JSON.stringify(json); + + // console.log(jsonString); + const { data } = await postAptosProvingService< any, ProverResponse @@ -135,7 +140,6 @@ export async function getProof(args: { }); const proofPoints = data.proof; - const proof = new Groth16Zkp({ a: proofPoints.a, b: proofPoints.b, diff --git a/src/version.ts b/src/version.ts index 50ccd4fa0..a4fd53523 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.10.0-zeta.1"; +export const VERSION = "1.10.0-zeta.3"; From 1206130c1eb2e017da4eff9e15ea1b5d5d06f898 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 26 Mar 2024 15:01:29 -0400 Subject: [PATCH 016/136] update timeout of batch processing --- src/transactions/management/transactionWorker.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/transactions/management/transactionWorker.ts b/src/transactions/management/transactionWorker.ts index a7ab42574..4bdf699a0 100644 --- a/src/transactions/management/transactionWorker.ts +++ b/src/transactions/management/transactionWorker.ts @@ -232,7 +232,13 @@ export class TransactionWorker extends EventEmitter { async checkTransaction(sentTransaction: PromiseFulfilledResult, sequenceNumber: bigint) { try { const waitFor: Array> = []; - waitFor.push(waitForTransaction({ aptosConfig: this.aptosConfig, transactionHash: sentTransaction.value.hash })); + waitFor.push( + waitForTransaction({ + aptosConfig: this.aptosConfig, + transactionHash: sentTransaction.value.hash, + options: { timeoutSecs: 3 }, + }), + ); const sentTransactions = await Promise.allSettled(waitFor); for (let i = 0; i < sentTransactions.length; i += 1) { From 025c1736ba1530f2ccda8bae46d96de010058d8d Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 15 Apr 2024 21:18:30 -0400 Subject: [PATCH 017/136] 1.10.0-zeta.5 --- package.json | 2 +- src/account/EphemeralKeyPair.ts | 23 ++++-- src/account/KeylessAccount.ts | 74 ++++++++++++++---- src/account/MultiKeyAccount.ts | 33 +++++--- src/api/keyless.ts | 8 +- src/core/crypto/ed25519.ts | 30 ++----- src/core/crypto/ephemeral.ts | 7 ++ src/core/crypto/hdKey.ts | 31 ++++++++ src/internal/keyless.ts | 108 +++++++++++++++++--------- src/internal/transactionSubmission.ts | 5 +- src/types/keyless.ts | 8 +- src/utils/apiEndpoints.ts | 16 ++-- src/version.ts | 2 +- 13 files changed, 240 insertions(+), 107 deletions(-) diff --git a/package.json b/package.json index 38691a78e..fbc3c6ec9 100644 --- a/package.json +++ b/package.json @@ -89,5 +89,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.10.0-zeta.2" + "version": "1.10.0-zeta.5" } diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 55a339493..3915ede1a 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -4,10 +4,10 @@ import { randomBytes } from "@noble/hashes/utils"; -import { Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../core/crypto"; +import { EPK_HORIZON_SECS, Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; -import { GenerateAccount, HexInput, SigningSchemeInput } from "../types"; +import { HexInput, SigningSchemeInput } from "../types"; export class EphemeralKeyPair { readonly blinder: Uint8Array; @@ -24,14 +24,12 @@ export class EphemeralKeyPair { const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); - const currentDate = new Date(); - const currentTimeInSeconds = Math.floor(currentDate.getTime() / 1000) + 100000; - this.expiryDateSecs = expiryDateSecs || BigInt(currentTimeInSeconds); + this.expiryDateSecs = expiryDateSecs || BigInt(floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS)); this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); this.nonce = this.generateNonce(); } - static generate(args?: GenerateAccount): EphemeralKeyPair { + static generate(args?: {scheme: SigningSchemeInput}): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { @@ -65,3 +63,16 @@ export class EphemeralKeyPair { function generateBlinder(): Uint8Array { return randomBytes(31); } + +function currentTimeInSeconds(): number { + return Math.floor(new Date().getTime() / 1000) +} + +function floorToWholeHour(timestampInSeconds: number): number { + const date = new Date(timestampInSeconds * 1000); + // Reset minutes and seconds to zero + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return Math.floor(date.getTime() / 1000); +} diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 98aabeccd..d4818a960 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -15,6 +15,7 @@ import { Signature, SignedGroth16Signature, computeAddressSeed, + fromDerivationPath as fromDerivationPathInner, } from "../core/crypto"; import { Account } from "./Account"; @@ -30,7 +31,7 @@ function base64UrlDecode(base64Url: string): string { const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); // Pad the string with '=' characters if needed - const paddedBase64 = base64 + "==".substring(0, (3 - base64.length % 3) % 3); + const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); // Decode the base64 string using the base-64 library const decodedString = decode(paddedBase64); @@ -41,6 +42,11 @@ function base64UrlDecode(base64Url: string): string { export class KeylessAccount implements Account { static readonly PEPPER_LENGTH: number = 31; + static readonly SLIP_0010_SEED: string = "32 bytes"; + + static readonly APTOS_CONNECT_CLIENT_ID: string = + "734998116548-ib6ircv72o1b6l0no9ol4spnnkr8gm69.apps.googleusercontent.com"; + publicKey: KeylessPublicKey; ephemeralKeyPair: EphemeralKeyPair; @@ -55,7 +61,7 @@ export class KeylessAccount implements Account { accountAddress: AccountAddress; - proof: SignedGroth16Signature; + proof: SignedGroth16Signature | Promise; signingScheme: SigningScheme; @@ -69,10 +75,10 @@ export class KeylessAccount implements Account { uidVal: string; aud: string; pepper: HexInput; - proof: SignedGroth16Signature; + proofFetcherOrData: Promise | SignedGroth16Signature; jwt: string; }) { - const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proof, jwt } = args; + const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofFetcherOrData, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; const addressSeed = computeAddressSeed(args); this.publicKey = new KeylessPublicKey(iss, addressSeed); @@ -80,8 +86,13 @@ export class KeylessAccount implements Account { this.uidKey = uidKey; this.uidVal = uidVal; this.aud = aud; - this.proof = proof; this.jwt = jwt; + if (proofFetcherOrData instanceof Promise) { + this.proof = proofFetcherOrData; + this.initialize(proofFetcherOrData); + } else { + this.proof = proofFetcherOrData; + } this.signingScheme = SigningScheme.SingleKey; const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); @@ -91,20 +102,41 @@ export class KeylessAccount implements Account { this.pepper = pepperBytes; } + private async initialize(promise: Promise) { + try { + this.proof = await promise; + } catch (error) { + throw new Error("Failed to fetch proof"); + } + } + signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { - const raw = deriveTransactionType(transaction); + const raw = deriveTransactionType(transaction); const signature = new AnySignature(this.sign(raw.bcsToBytes())); const publicKey = new AnyPublicKey(this.publicKey); return new AccountAuthenticatorSingleKey(publicKey, signature); } + async waitForProofFetch() { + if (this.proof instanceof Promise) { + await this.proof + } + } + sign(data: HexInput): Signature { - const jwtHeader = this.jwt.split(".")[0]; const { expiryDateSecs } = this.ephemeralKeyPair; + const currentTimeInSeconds = Math.floor(new Date().getTime() / 1000); + if (expiryDateSecs < currentTimeInSeconds) { + throw new Error("Ephemeral key pair is expired."); + } + if (this.proof instanceof Promise) { + throw new Error("Failed to fetch proof."); + } + const jwtHeader = this.jwt.split(".")[0]; const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; const serializer = new Serializer(); - serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()) + serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()); serializer.serializeOption(this.proof.proof); const signMess = generateSigningMessage(serializer.toUint8Array(), "TransactionAndProof"); @@ -120,8 +152,8 @@ export class KeylessAccount implements Account { } signTransaction(transaction: AnyRawTransaction): Signature { - const raw = deriveTransactionType(transaction); - return this.sign(raw.bcsToBytes()) + const raw = deriveTransactionType(transaction); + return this.sign(raw.bcsToBytes()); } signWithOpenIdSignature(data: HexInput): Signature { @@ -146,19 +178,31 @@ export class KeylessAccount implements Account { }); } + deriveAptosConnectPublicKey(): KeylessPublicKey { + const { uidKey, uidVal, pepper } = this; + const { iss } = this.publicKey; + const addressSeed = computeAddressSeed({ + uidKey, + uidVal, + aud: KeylessAccount.APTOS_CONNECT_CLIENT_ID, + pepper, + }); + return new KeylessPublicKey(iss, addressSeed); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this verifySignature(args: { message: HexInput; signature: Signature }): boolean { return true; } static fromJWTAndProof(args: { - proof: SignedGroth16Signature; + proofFetcherOrData: Promise | SignedGroth16Signature; jwt: string; ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; uidKey?: string; }): KeylessAccount { - const { proof, jwt, ephemeralKeyPair, pepper } = args; + const { proofFetcherOrData, jwt, ephemeralKeyPair, pepper } = args; const uidKey = args.uidKey ?? "sub"; const jwtPayload = jwtDecode(jwt); @@ -169,7 +213,7 @@ export class KeylessAccount implements Account { const aud = jwtPayload.aud!; const uidVal = jwtPayload[uidKey]; return new KeylessAccount({ - proof, + proofFetcherOrData, ephemeralKeyPair, iss, uidKey, @@ -179,4 +223,8 @@ export class KeylessAccount implements Account { jwt, }); } + + static fromDerivationPath(path: string, seed: Uint8Array): Uint8Array { + return fromDerivationPathInner(path, KeylessAccount.SLIP_0010_SEED, seed); + } } diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index f27c34634..8ff9e6ff2 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -7,7 +7,7 @@ import { AccountAddress } from "../core/accountAddress"; import { HexInput, SigningScheme } from "../types"; import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; import { AnyRawTransaction } from "../transactions/types"; - +import { KeylessAccount } from "./KeylessAccount"; export class MultiKeyAccount implements Account { /** @@ -42,28 +42,30 @@ export class MultiKeyAccount implements Account { * This method is private because it should only be called by the factory static methods. * @returns Account */ - constructor(args: { multiKey: MultiKey; signers: Account[] }) { + constructor(args: { multiKey: MultiKey; signers: Account[] }) { const { multiKey, signers } = args; this.publicKey = multiKey; - this.signers = signers + this.signers = signers; this.signingScheme = SigningScheme.MultiKey; this.accountAddress = this.publicKey.authKey().derivedAddress(); - const bits : number[] = []; + const bits: number[] = []; for (const signer of signers) { bits.push(this.publicKey.getIndex(signer.publicKey)); } - this.signaturesBitmap = this.publicKey.createBitmap({bits}); + this.signaturesBitmap = this.publicKey.createBitmap({ bits }); } - static fromPublicKeysAndSigners( - args: { publicKeys: PublicKey[]; signaturesRequired: number; signers: Account[] } - ): MultiKeyAccount { + static fromPublicKeysAndSigners(args: { + publicKeys: PublicKey[]; + signaturesRequired: number; + signers: Account[]; + }): MultiKeyAccount { const { publicKeys, signaturesRequired, signers } = args; - const multiKey = new MultiKey({publicKeys, signaturesRequired}) - return new MultiKeyAccount({multiKey, signers}) + const multiKey = new MultiKey({ publicKeys, signaturesRequired }); + return new MultiKeyAccount({ multiKey, signers }); } static isMultiKeySigner(account: Account): account is MultiKeyAccount { @@ -74,6 +76,13 @@ export class MultiKeyAccount implements Account { return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } + async waitForProofFetch() { + const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; + await Promise.all( + keylessSigners.filter((signer) => signer.proof instanceof Promise).map( (signer) => signer.proof), + ); + } + /** * Sign the given message with the private key. * @@ -87,7 +96,7 @@ export class MultiKeyAccount implements Account { for (const signer of this.signers) { signatures.push(signer.sign(data)); } - return new MultiSignature({signatures, bitmap: this.signaturesBitmap}); + return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); } signTransaction(transaction: AnyRawTransaction) { @@ -95,7 +104,7 @@ export class MultiKeyAccount implements Account { for (const signer of this.signers) { signatures.push(signer.signTransaction(transaction)); } - return new MultiSignature({signatures, bitmap: this.signaturesBitmap}); + return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); } /** diff --git a/src/api/keyless.ts b/src/api/keyless.ts index f4a008e0f..a8a7bda58 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { EphemeralKeyPair, KeylessAccount } from "../account"; +import { EphemeralKeyPair, KeylessAccount, MultiKeyAccount } from "../account"; import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; @@ -36,8 +36,10 @@ export class Keyless { ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; pepper?: HexInput; - extraFieldKey?: string - }): Promise { + extraFieldKey?: string; + disableConnect?: boolean; + fetchProofAsync?: boolean; + }): Promise { return deriveKeylessAccount({ aptosConfig: this.config, ...args }); } } diff --git a/src/core/crypto/ed25519.ts b/src/core/crypto/ed25519.ts index 63bae5949..f66da572d 100644 --- a/src/core/crypto/ed25519.ts +++ b/src/core/crypto/ed25519.ts @@ -7,7 +7,11 @@ import { Serializable, Serializer } from "../../bcs/serializer"; import { AuthenticationKey } from "../authenticationKey"; import { Hex } from "../hex"; import { HexInput, SigningScheme as AuthenticationKeyScheme } from "../../types"; -import { CKDPriv, deriveKey, HARDENED_OFFSET, isValidHardenedPath, mnemonicToSeed, splitPath } from "./hdKey"; +import { + isValidHardenedPath, + fromDerivationPath as fromDerivationPathInner, + mnemonicToSeed, +} from "./hdKey"; import { PrivateKey } from "./privateKey"; import { AccountPublicKey, VerifySignatureArgs } from "./publicKey"; import { Signature } from "./signature"; @@ -171,29 +175,7 @@ export class Ed25519PrivateKey extends Serializable implements PrivateKey { if (!isValidHardenedPath(path)) { throw new Error(`Invalid derivation path ${path}`); } - return Ed25519PrivateKey.fromDerivationPathInner(path, mnemonicToSeed(mnemonics)); - } - - /** - * A private inner function so we can separate from the main fromDerivationPath() method - * to add tests to verify we create the keys correctly. - * - * @param path the BIP44 path - * @param seed the seed phrase created by the mnemonics - * @param offset the offset used for key derivation, defaults to 0x80000000 - * @returns - */ - private static fromDerivationPathInner(path: string, seed: Uint8Array, offset = HARDENED_OFFSET): Ed25519PrivateKey { - const { key, chainCode } = deriveKey(Ed25519PrivateKey.SLIP_0010_SEED, seed); - - const segments = splitPath(path).map((el) => parseInt(el, 10)); - - // Derive the child key based on the path - const { key: privateKey } = segments.reduce((parentKeys, segment) => CKDPriv(parentKeys, segment + offset), { - key, - chainCode, - }); - return new Ed25519PrivateKey(privateKey); + return new Ed25519PrivateKey(fromDerivationPathInner(path, Ed25519PrivateKey.SLIP_0010_SEED, mnemonicToSeed(mnemonics))); } // endregion diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts index d18b62cfa..7e8f9c872 100644 --- a/src/core/crypto/ephemeral.ts +++ b/src/core/crypto/ephemeral.ts @@ -3,6 +3,7 @@ import { EphemeralPublicKeyVariant, EphemeralSignatureVariant, HexInput } from " import { PublicKey } from "./publicKey"; import { Signature } from "./signature"; import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; +import { Hex } from "../hex"; /** * Represents ephemeral keys and signatures for Aptos Keyless accounts. @@ -119,6 +120,12 @@ export class EphemeralSignature extends Signature { return this.signature.toString(); } + static fromHex(hexInput: HexInput): EphemeralSignature { + const data = Hex.fromHexInput(hexInput); + const deserializer = new Deserializer(data.toUint8Array()); + return EphemeralSignature.deserialize(deserializer); + } + serialize(serializer: Serializer): void { if (this.signature instanceof Ed25519Signature) { serializer.serializeU32AsUleb128(EphemeralSignatureVariant.Ed25519); diff --git a/src/core/crypto/hdKey.ts b/src/core/crypto/hdKey.ts index da3949d07..22e0b99dd 100644 --- a/src/core/crypto/hdKey.ts +++ b/src/core/crypto/hdKey.ts @@ -4,6 +4,7 @@ import { hmac } from "@noble/hashes/hmac"; import { sha512 } from "@noble/hashes/sha512"; import * as bip39 from "@scure/bip39"; +import { HexInput } from "../../types"; export type DerivedKeys = { key: Uint8Array; @@ -15,6 +16,7 @@ export type DerivedKeys = { */ export const APTOS_HARDENED_REGEX = /^m\/44'\/637'\/[0-9]+'\/[0-9]+'\/[0-9]+'?$/; export const APTOS_BIP44_REGEX = /^m\/44'\/637'\/[0-9]+'\/[0-9]+\/[0-9]+$/; +export const APTOS_BIP44_DEFAULT_DERIVATION_PATH = "m/44'/637'/0'/0'/0'"; /** * A list of supported key types and associated seeds @@ -91,6 +93,35 @@ const removeApostrophes = (val: string): string => val.replace("'", ""); */ export const splitPath = (path: string): Array => path.split("/").slice(1).map(removeApostrophes); +/** + * @param path the BIP44 path + * @param seed the seed phrase created by the mnemonics + * @param offset the offset used for key derivation, defaults to 0x80000000 + * @returns + */ +export function fromDerivationPath( + path: string, + hashSeed: HexInput, + seed: Uint8Array, + offset = HARDENED_OFFSET, +): Uint8Array { + if (offset === HARDENED_OFFSET && !isValidHardenedPath(path)) { + throw new Error(`Invalid hardened derivation path ${path}`); + } else if (offset !== HARDENED_OFFSET && !isValidBIP44Path(path)) { + throw new Error(`Invalid derivation path ${path}`); + } + const { key, chainCode } = deriveKey(hashSeed, seed); + + const segments = splitPath(path).map((el) => parseInt(el, 10)); + + // Derive the child key based on the path + const { key: privateKey } = segments.reduce((parentKeys, segment) => CKDPriv(parentKeys, segment + offset), { + key, + chainCode, + }); + return privateKey; +} + /** * Normalizes the mnemonic by removing extra whitespace and making it lowercase * @param mnemonic the mnemonic seed phrase diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 87c244ae3..244c2e427 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -7,19 +7,26 @@ * other namespaces and processes can access these methods without depending on the entire * faucet namespace and without having a dependency cycle error. */ -import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { jwtDecode } from "jwt-decode"; import { bls12_381 as bls } from "@noble/curves/bls12-381"; import { ProjPointType } from "@noble/curves/abstract/weierstrass"; import { AptosConfig } from "../api/aptosConfig"; import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; -import { EPK_HORIZON_SECS, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; +import { + APTOS_BIP44_DEFAULT_DERIVATION_PATH, + EPK_HORIZON_SECS, + EphemeralSignature, + Groth16Zkp, + Hex, + MultiKey, + SignedGroth16Signature, +} from "../core"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; -import { EphemeralKeyPair, KeylessAccount } from "../account"; +import { EphemeralKeyPair, KeylessAccount, MultiKeyAccount } from "../account"; import { PepperFetchResponse, ProverResponse } from "../types/keyless"; -const APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST = "APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST" +const APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST = "APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST"; function stringToUint8Array(str: string): Uint8Array { const encoder = new TextEncoder(); @@ -27,7 +34,9 @@ function stringToUint8Array(str: string): Uint8Array { } const PINKAS_VUF_SECRET_KEY_BASE_AFFINE = bls.G2.hashToCurve( - stringToUint8Array("APTOS_KEYLESS_PEPPER_PINKAS_VUF_SECRET_KEY_BASE"), { DST: APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST }).toAffine(); + stringToUint8Array("APTOS_KEYLESS_PEPPER_PINKAS_VUF_SECRET_KEY_BASE"), + { DST: APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST }, +).toAffine(); function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType { const { jwt, uidKey } = args; @@ -43,14 +52,31 @@ function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType; + pepperBase: Uint8Array; +}): Promise { + const { aptosConfig, pepperInput, pepperBase } = args; + const { data: pubKeyResponse } = await getAptosPepperService({ + aptosConfig, + path: "vrf-pub-key", + originMethod: "getPepper", + }); + const publicKeyFromService = bls.G2.ProjectivePoint.fromHex(pubKeyResponse.vrf_public_key_hex_string); + return bls.verifyShortSignature(pepperBase, pepperInput, publicKeyFromService); +} + export async function getPepper(args: { aptosConfig: AptosConfig; jwt: string; ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; + derivationPath?: string; verify?: boolean; }): Promise { const { aptosConfig, jwt, ephemeralKeyPair, uidKey, verify } = args; + let { derivationPath } = args; const body = { jwt_b64: jwt, @@ -59,9 +85,7 @@ export async function getPepper(args: { epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, }; - // const jsonString = JSON.stringify(body); - - // console.log(jsonString); + // console.log(JSON.stringify(body)); const { data } = await postAptosPepperService({ aptosConfig, path: "fetch", @@ -72,13 +96,7 @@ export async function getPepper(args: { const pepperBase = Hex.fromHexInput(data.signature).toUint8Array(); if (verify) { - const { data: pubKeyResponse } = await getAptosPepperService({ - aptosConfig, - path: "vrf-pub-key", - originMethod: "getPepper", - }); - const publicKeyFromService = bls.G2.ProjectivePoint.fromHex(pubKeyResponse.vrf_public_key_hex_string); - const pepperVerified = bls.verifyShortSignature(pepperBase, getPepperInput(args), publicKeyFromService); + const pepperVerified = verifyPepperBase({ aptosConfig, pepperBase, pepperInput: getPepperInput(args) }); if (!pepperVerified) { throw new Error("Unable to verify"); } @@ -86,16 +104,15 @@ export async function getPepper(args: { // This takes the BLS VUF H(m)^sk and transforms it into a Pinkas VUF e(H(m), g_3^sk), where g_3 is the base of the secret key (computed pseudo-randomly via hash-to-curve). // This gives us the freedom of either decentralizing the pepper service as a BLS-based MPC or on top of the validators, by reusing the Pinkas WVUF-based randomness infrastructure. const newPepperBase = bls.pairing( - bls.G1.ProjectivePoint.fromHex(pepperBase), - bls.G2.ProjectivePoint.fromAffine(PINKAS_VUF_SECRET_KEY_BASE_AFFINE) + bls.G1.ProjectivePoint.fromHex(pepperBase), + bls.G2.ProjectivePoint.fromAffine(PINKAS_VUF_SECRET_KEY_BASE_AFFINE), ); - const hash = sha3Hash.create(); - hash.update(bls.fields.Fp12.toBytes(newPepperBase)); - const hashDigest = hash.digest(); - - const pepper = Hex.fromHexInput(hashDigest).toUint8Array().slice(0, 31); - return pepper; + if (derivationPath === undefined) { + derivationPath = APTOS_BIP44_DEFAULT_DERIVATION_PATH; + } + const pepper = KeylessAccount.fromDerivationPath(derivationPath, bls.fields.Fp12.toBytes(newPepperBase)); + return pepper.slice(0, 31); } export async function getProof(args: { @@ -124,14 +141,7 @@ export async function getProof(args: { uid_key: uidKey || "sub", }; - // const jsonString = JSON.stringify(json); - - // console.log(jsonString); - - const { data } = await postAptosProvingService< - any, - ProverResponse - >({ + const { data } = await postAptosProvingService({ aptosConfig, path: "prove", body: json, @@ -145,7 +155,12 @@ export async function getProof(args: { b: proofPoints.b, c: proofPoints.c, }); - const signedProof = new SignedGroth16Signature({ proof, extraField }); + + const signedProof = new SignedGroth16Signature({ + proof, + extraField, + trainingWheelsSignature: EphemeralSignature.fromHex(data.training_wheels_signature), + }); return signedProof; } @@ -156,14 +171,35 @@ export async function deriveKeylessAccount(args: { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; -}): Promise { - let { pepper } = args; + disableConnect?: boolean; + fetchProofAsync?: boolean; +}): Promise { + const { fetchProofAsync } = args; + let { pepper, disableConnect } = args; + + if (pepper || disableConnect) { + disableConnect = true; + } if (pepper === undefined) { pepper = await getPepper(args); } else if (Hex.fromHexInput(pepper).toUint8Array().length !== 31) { throw new Error("Pepper needs to be 31 bytes"); } - const proof = await getProof({ ...args, pepper }); - return KeylessAccount.fromJWTAndProof({ ...args, proof, pepper }); + const proofPromise = getProof({ ...args, pepper }); + const proof = fetchProofAsync ? proofPromise : await proofPromise; + + const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proofFetcherOrData: proof, pepper }); + + if (disableConnect === true) { + return keylessAccount; + } + + const aptosConnectPublicKey = keylessAccount.deriveAptosConnectPublicKey(); + + const multiKey = new MultiKey({ + publicKeys: [keylessAccount.publicKey, aptosConnectPublicKey], + signaturesRequired: 1, + }); + return new MultiKeyAccount({ multiKey, signers: [keylessAccount] }); } diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 1716ea84e..0ad16b7ea 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -8,7 +8,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { MoveVector, U8 } from "../bcs"; import { postAptosFullNode } from "../client"; -import { Account } from "../account"; +import { Account, KeylessAccount, MultiKeyAccount } from "../account"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; import { PrivateKey } from "../core/crypto"; import { AccountAuthenticator } from "../transactions/authenticator/account"; @@ -280,6 +280,9 @@ export async function signAndSubmitTransaction(args: { transaction: AnyRawTransaction; }): Promise { const { aptosConfig, signer, transaction } = args; + if (signer instanceof KeylessAccount || signer instanceof MultiKeyAccount) { + await signer.waitForProofFetch(); + } const authenticator = signTransaction({ signer, transaction }); return submitTransaction({ aptosConfig, diff --git a/src/types/keyless.ts b/src/types/keyless.ts index 83d533a4e..81d8e917d 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -1,2 +1,6 @@ -export type ProverResponse = { proof: { a: string; b: string; c: string }; public_inputs_hash: string }; -export type PepperFetchResponse = { signature: string }; \ No newline at end of file +export type ProverResponse = { + proof: { a: string; b: string; c: string }; + public_inputs_hash: string; + training_wheels_signature: string; +}; +export type PepperFetchResponse = { signature: string }; diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index 3aa60fc40..c0296f61a 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -26,17 +26,17 @@ export const NetworkToFaucetAPI: Record = { }; export const NetworkToPepperAPI: Record = { - mainnet: "https://pepper.keyless.mainnet.aptoslabs.com/v0", - testnet: "https://pepper.keyless.testnet.aptoslabs.com/v0", - devnet: "https://pepper.keyless.devnet.aptoslabs.com/v0", - local: "https://pepper.keyless.devnet.aptoslabs.com/v0", + mainnet: "mainnet not yet ready, requires sdk upgrade", + testnet: "https://api.testnet.aptoslabs.com/keyless/pepper/v0", + devnet: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", + local: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", }; export const NetworkToProverAPI: Record = { - mainnet: "https://prover.keyless.mainnet.aptoslabs.com/v0", - testnet: "https://prover.keyless.testnet.aptoslabs.com/v0", - devnet: "https://prover.keyless.devnet.aptoslabs.com/v0", - local: "https://prover.keyless.devnet.aptoslabs.com/v0", + mainnet: "mainnet not yet ready, requires sdk upgrade", + testnet: "https://api.testnet.aptoslabs.com/keyless/prover/v0", + devnet: "https://api.devnet.aptoslabs.com/keyless/prover/v0", + local: "https://api.devnet.aptoslabs.com/keyless/prover/v0", }; export enum Network { diff --git a/src/version.ts b/src/version.ts index a4fd53523..f6b70dfff 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.10.0-zeta.3"; +export const VERSION = "1.10.0-zeta.4"; From e8457ba6772194e62206743423e9097e94be1807 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 15 Apr 2024 22:04:06 -0400 Subject: [PATCH 018/136] 1.10.0-zeta.6 --- package.json | 2 +- src/api/keyless.ts | 52 +++++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index fbc3c6ec9..135964382 100644 --- a/package.json +++ b/package.json @@ -89,5 +89,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.10.0-zeta.5" + "version": "1.10.0-zeta.6" } diff --git a/src/api/keyless.ts b/src/api/keyless.ts index a8a7bda58..9f2d7880e 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,11 +1,28 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { EphemeralKeyPair, KeylessAccount, MultiKeyAccount } from "../account"; +import { Account, EphemeralKeyPair, KeylessAccount, MultiKeyAccount } from "../account"; import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; +interface BaseDeriveKeylessAccountArgs { + jwt: string; + ephemeralKeyPair: EphemeralKeyPair; + uidKey?: string; + pepper?: HexInput; + extraFieldKey?: string; + fetchProofAsync?: boolean; +} + +interface DeriveKeylessAccountArgs extends BaseDeriveKeylessAccountArgs { + disableConnect: true; +} + +interface DeriveKeylessAccountWithConnectArgs extends BaseDeriveKeylessAccountArgs { + disableConnect?: boolean; +} + /** * A class to query all `OIDB` related queries on Aptos. */ @@ -22,24 +39,17 @@ export class Keyless { return getPepper({ aptosConfig: this.config, ...args }); } - /** - * TODO - * - * @param args.jwt jwt token - * @param args.ephemeralKeyPair - * @param args.uidKey - * @param args.pepper - * @returns - */ - async deriveKeylessAccount(args: { - jwt: string; - ephemeralKeyPair: EphemeralKeyPair; - uidKey?: string; - pepper?: HexInput; - extraFieldKey?: string; - disableConnect?: boolean; - fetchProofAsync?: boolean; - }): Promise { - return deriveKeylessAccount({ aptosConfig: this.config, ...args }); - } + async deriveKeylessAccount(args: DeriveKeylessAccountArgs): Promise; + async deriveKeylessAccount(args: DeriveKeylessAccountWithConnectArgs): Promise; + async deriveKeylessAccount(args: { + jwt: string; + ephemeralKeyPair: EphemeralKeyPair; + uidKey?: string; + pepper?: HexInput; + extraFieldKey?: string; + disableConnect?: boolean; + fetchProofAsync?: boolean; + }): Promise { + return deriveKeylessAccount({ aptosConfig: this.config, ...args }); + } } From 5db18ed857edf3ca394db2c3f3e67817ef516fbc Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 22 Apr 2024 18:49:18 -0400 Subject: [PATCH 019/136] fix build --- src/internal/transactionSubmission.ts | 1 - src/transactions/transactionBuilder/transactionBuilder.ts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index ebae60970..5977432e1 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -18,7 +18,6 @@ import { generateTransactionPayload, generateSignedTransactionForSimulation, generateSignedTransaction, - generateTransactionPayloadWithABI, } from "../transactions/transactionBuilder/transactionBuilder"; import { InputGenerateTransactionData, diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 497528d16..a779f4646 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -6,6 +6,7 @@ * It holds different operations to generate a transaction payload, a raw transaction, * and a signed transaction that can be simulated, signed and submitted to chain. */ +import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; From 3fdf8229229d3a019c3599d0c7b5e825dd0be80d Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 22 Apr 2024 19:01:27 -0400 Subject: [PATCH 020/136] remove tweet nacl --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 5f108da47..1efa4f0ae 100644 --- a/package.json +++ b/package.json @@ -57,8 +57,7 @@ "form-data": "^4.0.0", "jose": "^5.1.3", "jwt-decode": "^4.0.0", - "poseidon-lite": "^0.2.0", - "tweetnacl": "^1.0.3" + "poseidon-lite": "^0.2.0" }, "devDependencies": { "@aptos-labs/aptos-cli": "^0.1.2", From 57b6fb1107dba2385e918a173e3d1e0ae208fd37 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 22 Apr 2024 19:02:29 -0400 Subject: [PATCH 021/136] fix example --- examples/typescript/keyless.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index f8466e015..074c1c7d5 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -111,7 +111,7 @@ const example = async () => { console.log(`Alice's keyless account address is: ${alice.accountAddress}`); console.log(`Alice's pk is: ${aliceEphem.privateKey}`); console.log(`Alice's nonce is: ${aliceEphem.nonce}`); - console.log(`Alice's zkid is: ${alice.publicKey.addressSeed}`); + // console.log(`Alice's zkid is: ${alice.publicKey.addressSeed}`); // console.log(`Alice's pk is: ${aliceEphem.privateKey}`); console.log(`Bob's address is: ${bob.accountAddress}`); From 89c762cd96b2e4136135d6673de2568e50d76a46 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 06:45:55 -0400 Subject: [PATCH 022/136] 1.13.0-zeta.1 --- examples/typescript/keyless.ts | 5 +++-- package.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 074c1c7d5..5b5fba44f 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -55,7 +55,7 @@ const example = async () => { const aptos = new Aptos(config); const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryDateSecs = BigInt(1718911224); + const expiryDateSecs = BigInt(1721397501); const blinder = new Uint8Array(31); for (let i = 0; i < blinder.length; i += 1) { blinder[i] = 0; @@ -103,7 +103,8 @@ const example = async () => { const alice = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair: aliceEphem, - // pepper: "4c000000000000000000000000000000000000000000000000000000000000", + pepper: "00000000000000000000000000000000000000000000000000000000000000", + disableConnect: true, // extraFieldKey: "family_name" }); diff --git a/package.json b/package.json index 1efa4f0ae..31533ed1b 100644 --- a/package.json +++ b/package.json @@ -90,5 +90,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.13.0-zeta.0" + "version": "1.13.0-zeta.1" } From 0e54cc9bcc6f69a183e2a38fe01ca8eb34cae9ce Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 07:15:54 -0400 Subject: [PATCH 023/136] add accounts --- src/account/Account.ts | 241 ++++++++++++++++++++++++++++++++ src/account/Ed25519Account.ts | 94 +++++++++++++ src/account/EphemeralKeyPair.ts | 78 +++++++++++ src/account/KeylessAccount.ts | 230 ++++++++++++++++++++++++++++++ src/account/MultiKeyAccount.ts | 121 ++++++++++++++++ src/account/SingleKeyAccount.ts | 126 +++++++++++++++++ src/account/index.ts | 6 + 7 files changed, 896 insertions(+) create mode 100644 src/account/Account.ts create mode 100644 src/account/Ed25519Account.ts create mode 100644 src/account/EphemeralKeyPair.ts create mode 100644 src/account/KeylessAccount.ts create mode 100644 src/account/MultiKeyAccount.ts create mode 100644 src/account/SingleKeyAccount.ts create mode 100644 src/account/index.ts diff --git a/src/account/Account.ts b/src/account/Account.ts new file mode 100644 index 000000000..6f26370f1 --- /dev/null +++ b/src/account/Account.ts @@ -0,0 +1,241 @@ +import type { AccountAuthenticator } from "../transactions/authenticator/account"; +import { HexInput, SigningScheme, SigningSchemeInput } from "../types"; +import type { AccountAddress, AccountAddressInput } from "../core/accountAddress"; +import { AuthenticationKey } from "../core/authenticationKey"; +import { AccountPublicKey, Ed25519PrivateKey, PrivateKey, Signature, VerifySignatureArgs } from "../core/crypto"; +import { Ed25519Account } from "./Ed25519Account"; +import { SingleKeyAccount } from "./SingleKeyAccount"; +import { AnyRawTransaction } from "../transactions/types"; + +/** + * Arguments for creating an `Ed25519Account` from an `Ed25519PrivateKey`. + * This is the default input type when passing an `Ed25519PrivateKey`. + * In order to use the SingleKey authentication scheme, `legacy` needs to be explicitly set to false. + */ +export interface CreateEd25519AccountFromPrivateKeyArgs { + privateKey: Ed25519PrivateKey; + address?: AccountAddressInput; + legacy?: true; +} + +/** + * Arguments for creating an `SingleKeyAccount` from an `Ed25519PrivateKey`. + * The `legacy` argument needs to be explicitly set to false in order to + * use the `SingleKey` authentication scheme. + */ +export interface CreateEd25519SingleKeyAccountFromPrivateKeyArgs { + privateKey: Ed25519PrivateKey; + address?: AccountAddressInput; + legacy: false; +} + +/** + * Arguments for creating an `SingleKeyAccount` from any supported private key + * that is not an `Ed25519PrivateKey`. + * The `legacy` argument defaults to false and cannot be explicitly set to true. + */ +export interface CreateSingleKeyAccountFromPrivateKeyArgs { + privateKey: Exclude; + address?: AccountAddressInput; + legacy?: false; +} + +/** + * Arguments for creating an opaque `Account` from any supported private key. + * This is used when the private key type is not known at compilation time. + */ +export interface CreateAccountFromPrivateKeyArgs { + privateKey: PrivateKey; + address?: AccountAddressInput; + legacy?: boolean; +} + +/** + * Arguments for generating an `Ed25519Account`. + * This is the input type used by default. + */ +export interface GenerateEd25519AccountArgs { + scheme?: SigningSchemeInput.Ed25519; + legacy?: true; +} + +/** + * Arguments for generating an `SingleKeyAccount` with ah underlying `Ed25519PrivateKey`. + * The `legacy` argument needs to be explicitly set to false, + * otherwise an `Ed25519Account` will be returned instead. + */ +export interface GenerateEd25519SingleKeyAccountArgs { + scheme?: SigningSchemeInput.Ed25519; + legacy: false; +} + +/** + * Arguments for generating an `SingleKeyAccount` with any supported private key + * that is not an `Ed25519PrivateKey`. + * The `legacy` argument defaults to false and cannot be explicitly set to true. + */ +export interface GenerateSingleKeyAccountArgs { + scheme: Exclude; + legacy?: false; +} + +/** + * Arguments for generating an opaque `Account`. + * This is used when the input signature scheme is not known at compilation time. + */ +export interface GenerateAccountArgs { + scheme?: SigningSchemeInput; + legacy?: boolean; +} + +/** + * Arguments for deriving a private key from a mnemonic phrase and a BIP44 path. + */ +export interface PrivateKeyFromDerivationPathArgs { + path: string; + mnemonic: string; +} + +/** + * Interface for a generic Aptos account. + * + * The interface is defined as abstract class to provide a single entrypoint for account generation, + * either through `Account.generate()` or `Account.fromDerivationPath`. + * Despite this being an abstract class, it should be treated as an interface and enforced using + * the `implements` keyword. + * + * Note: Generating an account instance does not create the account on-chain. + */ +export abstract class Account { + /** + * Public key associated with the account + */ + abstract readonly publicKey: AccountPublicKey; + + /** + * Account address associated with the account + */ + abstract readonly accountAddress: AccountAddress; + + /** + * Signing scheme used to sign transactions + */ + abstract signingScheme: SigningScheme; + + /** + * Derives an account from a randomly generated private key. + * @param args.scheme The signature scheme to use, to generate the private key + * @param args.legacy Whether to use a legacy authentication scheme, when applicable + * @returns An account compatible with the provided signature scheme + */ + static generate(args?: GenerateEd25519AccountArgs): Ed25519Account; + static generate(args: GenerateEd25519SingleKeyAccountArgs): SingleKeyAccount; + static generate(args: GenerateSingleKeyAccountArgs): SingleKeyAccount; + static generate(args: GenerateAccountArgs): Account; + static generate(args: GenerateAccountArgs = {}) { + const { scheme = SigningSchemeInput.Ed25519, legacy = true } = args; + if (scheme === SigningSchemeInput.Ed25519 && legacy) { + return Ed25519Account.generate(); + } + return SingleKeyAccount.generate({ scheme }); + } + + /** + * Creates an account from the provided private key. + * + * @param args.privateKey a valid private key + * @param args.address the account's address. If not provided, it will be derived from the public key. + * @param args.legacy Whether to use a legacy authentication scheme, when applicable + */ + static fromPrivateKey(args: CreateEd25519AccountFromPrivateKeyArgs): Ed25519Account; + static fromPrivateKey(args: CreateEd25519SingleKeyAccountFromPrivateKeyArgs): SingleKeyAccount; + static fromPrivateKey(args: CreateSingleKeyAccountFromPrivateKeyArgs): SingleKeyAccount; + static fromPrivateKey(args: CreateAccountFromPrivateKeyArgs): Account; + static fromPrivateKey(args: CreateAccountFromPrivateKeyArgs) { + const { privateKey, address, legacy = true } = args; + if (privateKey instanceof Ed25519PrivateKey && legacy) { + return new Ed25519Account({ + privateKey, + address, + }); + } + return new SingleKeyAccount({ privateKey, address }); + } + + /** + * @deprecated use `fromPrivateKey` instead. + * Instantiates an account given a private key and a specified account address. + * This is primarily used to instantiate an `Account` that has had its authentication key rotated. + * + * @param args.privateKey PrivateKey - the underlying private key for the account + * @param args.address AccountAddress - The account address the `Account` will sign for + * @param args.legacy optional. If set to false, the keypair generated is a Unified keypair. Defaults + * to generating a Legacy Ed25519 keypair + * + * @returns Account + */ + static fromPrivateKeyAndAddress(args: CreateAccountFromPrivateKeyArgs) { + return this.fromPrivateKey(args); + } + + /** + * Derives an account with bip44 path and mnemonics + * + * @param args.scheme The signature scheme to derive the private key with + * @param args.path the BIP44 derive hardened path (e.g. m/44'/637'/0'/0'/0') for Ed25519, + * or non-hardened path (e.g. m/44'/637'/0'/0/0) for secp256k1 + * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki} + * @param args.mnemonic the mnemonic seed phrase of the account + */ + static fromDerivationPath(args: GenerateEd25519AccountArgs & PrivateKeyFromDerivationPathArgs): Ed25519Account; + static fromDerivationPath( + args: GenerateEd25519SingleKeyAccountArgs & PrivateKeyFromDerivationPathArgs, + ): SingleKeyAccount; + static fromDerivationPath(args: GenerateSingleKeyAccountArgs & PrivateKeyFromDerivationPathArgs): SingleKeyAccount; + static fromDerivationPath(args: GenerateAccountArgs & PrivateKeyFromDerivationPathArgs): Account; + static fromDerivationPath(args: GenerateAccountArgs & PrivateKeyFromDerivationPathArgs) { + const { scheme = SigningSchemeInput.Ed25519, mnemonic, path, legacy = true } = args; + if (scheme === SigningSchemeInput.Ed25519 && legacy) { + return Ed25519Account.fromDerivationPath({ mnemonic, path }); + } + return SingleKeyAccount.fromDerivationPath({ scheme, mnemonic, path }); + } + + /** + * @deprecated use `publicKey.authKey()` instead. + * This key enables account owners to rotate their private key(s) + * associated with the account without changing the address that hosts their account. + * See here for more info: {@link https://aptos.dev/concepts/accounts#single-signer-authentication} + * + * @param args.publicKey PublicKey - public key of the account + * @returns The authentication key for the associated account + */ + static authKey(args: { publicKey: AccountPublicKey }): AuthenticationKey { + const { publicKey } = args; + return publicKey.authKey(); + } + + /** + * Sign a transaction using the available signing capabilities. + * @param transaction the raw transaction + * @return the AccountAuthenticator containing the signature og the transaction, together with the account's public key + */ + abstract signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; + + /** + * Sign the given message with the private key. + * @param message in HexInput format + * @returns AccountSignature + */ + abstract sign(message: HexInput): Signature; + + abstract signTransaction(transaction: AnyRawTransaction): Signature; + + /** + * @param args.message raw message data in HexInput format + * @param args.signature signed message signature + */ + verifySignature(args: VerifySignatureArgs): boolean { + return this.publicKey.verifySignature(args); + } +} diff --git a/src/account/Ed25519Account.ts b/src/account/Ed25519Account.ts new file mode 100644 index 000000000..ec7bc6c4c --- /dev/null +++ b/src/account/Ed25519Account.ts @@ -0,0 +1,94 @@ +import { AccountAuthenticatorEd25519 } from "../transactions/authenticator/account"; +import { HexInput, SigningScheme } from "../types"; +import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; +import { Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature } from "../core/crypto"; +import type { Account } from "./Account"; +import { AnyRawTransaction } from "../transactions/types"; +import { generateSigningMessageForTransaction } from "../transactions/transactionBuilder/signingMessage"; + +export interface Ed25519SignerConstructorArgs { + privateKey: Ed25519PrivateKey; + address?: AccountAddressInput; +} + +export interface Ed25519SignerFromDerivationPathArgs { + path: string; + mnemonic: string; +} + +export interface VerifyEd25519SignatureArgs { + message: HexInput; + signature: Ed25519Signature; +} + +/** + * Signer implementation for the Ed25519 authentication scheme. + * This extends an {@link Ed25519Account} by adding signing capabilities through an {@link Ed25519PrivateKey}. + * + * Note: Generating a signer instance does not create the account on-chain. + */ +export class Ed25519Account implements Account { + /** + * Private key associated with the account + */ + readonly privateKey: Ed25519PrivateKey; + + readonly publicKey: Ed25519PublicKey; + + readonly accountAddress: AccountAddress; + + readonly signingScheme = SigningScheme.Ed25519; + + // region Constructors + + constructor(args: Ed25519SignerConstructorArgs) { + const { privateKey, address } = args; + this.privateKey = privateKey; + this.publicKey = privateKey.publicKey(); + this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); + } + + /** + * Derives a signer from a randomly generated private key + */ + static generate() { + const privateKey = Ed25519PrivateKey.generate(); + return new Ed25519Account({ privateKey }); + } + + /** + * Derives an account with bip44 path and mnemonics + * + * @param args.path the BIP44 derive hardened path e.g. m/44'/637'/0'/0'/0' + * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki} + * @param args.mnemonic the mnemonic seed phrase of the account + */ + static fromDerivationPath(args: Ed25519SignerFromDerivationPathArgs) { + const { path, mnemonic } = args; + const privateKey = Ed25519PrivateKey.fromDerivationPath(path, mnemonic); + return new Ed25519Account({ privateKey }); + } + + // endregion + + // region Account + + verifySignature(args: VerifyEd25519SignatureArgs): boolean { + return this.publicKey.verifySignature(args); + } + + signWithAuthenticator(transaction: AnyRawTransaction) { + const signature = this.privateKey.sign(generateSigningMessageForTransaction(transaction)); + return new AccountAuthenticatorEd25519(this.publicKey, signature); + } + + sign(message: HexInput) { + return this.privateKey.sign(message); + } + + signTransaction(transaction: AnyRawTransaction) { + return this.sign(generateSigningMessageForTransaction(transaction)) + } + + // endregion +} diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts new file mode 100644 index 000000000..3915ede1a --- /dev/null +++ b/src/account/EphemeralKeyPair.ts @@ -0,0 +1,78 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { randomBytes } from "@noble/hashes/utils"; + + +import { EPK_HORIZON_SECS, Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../core/crypto"; +import { Hex } from "../core/hex"; +import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; +import { HexInput, SigningSchemeInput } from "../types"; + +export class EphemeralKeyPair { + readonly blinder: Uint8Array; + + readonly expiryDateSecs: bigint; + + readonly nonce: string; + + readonly privateKey: PrivateKey; + + readonly publicKey: EphemeralPublicKey; + + constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint; blinder?: HexInput }) { + const { privateKey, expiryDateSecs, blinder } = args; + this.privateKey = privateKey; + this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); + this.expiryDateSecs = expiryDateSecs || BigInt(floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS)); + this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); + this.nonce = this.generateNonce(); + } + + static generate(args?: {scheme: SigningSchemeInput}): EphemeralKeyPair { + let privateKey: PrivateKey; + + switch (args?.scheme) { + case SigningSchemeInput.Ed25519: + default: + privateKey = Ed25519PrivateKey.generate(); + } + + return new EphemeralKeyPair({ privateKey }); + } + + generateNonce(): string { + const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); + fields.push(BigInt(this.expiryDateSecs)) + fields.push(bytesToBigIntLE(this.blinder)) + const nonceHash = poseidonHash(fields); + return nonceHash.toString(); + } + + /** + * Sign the given message with the private key. + * * + * @param data in HexInput format + * @returns EphemeralSignature + */ + sign(data: HexInput): EphemeralSignature { + return new EphemeralSignature(this.privateKey.sign(data)); + } +} + +function generateBlinder(): Uint8Array { + return randomBytes(31); +} + +function currentTimeInSeconds(): number { + return Math.floor(new Date().getTime() / 1000) +} + +function floorToWholeHour(timestampInSeconds: number): number { + const date = new Date(timestampInSeconds * 1000); + // Reset minutes and seconds to zero + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return Math.floor(date.getTime() / 1000); +} diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts new file mode 100644 index 000000000..d4818a960 --- /dev/null +++ b/src/account/KeylessAccount.ts @@ -0,0 +1,230 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { JwtPayload, jwtDecode } from "jwt-decode"; +import { decode } from "base-64"; +import { HexInput, SigningScheme } from "../types"; +import { AccountAddress } from "../core/accountAddress"; +import { + AnyPublicKey, + AnySignature, + KeylessPublicKey, + KeylessSignature, + OpenIdSignature, + OpenIdSignatureOrZkProof, + Signature, + SignedGroth16Signature, + computeAddressSeed, + fromDerivationPath as fromDerivationPathInner, +} from "../core/crypto"; + +import { Account } from "./Account"; +import { EphemeralKeyPair } from "./EphemeralKeyPair"; +import { Hex } from "../core/hex"; +import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; +import { Serializer } from "../bcs"; +import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; +import { AnyRawTransaction } from "../transactions/types"; + +function base64UrlDecode(base64Url: string): string { + // Replace base64url-specific characters + const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); + + // Pad the string with '=' characters if needed + const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); + + // Decode the base64 string using the base-64 library + const decodedString = decode(paddedBase64); + + return decodedString; +} + +export class KeylessAccount implements Account { + static readonly PEPPER_LENGTH: number = 31; + + static readonly SLIP_0010_SEED: string = "32 bytes"; + + static readonly APTOS_CONNECT_CLIENT_ID: string = + "734998116548-ib6ircv72o1b6l0no9ol4spnnkr8gm69.apps.googleusercontent.com"; + + publicKey: KeylessPublicKey; + + ephemeralKeyPair: EphemeralKeyPair; + + uidKey: string; + + uidVal: string; + + aud: string; + + pepper: Uint8Array; + + accountAddress: AccountAddress; + + proof: SignedGroth16Signature | Promise; + + signingScheme: SigningScheme; + + jwt: string; + + constructor(args: { + address?: AccountAddress; + ephemeralKeyPair: EphemeralKeyPair; + iss: string; + uidKey: string; + uidVal: string; + aud: string; + pepper: HexInput; + proofFetcherOrData: Promise | SignedGroth16Signature; + jwt: string; + }) { + const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofFetcherOrData, jwt } = args; + this.ephemeralKeyPair = ephemeralKeyPair; + const addressSeed = computeAddressSeed(args); + this.publicKey = new KeylessPublicKey(iss, addressSeed); + this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); + this.uidKey = uidKey; + this.uidVal = uidVal; + this.aud = aud; + this.jwt = jwt; + if (proofFetcherOrData instanceof Promise) { + this.proof = proofFetcherOrData; + this.initialize(proofFetcherOrData); + } else { + this.proof = proofFetcherOrData; + } + + this.signingScheme = SigningScheme.SingleKey; + const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); + if (pepperBytes.length !== KeylessAccount.PEPPER_LENGTH) { + throw new Error(`Pepper length in bytes should be ${KeylessAccount.PEPPER_LENGTH}`); + } + this.pepper = pepperBytes; + } + + private async initialize(promise: Promise) { + try { + this.proof = await promise; + } catch (error) { + throw new Error("Failed to fetch proof"); + } + } + + signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { + const raw = deriveTransactionType(transaction); + const signature = new AnySignature(this.sign(raw.bcsToBytes())); + const publicKey = new AnyPublicKey(this.publicKey); + return new AccountAuthenticatorSingleKey(publicKey, signature); + } + + async waitForProofFetch() { + if (this.proof instanceof Promise) { + await this.proof + } + } + + sign(data: HexInput): Signature { + const { expiryDateSecs } = this.ephemeralKeyPair; + const currentTimeInSeconds = Math.floor(new Date().getTime() / 1000); + if (expiryDateSecs < currentTimeInSeconds) { + throw new Error("Ephemeral key pair is expired."); + } + if (this.proof instanceof Promise) { + throw new Error("Failed to fetch proof."); + } + const jwtHeader = this.jwt.split(".")[0]; + const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + + const serializer = new Serializer(); + serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()); + serializer.serializeOption(this.proof.proof); + const signMess = generateSigningMessage(serializer.toUint8Array(), "TransactionAndProof"); + + const ephemeralSignature = this.ephemeralKeyPair.sign(signMess); + + return new KeylessSignature({ + jwtHeader: base64UrlDecode(jwtHeader), + openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), + expiryDateSecs, + ephemeralPublicKey, + ephemeralSignature, + }); + } + + signTransaction(transaction: AnyRawTransaction): Signature { + const raw = deriveTransactionType(transaction); + return this.sign(raw.bcsToBytes()); + } + + signWithOpenIdSignature(data: HexInput): Signature { + const [jwtHeader, jwtPayload, jwtSignature] = this.jwt.split("."); + const openIdSig = new OpenIdSignature({ + jwtSignature, + jwtPayloadJson: jwtPayload, + uidKey: this.uidKey, + epkBlinder: this.ephemeralKeyPair.blinder, + pepper: this.pepper, + }); + + const { expiryDateSecs } = this.ephemeralKeyPair; + const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + const ephemeralSignature = this.ephemeralKeyPair.sign(data); + return new KeylessSignature({ + jwtHeader, + openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(openIdSig), + expiryDateSecs, + ephemeralPublicKey, + ephemeralSignature, + }); + } + + deriveAptosConnectPublicKey(): KeylessPublicKey { + const { uidKey, uidVal, pepper } = this; + const { iss } = this.publicKey; + const addressSeed = computeAddressSeed({ + uidKey, + uidVal, + aud: KeylessAccount.APTOS_CONNECT_CLIENT_ID, + pepper, + }); + return new KeylessPublicKey(iss, addressSeed); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this + verifySignature(args: { message: HexInput; signature: Signature }): boolean { + return true; + } + + static fromJWTAndProof(args: { + proofFetcherOrData: Promise | SignedGroth16Signature; + jwt: string; + ephemeralKeyPair: EphemeralKeyPair; + pepper: HexInput; + uidKey?: string; + }): KeylessAccount { + const { proofFetcherOrData, jwt, ephemeralKeyPair, pepper } = args; + const uidKey = args.uidKey ?? "sub"; + + const jwtPayload = jwtDecode(jwt); + const iss = jwtPayload.iss!; + if (typeof jwtPayload.aud !== "string") { + throw new Error("aud was not found or an array of values"); + } + const aud = jwtPayload.aud!; + const uidVal = jwtPayload[uidKey]; + return new KeylessAccount({ + proofFetcherOrData, + ephemeralKeyPair, + iss, + uidKey, + uidVal, + aud, + pepper, + jwt, + }); + } + + static fromDerivationPath(path: string, seed: Uint8Array): Uint8Array { + return fromDerivationPathInner(path, KeylessAccount.SLIP_0010_SEED, seed); + } +} diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts new file mode 100644 index 000000000..8ff9e6ff2 --- /dev/null +++ b/src/account/MultiKeyAccount.ts @@ -0,0 +1,121 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { Account } from "./Account"; +import { MultiKey, MultiSignature, PublicKey, Signature } from "../core/crypto"; +import { AccountAddress } from "../core/accountAddress"; +import { HexInput, SigningScheme } from "../types"; +import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; +import { AnyRawTransaction } from "../transactions/types"; +import { KeylessAccount } from "./KeylessAccount"; + +export class MultiKeyAccount implements Account { + /** + * Public key associated with the account + */ + readonly publicKey: MultiKey; + + /** + * Account address associated with the account + */ + readonly accountAddress: AccountAddress; + + /** + * Signing scheme used to sign transactions + */ + readonly signingScheme: SigningScheme; + + signers: Account[]; + + signaturesBitmap: Uint8Array; + + /** + * constructor for Account + * + * Need to update this to use the new crypto library if new schemes are added. + * + * @param args.privateKey PrivateKey - private key of the account + * @param args.address AccountAddress - address of the account + * @param args.legacy optional. If set to false, the keypair authentication keys will be derived with a unified scheme. + * Defaults to deriving an authentication key with the legacy scheme. + * + * This method is private because it should only be called by the factory static methods. + * @returns Account + */ + constructor(args: { multiKey: MultiKey; signers: Account[] }) { + const { multiKey, signers } = args; + + this.publicKey = multiKey; + this.signers = signers; + this.signingScheme = SigningScheme.MultiKey; + + this.accountAddress = this.publicKey.authKey().derivedAddress(); + + const bits: number[] = []; + for (const signer of signers) { + bits.push(this.publicKey.getIndex(signer.publicKey)); + } + this.signaturesBitmap = this.publicKey.createBitmap({ bits }); + } + + static fromPublicKeysAndSigners(args: { + publicKeys: PublicKey[]; + signaturesRequired: number; + signers: Account[]; + }): MultiKeyAccount { + const { publicKeys, signaturesRequired, signers } = args; + const multiKey = new MultiKey({ publicKeys, signaturesRequired }); + return new MultiKeyAccount({ multiKey, signers }); + } + + static isMultiKeySigner(account: Account): account is MultiKeyAccount { + return account instanceof MultiKeyAccount; + } + + signWithAuthenticator(transaction: AnyRawTransaction) { + return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); + } + + async waitForProofFetch() { + const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; + await Promise.all( + keylessSigners.filter((signer) => signer.proof instanceof Promise).map( (signer) => signer.proof), + ); + } + + /** + * Sign the given message with the private key. + * + * TODO: Add sign transaction or specific types + * + * @param data in HexInput format + * @returns Signature + */ + sign(data: HexInput): MultiSignature { + const signatures = []; + for (const signer of this.signers) { + signatures.push(signer.sign(data)); + } + return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); + } + + signTransaction(transaction: AnyRawTransaction) { + const signatures = []; + for (const signer of this.signers) { + signatures.push(signer.signTransaction(transaction)); + } + return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); + } + + /** + * Verify the given message and signature with the public key. + * + * @param args.message raw message data in HexInput format + * @param args.signature signed message Signature + * @returns + */ + // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars + verifySignature(args: { message: HexInput; signature: Signature }): boolean { + return true; + } +} diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts new file mode 100644 index 000000000..57c94f13e --- /dev/null +++ b/src/account/SingleKeyAccount.ts @@ -0,0 +1,126 @@ +import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; +import { type HexInput, SigningScheme, SigningSchemeInput } from "../types"; +import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; +import { AnyPublicKey, AnySignature, Ed25519PrivateKey, PrivateKey, Secp256k1PrivateKey } from "../core/crypto"; +import type { Account } from "./Account"; +import { generateSigningMessageForTransaction } from "../transactions/transactionBuilder/signingMessage"; +import { AnyRawTransaction } from "../transactions/types"; + +export interface SingleKeySignerConstructorArgs { + privateKey: PrivateKey; + address?: AccountAddressInput; +} + +export interface SingleKeySignerGenerateArgs { + scheme?: SigningSchemeInput; +} + +export type SingleKeySignerFromDerivationPathArgs = SingleKeySignerGenerateArgs & { + path: string; + mnemonic: string; +}; + +export interface VerifySingleKeySignatureArgs { + message: HexInput; + signature: AnySignature; +} + +/** + * Signer implementation for the SingleKey authentication scheme. + * This extends a SingleKeyAccount by adding signing capabilities through a valid private key. + * Currently, the only supported signature schemes are Ed25519 and Secp256k1. + * + * Note: Generating a signer instance does not create the account on-chain. + */ +export class SingleKeyAccount implements Account { + /** + * Private key associated with the account + */ + readonly privateKey: PrivateKey; + + readonly publicKey: AnyPublicKey; + + readonly accountAddress: AccountAddress; + + readonly signingScheme = SigningScheme.SingleKey; + + // region Constructors + + constructor(args: SingleKeySignerConstructorArgs) { + const { privateKey, address } = args; + this.privateKey = privateKey; + this.publicKey = new AnyPublicKey(privateKey.publicKey()); + this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); + } + + /** + * Derives an account from a randomly generated private key. + * Default generation is using an Ed25519 key + * @returns Account with the given signature scheme + */ + static generate(args: SingleKeySignerGenerateArgs = {}) { + const { scheme = SigningSchemeInput.Ed25519 } = args; + let privateKey: PrivateKey; + switch (scheme) { + case SigningSchemeInput.Ed25519: + privateKey = Ed25519PrivateKey.generate(); + break; + case SigningSchemeInput.Secp256k1Ecdsa: + privateKey = Secp256k1PrivateKey.generate(); + break; + default: + throw new Error(`Unsupported signature scheme ${scheme}`); + } + return new SingleKeyAccount({ privateKey }); + } + + /** + * Derives an account with bip44 path and mnemonics, + * Default to using an Ed25519 signature scheme. + * + * @param args.scheme The signature scheme to derive the private key with + * @param args.path the BIP44 derive hardened path (e.g. m/44'/637'/0'/0'/0') for Ed25519, + * or non-hardened path (e.g. m/44'/637'/0'/0/0) for secp256k1 + * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki} + * @param args.mnemonic the mnemonic seed phrase of the account + */ + static fromDerivationPath(args: SingleKeySignerFromDerivationPathArgs) { + const { scheme = SigningSchemeInput.Ed25519, path, mnemonic } = args; + let privateKey: PrivateKey; + switch (scheme) { + case SigningSchemeInput.Ed25519: + privateKey = Ed25519PrivateKey.fromDerivationPath(path, mnemonic); + break; + case SigningSchemeInput.Secp256k1Ecdsa: + privateKey = Secp256k1PrivateKey.fromDerivationPath(path, mnemonic); + break; + default: + throw new Error(`Unsupported signature scheme ${scheme}`); + } + return new SingleKeyAccount({ privateKey }); + } + + // endregion + + // region Account + + verifySignature(args: VerifySingleKeySignatureArgs): boolean { + return this.publicKey.verifySignature(args); + } + + signWithAuthenticator(transaction: AnyRawTransaction) { + const innerSignature = this.sign(generateSigningMessageForTransaction(transaction)); + const signature = new AnySignature(innerSignature); + return new AccountAuthenticatorSingleKey(this.publicKey, signature); + } + + sign(message: HexInput) { + return this.privateKey.sign(message); + } + + signTransaction(transaction: AnyRawTransaction) { + return this.sign(generateSigningMessageForTransaction(transaction)) + } + + // endregion +} diff --git a/src/account/index.ts b/src/account/index.ts new file mode 100644 index 000000000..1c0f72561 --- /dev/null +++ b/src/account/index.ts @@ -0,0 +1,6 @@ +export * from "./Ed25519Account"; +export * from "./Account"; +export * from "./SingleKeyAccount"; +export * from "./KeylessAccount"; +export * from "./EphemeralKeyPair"; +export * from "./MultiKeyAccount"; From 27958b65434620849287e2a6c301e7d06a640a4d Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 07:19:46 -0400 Subject: [PATCH 024/136] separate the signing message --- src/transactions/transactionBuilder/index.ts | 2 + .../transactionBuilder/signingMessage.ts | 75 +++++++++++++++++ .../transactionBuilder/transactionBuilder.ts | 83 +------------------ 3 files changed, 80 insertions(+), 80 deletions(-) create mode 100644 src/transactions/transactionBuilder/signingMessage.ts diff --git a/src/transactions/transactionBuilder/index.ts b/src/transactions/transactionBuilder/index.ts index f512f7969..e6fc29838 100644 --- a/src/transactions/transactionBuilder/index.ts +++ b/src/transactions/transactionBuilder/index.ts @@ -4,3 +4,5 @@ export * from "./helpers"; export * from "./transactionBuilder"; export * from "./remoteAbi"; +export * from "./signingMessage"; + diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts new file mode 100644 index 000000000..1abefe025 --- /dev/null +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -0,0 +1,75 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +/** + * This file handles the transaction creation lifecycle. + * It holds different operations to generate a transaction payload, a raw transaction, + * and a signed transaction that can be simulated, signed and submitted to chain. + */ +import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; +import { + RAW_TRANSACTION_SALT, + RAW_TRANSACTION_WITH_DATA_SALT, +} from "../../utils/const"; +import { + FeePayerRawTransaction, + MultiAgentRawTransaction, + RawTransaction, +} from "../instances"; +import { + AnyRawTransaction, AnyRawTransactionInstance, +} from "../types"; +import { Serializable } from "../../bcs"; + +/** + * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction + * + * @param transaction A aptos transaction type + * + * @returns FeePayerRawTransaction | MultiAgentRawTransaction | RawTransaction + */ +export function deriveTransactionType(transaction: AnyRawTransaction): AnyRawTransactionInstance { + if (transaction.feePayerAddress) { + return new FeePayerRawTransaction( + transaction.rawTransaction, + transaction.secondarySignerAddresses ?? [], + transaction.feePayerAddress, + ); + } + if (transaction.secondarySignerAddresses) { + return new MultiAgentRawTransaction(transaction.rawTransaction, transaction.secondarySignerAddresses); + } + + return transaction.rawTransaction; +} + +export function generateSigningMessage(bytes: Uint8Array, domainSeparator: string): Uint8Array { + const hash = sha3Hash.create(); + + hash.update(`APTOS::${domainSeparator}`); + + const prefix = hash.digest(); + + const body = bytes; + + const mergedArray = new Uint8Array(prefix.length + body.length); + mergedArray.set(prefix); + mergedArray.set(body, prefix.length); + + return mergedArray; +} + +export function generateSigningMessageForSerializable(obj: Serializable): Uint8Array { + return generateSigningMessage(obj.bcsToBytes(), obj.constructor.name); +} + +export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { + const rawTxn = deriveTransactionType(transaction); + if (rawTxn instanceof RawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_SALT); + } if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_WITH_DATA_SALT); + } + throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); +} + diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index bfe87e2a2..c0229bdb8 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -9,20 +9,13 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; -import { Account } from "../../core/account"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; -import { Secp256k1PublicKey, Secp256k1Signature } from "../../core/crypto/secp256k1"; import { getInfo } from "../../internal/account"; import { getLedgerInfo } from "../../internal/general"; import { getGasPriceEstimation } from "../../internal/transaction"; import { NetworkToChainId } from "../../utils/apiEndpoints"; -import { - DEFAULT_MAX_GAS_AMOUNT, - DEFAULT_TXN_EXP_SEC_FROM_NOW, - RAW_TRANSACTION_SALT, - RAW_TRANSACTION_WITH_DATA_SALT, -} from "../../utils/const"; +import { DEFAULT_MAX_GAS_AMOUNT, DEFAULT_TXN_EXP_SEC_FROM_NOW } from "../../utils/const"; import { AccountAuthenticator, AccountAuthenticatorEd25519, @@ -52,7 +45,6 @@ import { SignedTransaction } from "../instances/signedTransaction"; import { AnyRawTransaction, AnyTransactionPayloadInstance, - AnyRawTransactionInstance, EntryFunctionArgumentTypes, InputGenerateMultiAgentRawTransactionArgs, InputGenerateRawTransactionArgs, @@ -76,6 +68,7 @@ import { memoizeAsync } from "../../utils/memoize"; import { getFunctionParts, isScriptDataInput } from "./helpers"; import { SimpleTransaction } from "../instances/simpleTransaction"; import { MultiAgentTransaction } from "../instances/multiAgentTransaction"; +import { deriveTransactionType } from "./signingMessage"; /** * We are defining function signatures, each with its specific input and output. @@ -451,12 +444,7 @@ export function generateSignedTransactionForSimulation(args: InputSimulateTransa export function getAuthenticatorForSimulation(publicKey: PublicKey) { // TODO add support for AnyMultiKey if (publicKey instanceof AnyPublicKey) { - if (publicKey.publicKey instanceof Ed25519PublicKey) { - return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); - } - if (publicKey.publicKey instanceof Secp256k1PublicKey) { - return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Secp256k1Signature(new Uint8Array(64)))); - } + return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); } // legacy code @@ -466,24 +454,6 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { ); } -/** - * Sign a transaction that can later be submitted to chain - * - * @param args.signer The signer account to sign the transaction - * @param args.transaction A aptos transaction type to sign - * - * @return The signer AccountAuthenticator - */ -export function sign(args: { signer: Account; transaction: AnyRawTransaction }): AccountAuthenticator { - const { signer, transaction } = args; - - // get the signing message - const message = generateSigningMessage(transaction); - - // account.signMessage - return signer.signWithAuthenticator(message); -} - /** * Prepare a transaction to be submitted to chain * @@ -565,28 +535,6 @@ export function generateUserTransactionHash(args: InputSubmitTransactionData): s return new Hex(hashValues([TRANSACTION_PREFIX, new Uint8Array([0]), signedTransaction])).toString(); } -/** - * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction - * - * @param transaction A aptos transaction type - * - * @returns FeePayerRawTransaction | MultiAgentRawTransaction | RawTransaction - */ -export function deriveTransactionType(transaction: AnyRawTransaction): AnyRawTransactionInstance { - if (transaction.feePayerAddress) { - return new FeePayerRawTransaction( - transaction.rawTransaction, - transaction.secondarySignerAddresses ?? [], - transaction.feePayerAddress, - ); - } - if (transaction.secondarySignerAddresses) { - return new MultiAgentRawTransaction(transaction.rawTransaction, transaction.secondarySignerAddresses); - } - - return transaction.rawTransaction; -} - /** * Generate a multi signers signed transaction that can be submitted to chain * @@ -636,31 +584,6 @@ export function generateMultiSignersSignedTransaction( ); } -export function generateSigningMessage(transaction: AnyRawTransaction): Uint8Array { - const rawTxn = deriveTransactionType(transaction); - const hash = sha3Hash.create(); - - if (rawTxn instanceof RawTransaction) { - hash.update(RAW_TRANSACTION_SALT); - } else if (rawTxn instanceof MultiAgentRawTransaction) { - hash.update(RAW_TRANSACTION_WITH_DATA_SALT); - } else if (rawTxn instanceof FeePayerRawTransaction) { - hash.update(RAW_TRANSACTION_WITH_DATA_SALT); - } else { - throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); - } - - const prefix = hash.digest(); - - const body = rawTxn.bcsToBytes(); - - const mergedArray = new Uint8Array(prefix.length + body.length); - mergedArray.set(prefix); - mergedArray.set(body, prefix.length); - - return mergedArray; -} - /** * Fetches and caches ABIs with allowing for pass-through on provided ABIs * @param key From f5a226c7ef689e4ded278e5b8368f1b87550fb98 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 07:21:45 -0400 Subject: [PATCH 025/136] add multisig --- src/core/crypto/multiKey.ts | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index c35a94157..cc6e44149 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -139,9 +139,21 @@ export class MultiKey extends AccountPublicKey { return bitmap; } + + getIndex(publicKey: PublicKey): number { + + const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey) + const index = this.publicKeys.findIndex((pk) => pk.toString() === anyPublicKey.toString()); + + if (index !== -1) { + return index; + } + throw new Error("Public key not found in MultiKey"); + + } } -export class MultiKeySignature extends Signature { +export class MultiSignature extends Signature { /** * Number of bytes in the bitmap representing who signed the transaction (32-bits) */ @@ -150,7 +162,7 @@ export class MultiKeySignature extends Signature { /** * Maximum number of Ed25519 signatures supported */ - static MAX_SIGNATURES_SUPPORTED = MultiKeySignature.BITMAP_LEN * 8; + static MAX_SIGNATURES_SUPPORTED = MultiSignature.BITMAP_LEN * 8; /** * The list of underlying Ed25519 signatures @@ -178,8 +190,8 @@ export class MultiKeySignature extends Signature { super(); const { signatures, bitmap } = args; - if (signatures.length > MultiKeySignature.MAX_SIGNATURES_SUPPORTED) { - throw new Error(`The number of signatures cannot be greater than ${MultiKeySignature.MAX_SIGNATURES_SUPPORTED}`); + if (signatures.length > MultiSignature.MAX_SIGNATURES_SUPPORTED) { + throw new Error(`The number of signatures cannot be greater than ${MultiSignature.MAX_SIGNATURES_SUPPORTED}`); } // Make sure that all signatures are normalized to the SingleKey authentication scheme @@ -188,9 +200,9 @@ export class MultiKeySignature extends Signature { ); if (!(bitmap instanceof Uint8Array)) { - this.bitmap = MultiKeySignature.createBitmap({ bits: bitmap }); - } else if (bitmap.length !== MultiKeySignature.BITMAP_LEN) { - throw new Error(`"bitmap" length should be ${MultiKeySignature.BITMAP_LEN}`); + this.bitmap = MultiSignature.createBitmap({ bits: bitmap }); + } else if (bitmap.length !== MultiSignature.BITMAP_LEN) { + throw new Error(`"bitmap" length should be ${MultiSignature.BITMAP_LEN}`); } else { this.bitmap = bitmap; } @@ -226,8 +238,8 @@ export class MultiKeySignature extends Signature { const dupCheckSet = new Set(); bits.forEach((bit: number) => { - if (bit >= MultiKeySignature.MAX_SIGNATURES_SUPPORTED) { - throw new Error(`Cannot have a signature larger than ${MultiKeySignature.MAX_SIGNATURES_SUPPORTED - 1}.`); + if (bit >= MultiSignature.MAX_SIGNATURES_SUPPORTED) { + throw new Error(`Cannot have a signature larger than ${MultiSignature.MAX_SIGNATURES_SUPPORTED - 1}.`); } if (dupCheckSet.has(bit)) { @@ -265,7 +277,7 @@ export class MultiKeySignature extends Signature { serializer.serializeBytes(this.bitmap); } - static deserialize(deserializer: Deserializer): MultiKeySignature { + static deserialize(deserializer: Deserializer): MultiSignature { const bitmap = deserializer.deserializeBytes(); const nSignatures = bitmap.reduce((acc, byte) => acc + bitCount(byte), 0); const signatures: AnySignature[] = []; @@ -273,7 +285,7 @@ export class MultiKeySignature extends Signature { const signature = AnySignature.deserialize(deserializer); signatures.push(signature); } - return new MultiKeySignature({ signatures, bitmap }); + return new MultiSignature({ signatures, bitmap }); } // endregion From 6d6e03a90579df7658a1dc69c878ce2ff7473fae Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 07:25:12 -0400 Subject: [PATCH 026/136] clean up --- src/account/EphemeralKeyPair.ts | 78 -------- src/account/KeylessAccount.ts | 230 ---------------------- src/account/MultiKeyAccount.ts | 8 - src/account/index.ts | 2 - src/transactions/authenticator/account.ts | 17 +- 5 files changed, 6 insertions(+), 329 deletions(-) delete mode 100644 src/account/EphemeralKeyPair.ts delete mode 100644 src/account/KeylessAccount.ts diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts deleted file mode 100644 index 3915ede1a..000000000 --- a/src/account/EphemeralKeyPair.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright © Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -import { randomBytes } from "@noble/hashes/utils"; - - -import { EPK_HORIZON_SECS, Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../core/crypto"; -import { Hex } from "../core/hex"; -import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; -import { HexInput, SigningSchemeInput } from "../types"; - -export class EphemeralKeyPair { - readonly blinder: Uint8Array; - - readonly expiryDateSecs: bigint; - - readonly nonce: string; - - readonly privateKey: PrivateKey; - - readonly publicKey: EphemeralPublicKey; - - constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint; blinder?: HexInput }) { - const { privateKey, expiryDateSecs, blinder } = args; - this.privateKey = privateKey; - this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); - this.expiryDateSecs = expiryDateSecs || BigInt(floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS)); - this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); - this.nonce = this.generateNonce(); - } - - static generate(args?: {scheme: SigningSchemeInput}): EphemeralKeyPair { - let privateKey: PrivateKey; - - switch (args?.scheme) { - case SigningSchemeInput.Ed25519: - default: - privateKey = Ed25519PrivateKey.generate(); - } - - return new EphemeralKeyPair({ privateKey }); - } - - generateNonce(): string { - const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); - fields.push(BigInt(this.expiryDateSecs)) - fields.push(bytesToBigIntLE(this.blinder)) - const nonceHash = poseidonHash(fields); - return nonceHash.toString(); - } - - /** - * Sign the given message with the private key. - * * - * @param data in HexInput format - * @returns EphemeralSignature - */ - sign(data: HexInput): EphemeralSignature { - return new EphemeralSignature(this.privateKey.sign(data)); - } -} - -function generateBlinder(): Uint8Array { - return randomBytes(31); -} - -function currentTimeInSeconds(): number { - return Math.floor(new Date().getTime() / 1000) -} - -function floorToWholeHour(timestampInSeconds: number): number { - const date = new Date(timestampInSeconds * 1000); - // Reset minutes and seconds to zero - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - return Math.floor(date.getTime() / 1000); -} diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts deleted file mode 100644 index d4818a960..000000000 --- a/src/account/KeylessAccount.ts +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright © Aptos Foundation -// SPDX-License-Identifier: Apache-2.0 - -import { JwtPayload, jwtDecode } from "jwt-decode"; -import { decode } from "base-64"; -import { HexInput, SigningScheme } from "../types"; -import { AccountAddress } from "../core/accountAddress"; -import { - AnyPublicKey, - AnySignature, - KeylessPublicKey, - KeylessSignature, - OpenIdSignature, - OpenIdSignatureOrZkProof, - Signature, - SignedGroth16Signature, - computeAddressSeed, - fromDerivationPath as fromDerivationPathInner, -} from "../core/crypto"; - -import { Account } from "./Account"; -import { EphemeralKeyPair } from "./EphemeralKeyPair"; -import { Hex } from "../core/hex"; -import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; -import { Serializer } from "../bcs"; -import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; -import { AnyRawTransaction } from "../transactions/types"; - -function base64UrlDecode(base64Url: string): string { - // Replace base64url-specific characters - const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - - // Pad the string with '=' characters if needed - const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); - - // Decode the base64 string using the base-64 library - const decodedString = decode(paddedBase64); - - return decodedString; -} - -export class KeylessAccount implements Account { - static readonly PEPPER_LENGTH: number = 31; - - static readonly SLIP_0010_SEED: string = "32 bytes"; - - static readonly APTOS_CONNECT_CLIENT_ID: string = - "734998116548-ib6ircv72o1b6l0no9ol4spnnkr8gm69.apps.googleusercontent.com"; - - publicKey: KeylessPublicKey; - - ephemeralKeyPair: EphemeralKeyPair; - - uidKey: string; - - uidVal: string; - - aud: string; - - pepper: Uint8Array; - - accountAddress: AccountAddress; - - proof: SignedGroth16Signature | Promise; - - signingScheme: SigningScheme; - - jwt: string; - - constructor(args: { - address?: AccountAddress; - ephemeralKeyPair: EphemeralKeyPair; - iss: string; - uidKey: string; - uidVal: string; - aud: string; - pepper: HexInput; - proofFetcherOrData: Promise | SignedGroth16Signature; - jwt: string; - }) { - const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofFetcherOrData, jwt } = args; - this.ephemeralKeyPair = ephemeralKeyPair; - const addressSeed = computeAddressSeed(args); - this.publicKey = new KeylessPublicKey(iss, addressSeed); - this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); - this.uidKey = uidKey; - this.uidVal = uidVal; - this.aud = aud; - this.jwt = jwt; - if (proofFetcherOrData instanceof Promise) { - this.proof = proofFetcherOrData; - this.initialize(proofFetcherOrData); - } else { - this.proof = proofFetcherOrData; - } - - this.signingScheme = SigningScheme.SingleKey; - const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); - if (pepperBytes.length !== KeylessAccount.PEPPER_LENGTH) { - throw new Error(`Pepper length in bytes should be ${KeylessAccount.PEPPER_LENGTH}`); - } - this.pepper = pepperBytes; - } - - private async initialize(promise: Promise) { - try { - this.proof = await promise; - } catch (error) { - throw new Error("Failed to fetch proof"); - } - } - - signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { - const raw = deriveTransactionType(transaction); - const signature = new AnySignature(this.sign(raw.bcsToBytes())); - const publicKey = new AnyPublicKey(this.publicKey); - return new AccountAuthenticatorSingleKey(publicKey, signature); - } - - async waitForProofFetch() { - if (this.proof instanceof Promise) { - await this.proof - } - } - - sign(data: HexInput): Signature { - const { expiryDateSecs } = this.ephemeralKeyPair; - const currentTimeInSeconds = Math.floor(new Date().getTime() / 1000); - if (expiryDateSecs < currentTimeInSeconds) { - throw new Error("Ephemeral key pair is expired."); - } - if (this.proof instanceof Promise) { - throw new Error("Failed to fetch proof."); - } - const jwtHeader = this.jwt.split(".")[0]; - const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; - - const serializer = new Serializer(); - serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()); - serializer.serializeOption(this.proof.proof); - const signMess = generateSigningMessage(serializer.toUint8Array(), "TransactionAndProof"); - - const ephemeralSignature = this.ephemeralKeyPair.sign(signMess); - - return new KeylessSignature({ - jwtHeader: base64UrlDecode(jwtHeader), - openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), - expiryDateSecs, - ephemeralPublicKey, - ephemeralSignature, - }); - } - - signTransaction(transaction: AnyRawTransaction): Signature { - const raw = deriveTransactionType(transaction); - return this.sign(raw.bcsToBytes()); - } - - signWithOpenIdSignature(data: HexInput): Signature { - const [jwtHeader, jwtPayload, jwtSignature] = this.jwt.split("."); - const openIdSig = new OpenIdSignature({ - jwtSignature, - jwtPayloadJson: jwtPayload, - uidKey: this.uidKey, - epkBlinder: this.ephemeralKeyPair.blinder, - pepper: this.pepper, - }); - - const { expiryDateSecs } = this.ephemeralKeyPair; - const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; - const ephemeralSignature = this.ephemeralKeyPair.sign(data); - return new KeylessSignature({ - jwtHeader, - openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(openIdSig), - expiryDateSecs, - ephemeralPublicKey, - ephemeralSignature, - }); - } - - deriveAptosConnectPublicKey(): KeylessPublicKey { - const { uidKey, uidVal, pepper } = this; - const { iss } = this.publicKey; - const addressSeed = computeAddressSeed({ - uidKey, - uidVal, - aud: KeylessAccount.APTOS_CONNECT_CLIENT_ID, - pepper, - }); - return new KeylessPublicKey(iss, addressSeed); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this - verifySignature(args: { message: HexInput; signature: Signature }): boolean { - return true; - } - - static fromJWTAndProof(args: { - proofFetcherOrData: Promise | SignedGroth16Signature; - jwt: string; - ephemeralKeyPair: EphemeralKeyPair; - pepper: HexInput; - uidKey?: string; - }): KeylessAccount { - const { proofFetcherOrData, jwt, ephemeralKeyPair, pepper } = args; - const uidKey = args.uidKey ?? "sub"; - - const jwtPayload = jwtDecode(jwt); - const iss = jwtPayload.iss!; - if (typeof jwtPayload.aud !== "string") { - throw new Error("aud was not found or an array of values"); - } - const aud = jwtPayload.aud!; - const uidVal = jwtPayload[uidKey]; - return new KeylessAccount({ - proofFetcherOrData, - ephemeralKeyPair, - iss, - uidKey, - uidVal, - aud, - pepper, - jwt, - }); - } - - static fromDerivationPath(path: string, seed: Uint8Array): Uint8Array { - return fromDerivationPathInner(path, KeylessAccount.SLIP_0010_SEED, seed); - } -} diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 8ff9e6ff2..528e80993 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -7,7 +7,6 @@ import { AccountAddress } from "../core/accountAddress"; import { HexInput, SigningScheme } from "../types"; import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; import { AnyRawTransaction } from "../transactions/types"; -import { KeylessAccount } from "./KeylessAccount"; export class MultiKeyAccount implements Account { /** @@ -76,13 +75,6 @@ export class MultiKeyAccount implements Account { return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } - async waitForProofFetch() { - const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; - await Promise.all( - keylessSigners.filter((signer) => signer.proof instanceof Promise).map( (signer) => signer.proof), - ); - } - /** * Sign the given message with the private key. * diff --git a/src/account/index.ts b/src/account/index.ts index 1c0f72561..87d451aa7 100644 --- a/src/account/index.ts +++ b/src/account/index.ts @@ -1,6 +1,4 @@ export * from "./Ed25519Account"; export * from "./Account"; export * from "./SingleKeyAccount"; -export * from "./KeylessAccount"; -export * from "./EphemeralKeyPair"; export * from "./MultiKeyAccount"; diff --git a/src/transactions/authenticator/account.ts b/src/transactions/authenticator/account.ts index 103fdfc2b..80ce546be 100644 --- a/src/transactions/authenticator/account.ts +++ b/src/transactions/authenticator/account.ts @@ -7,7 +7,7 @@ import { Serializer, Deserializer, Serializable } from "../../bcs"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { MultiEd25519PublicKey, MultiEd25519Signature } from "../../core/crypto/multiEd25519"; -import { MultiKey } from "../../core/crypto/multiKey"; +import { MultiKey, MultiSignature } from "../../core/crypto/multiKey"; import { AccountAuthenticatorVariant } from "../../types"; export abstract class AccountAuthenticator extends Serializable { @@ -149,28 +149,23 @@ export class AccountAuthenticatorSingleKey extends AccountAuthenticator { export class AccountAuthenticatorMultiKey extends AccountAuthenticator { public readonly public_keys: MultiKey; - public readonly signatures: Array; + public readonly signatures: MultiSignature; - public readonly signatures_bitmap: Uint8Array; - - constructor(public_keys: MultiKey, signatures: Array, signatures_bitmap: Uint8Array) { + constructor(public_keys: MultiKey, signatures: MultiSignature) { super(); this.public_keys = public_keys; this.signatures = signatures; - this.signatures_bitmap = signatures_bitmap; } serialize(serializer: Serializer): void { serializer.serializeU32AsUleb128(AccountAuthenticatorVariant.MultiKey); this.public_keys.serialize(serializer); - serializer.serializeVector(this.signatures); - serializer.serializeBytes(this.signatures_bitmap); + this.signatures.serialize(serializer); } static load(deserializer: Deserializer): AccountAuthenticatorMultiKey { const public_keys = MultiKey.deserialize(deserializer); - const signatures = deserializer.deserializeVector(AnySignature); - const signatures_bitmap = deserializer.deserializeBytes(); - return new AccountAuthenticatorMultiKey(public_keys, signatures, signatures_bitmap); + const signatures = MultiSignature.deserialize(deserializer); + return new AccountAuthenticatorMultiKey(public_keys, signatures); } } From 33259cba2601162a9750c8b00df2f1371be6d3ec Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 07:35:53 -0400 Subject: [PATCH 027/136] update transaction submission --- src/internal/transactionSubmission.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 91d555a76..24f5e56b3 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -8,7 +8,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { MoveVector, U8 } from "../bcs"; import { postAptosFullNode } from "../client"; -import { Account } from "../core/account"; +import { Account } from "../account"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; import { PrivateKey } from "../core/crypto"; import { AccountAuthenticator } from "../transactions/authenticator/account"; @@ -18,8 +18,6 @@ import { generateTransactionPayload, generateSignedTransactionForSimulation, generateSignedTransaction, - sign, - generateSigningMessage, } from "../transactions/transactionBuilder/transactionBuilder"; import { InputGenerateTransactionData, @@ -35,7 +33,7 @@ import { } from "../transactions/types"; import { getInfo } from "./account"; import { UserTransactionResponse, PendingTransactionResponse, MimeType, HexInput, TransactionResponse } from "../types"; -import { TypeTagU8, TypeTagVector } from "../transactions"; +import { TypeTagU8, TypeTagVector, generateSigningMessageForTransaction } from "../transactions"; import { SimpleTransaction } from "../transactions/instances/simpleTransaction"; import { MultiAgentTransaction } from "../transactions/instances/multiAgentTransaction"; @@ -185,7 +183,7 @@ function isMultiAgentTransactionInput( */ export function getSigningMessage(args: { transaction: AnyRawTransaction }): Uint8Array { const { transaction } = args; - return generateSigningMessage(transaction); + return generateSigningMessageForTransaction(transaction); } /** @@ -204,8 +202,8 @@ export function getSigningMessage(args: { transaction: AnyRawTransaction }): Uin * @return The signer AccountAuthenticator */ export function signTransaction(args: { signer: Account; transaction: AnyRawTransaction }): AccountAuthenticator { - const accountAuthenticator = sign({ ...args }); - return accountAuthenticator; + const { signer, transaction } = args; + return signer.signWithAuthenticator(transaction); } /** From 7ceb3e6e84c2aab5d722013d3e525a2a754e426c Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 07:46:29 -0400 Subject: [PATCH 028/136] fix account imports --- src/api/account.ts | 3 ++- src/api/ans.ts | 3 ++- src/api/digitalAsset.ts | 3 ++- src/api/fungibleAsset.ts | 3 ++- src/api/transaction.ts | 3 ++- src/api/transactionSubmission/management.ts | 2 +- src/core/account/index.ts | 1 - src/core/index.ts | 1 - src/index.ts | 1 + src/internal/account.ts | 2 +- src/internal/ans.ts | 3 ++- src/internal/digitalAsset.ts | 3 ++- src/internal/fungibleAsset.ts | 3 ++- src/transactions/management/accountSequenceNumber.ts | 2 +- src/transactions/management/transactionWorker.ts | 2 +- 15 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/api/account.ts b/src/api/account.ts index 8ad313a1b..77bfa96a8 100644 --- a/src/api/account.ts +++ b/src/api/account.ts @@ -1,7 +1,8 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { AccountAddress, PrivateKey, Account as AccountModule, AccountAddressInput } from "../core"; +import { Account as AccountModule} from "../account"; +import { AccountAddress, PrivateKey, AccountAddressInput } from "../core"; import { AccountData, AnyNumber, diff --git a/src/api/ans.ts b/src/api/ans.ts index 77ecdcc99..9cb65e795 100644 --- a/src/api/ans.ts +++ b/src/api/ans.ts @@ -1,7 +1,8 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { Account } from "../account"; +import { AccountAddress, AccountAddressInput } from "../core"; import { RegisterNameParameters, getExpiration, diff --git a/src/api/digitalAsset.ts b/src/api/digitalAsset.ts index ac90ea667..e49e1d86c 100644 --- a/src/api/digitalAsset.ts +++ b/src/api/digitalAsset.ts @@ -13,7 +13,8 @@ import { PaginationArgs, TokenStandardArg, } from "../types"; -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { AccountAddress, AccountAddressInput } from "../core"; +import { Account } from "../account"; import { InputGenerateTransactionOptions } from "../transactions/types"; import { addDigitalAssetPropertyTransaction, diff --git a/src/api/fungibleAsset.ts b/src/api/fungibleAsset.ts index 12b051806..70ad212b9 100644 --- a/src/api/fungibleAsset.ts +++ b/src/api/fungibleAsset.ts @@ -23,7 +23,8 @@ import { import { ProcessorType } from "../utils/const"; import { AptosConfig } from "./aptosConfig"; import { waitForIndexerOnVersion } from "./utils"; -import { Account, AccountAddressInput } from "../core"; +import { Account } from "../account"; +import { AccountAddressInput } from "../core"; import { InputGenerateTransactionOptions } from "../transactions"; import { SimpleTransaction } from "../transactions/instances/simpleTransaction"; diff --git a/src/api/transaction.ts b/src/api/transaction.ts index 612bfd952..c1d136d98 100644 --- a/src/api/transaction.ts +++ b/src/api/transaction.ts @@ -33,7 +33,8 @@ import { InputGenerateTransactionOptions, InputGenerateTransactionPayloadData, } from "../transactions"; -import { AccountAddressInput, Account, PrivateKey } from "../core"; +import { AccountAddressInput, PrivateKey } from "../core"; +import { Account } from "../account"; import { Build } from "./transactionSubmission/build"; import { Simulate } from "./transactionSubmission/simulate"; import { Submit } from "./transactionSubmission/submit"; diff --git a/src/api/transactionSubmission/management.ts b/src/api/transactionSubmission/management.ts index 39e75a580..d3f8b78b5 100644 --- a/src/api/transactionSubmission/management.ts +++ b/src/api/transactionSubmission/management.ts @@ -2,7 +2,7 @@ import EventEmitter from "eventemitter3"; import { TransactionWorkerEvents, TransactionWorker, TransactionWorkerEventsEnum } from "../../transactions/management"; import { InputGenerateTransactionPayloadData, InputGenerateTransactionOptions } from "../../transactions"; import { AptosConfig } from "../aptosConfig"; -import { Account } from "../../core"; +import { Account } from "../../account"; export class TransactionManagement extends EventEmitter { account!: Account; diff --git a/src/core/account/index.ts b/src/core/account/index.ts index 66ec96043..529101670 100644 --- a/src/core/account/index.ts +++ b/src/core/account/index.ts @@ -1,4 +1,3 @@ export * from "./Ed25519Account"; -export * from "./Account"; export * from "./SingleKeyAccount"; export * from "./utils"; diff --git a/src/core/index.ts b/src/core/index.ts index b31b387fd..3313d8fd5 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1,7 +1,6 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -export * from "./account"; export * from "./accountAddress"; export * from "./authenticationKey"; export * from "./common"; diff --git a/src/index.ts b/src/index.ts index ae708f657..a08160238 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 +export * from "./account" export * from "./api"; export * from "./bcs"; export * from "./client"; diff --git a/src/internal/account.ts b/src/internal/account.ts index a7fcdebff..32b6fdd21 100644 --- a/src/internal/account.ts +++ b/src/internal/account.ts @@ -11,7 +11,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { AptosApiError, getAptosFullNode, paginateWithCursor } from "../client"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; -import { Account } from "../core/account"; +import { Account } from "../account"; import { AnyPublicKey, Ed25519PublicKey, PrivateKey } from "../core/crypto"; import { getTableItem, queryIndexer } from "./general"; import { diff --git a/src/internal/ans.ts b/src/internal/ans.ts index effa6b6a9..ed893c09b 100644 --- a/src/internal/ans.ts +++ b/src/internal/ans.ts @@ -9,7 +9,8 @@ */ import { AptosConfig } from "../api/aptosConfig"; -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { Account } from "../account"; +import { AccountAddress, AccountAddressInput } from "../core"; import { InputGenerateTransactionOptions } from "../transactions/types"; import { GetANSNameResponse, MoveAddressType, OrderByArg, PaginationArgs, WhereArg } from "../types"; import { GetNamesQuery } from "../types/generated/operations"; diff --git a/src/internal/digitalAsset.ts b/src/internal/digitalAsset.ts index 9239feb89..1d60bce31 100644 --- a/src/internal/digitalAsset.ts +++ b/src/internal/digitalAsset.ts @@ -10,7 +10,8 @@ import { AptosConfig } from "../api/aptosConfig"; import { Bool, MoveString, MoveVector, U64 } from "../bcs"; -import { Account, AccountAddress, AccountAddressInput } from "../core"; +import { AccountAddress, AccountAddressInput } from "../core"; +import { Account } from "../account"; import { EntryFunctionABI, InputGenerateTransactionOptions } from "../transactions/types"; import { AnyNumber, diff --git a/src/internal/fungibleAsset.ts b/src/internal/fungibleAsset.ts index 7ada10e8d..9df0916cb 100644 --- a/src/internal/fungibleAsset.ts +++ b/src/internal/fungibleAsset.ts @@ -33,7 +33,8 @@ import { FungibleAssetActivitiesBoolExp, FungibleAssetMetadataBoolExp, } from "../types/generated/types"; -import { Account, AccountAddressInput } from "../core"; +import { AccountAddressInput } from "../core"; +import { Account } from "../account"; import { EntryFunctionABI, InputGenerateTransactionOptions, diff --git a/src/transactions/management/accountSequenceNumber.ts b/src/transactions/management/accountSequenceNumber.ts index 98a1a7a77..9b13e3b5d 100644 --- a/src/transactions/management/accountSequenceNumber.ts +++ b/src/transactions/management/accountSequenceNumber.ts @@ -24,7 +24,7 @@ */ import { AptosConfig } from "../../api/aptosConfig"; -import { Account } from "../../core"; +import { Account } from "../../account"; import { getInfo } from "../../internal/account"; import { sleep } from "../../utils/helpers"; diff --git a/src/transactions/management/transactionWorker.ts b/src/transactions/management/transactionWorker.ts index 384609f45..c56a37ae6 100644 --- a/src/transactions/management/transactionWorker.ts +++ b/src/transactions/management/transactionWorker.ts @@ -2,7 +2,7 @@ import EventEmitter from "eventemitter3"; import { AptosConfig } from "../../api/aptosConfig"; -import { Account } from "../../core"; +import { Account } from "../../account"; import { waitForTransaction } from "../../internal/transaction"; import { generateTransaction, signAndSubmitTransaction } from "../../internal/transactionSubmission"; import { PendingTransactionResponse, TransactionResponse } from "../../types"; From b76e4cc3ec879637915be2bd05a15fa79fa1540a Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 08:16:39 -0400 Subject: [PATCH 029/136] update singlekey sign --- src/account/SingleKeyAccount.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts index 57c94f13e..f48eb1105 100644 --- a/src/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -109,13 +109,12 @@ export class SingleKeyAccount implements Account { } signWithAuthenticator(transaction: AnyRawTransaction) { - const innerSignature = this.sign(generateSigningMessageForTransaction(transaction)); - const signature = new AnySignature(innerSignature); + const signature = this.sign(generateSigningMessageForTransaction(transaction)); return new AccountAuthenticatorSingleKey(this.publicKey, signature); } sign(message: HexInput) { - return this.privateKey.sign(message); + return new AnySignature(this.privateKey.sign(message)); } signTransaction(transaction: AnyRawTransaction) { From 80a1d25a05810cd5adf21ed5fd4675e47691f568 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 08:16:49 -0400 Subject: [PATCH 030/136] delete old accounts --- src/api/transactionSubmission/sign.ts | 2 +- src/core/account/Account.ts | 245 -------------------------- src/core/account/Ed25519Account.ts | 88 --------- src/core/account/SingleKeyAccount.ts | 120 ------------- src/core/account/index.ts | 2 - 5 files changed, 1 insertion(+), 456 deletions(-) delete mode 100644 src/core/account/Account.ts delete mode 100644 src/core/account/Ed25519Account.ts delete mode 100644 src/core/account/SingleKeyAccount.ts diff --git a/src/api/transactionSubmission/sign.ts b/src/api/transactionSubmission/sign.ts index 8c5ec8d58..7e5a94147 100644 --- a/src/api/transactionSubmission/sign.ts +++ b/src/api/transactionSubmission/sign.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account } from "../../core"; +import { Account } from "../../account"; import { signTransaction } from "../../internal/transactionSubmission"; import { AccountAuthenticator, AnyRawTransaction } from "../../transactions"; import { AptosConfig } from "../aptosConfig"; diff --git a/src/core/account/Account.ts b/src/core/account/Account.ts deleted file mode 100644 index bb6e8a426..000000000 --- a/src/core/account/Account.ts +++ /dev/null @@ -1,245 +0,0 @@ -import type { AccountAuthenticator } from "../../transactions/authenticator/account"; -import { HexInput, SigningScheme, SigningSchemeInput } from "../../types"; -import type { AccountAddress, AccountAddressInput } from "../accountAddress"; -import { AuthenticationKey } from "../authenticationKey"; -import { AccountPublicKey, Ed25519PrivateKey, PrivateKey, Signature, VerifySignatureArgs } from "../crypto"; -import { Ed25519Account } from "./Ed25519Account"; -import { SingleKeyAccount } from "./SingleKeyAccount"; - -/** - * Arguments for creating an `Ed25519Account` from an `Ed25519PrivateKey`. - * This is the default input type when passing an `Ed25519PrivateKey`. - * In order to use the SingleKey authentication scheme, `legacy` needs to be explicitly set to false. - */ -export interface CreateEd25519AccountFromPrivateKeyArgs { - privateKey: Ed25519PrivateKey; - address?: AccountAddressInput; - legacy?: true; -} - -/** - * Arguments for creating an `SingleKeyAccount` from an `Ed25519PrivateKey`. - * The `legacy` argument needs to be explicitly set to false in order to - * use the `SingleKey` authentication scheme. - */ -export interface CreateEd25519SingleKeyAccountFromPrivateKeyArgs { - privateKey: Ed25519PrivateKey; - address?: AccountAddressInput; - legacy: false; -} - -/** - * Arguments for creating an `SingleKeyAccount` from any supported private key - * that is not an `Ed25519PrivateKey`. - * The `legacy` argument defaults to false and cannot be explicitly set to true. - */ -export interface CreateSingleKeyAccountFromPrivateKeyArgs { - privateKey: Exclude; - address?: AccountAddressInput; - legacy?: false; -} - -/** - * Arguments for creating an opaque `Account` from any supported private key. - * This is used when the private key type is not known at compilation time. - */ -export interface CreateAccountFromPrivateKeyArgs { - privateKey: PrivateKey; - address?: AccountAddressInput; - legacy?: boolean; -} - -/** - * Arguments for generating an `Ed25519Account`. - * This is the input type used by default. - */ -export interface GenerateEd25519AccountArgs { - scheme?: SigningSchemeInput.Ed25519; - legacy?: true; -} - -/** - * Arguments for generating an `SingleKeyAccount` with ah underlying `Ed25519PrivateKey`. - * The `legacy` argument needs to be explicitly set to false, - * otherwise an `Ed25519Account` will be returned instead. - */ -export interface GenerateEd25519SingleKeyAccountArgs { - scheme?: SigningSchemeInput.Ed25519; - legacy: false; -} - -/** - * Arguments for generating an `SingleKeyAccount` with any supported private key - * that is not an `Ed25519PrivateKey`. - * The `legacy` argument defaults to false and cannot be explicitly set to true. - */ -export interface GenerateSingleKeyAccountArgs { - scheme: Exclude; - legacy?: false; -} - -/** - * Arguments for generating an opaque `Account`. - * This is used when the input signature scheme is not known at compilation time. - */ -export interface GenerateAccountArgs { - scheme?: SigningSchemeInput; - legacy?: boolean; -} - -/** - * Arguments for deriving a private key from a mnemonic phrase and a BIP44 path. - */ -export interface PrivateKeyFromDerivationPathArgs { - path: string; - mnemonic: string; -} - -/** - * Interface for a generic Aptos account. - * - * The interface is defined as abstract class to provide a single entrypoint for account generation, - * either through `Account.generate()` or `Account.fromDerivationPath`. - * Despite this being an abstract class, it should be treated as an interface and enforced using - * the `implements` keyword. - * - * Note: Generating an account instance does not create the account on-chain. - */ -export abstract class Account { - /** - * Private key associated with the account. - * Note: this will be removed in the next major release, - * as not all accounts have a private key. - */ - abstract readonly privateKey: PrivateKey; - - /** - * Public key associated with the account - */ - abstract readonly publicKey: AccountPublicKey; - - /** - * Account address associated with the account - */ - abstract readonly accountAddress: AccountAddress; - - /** - * Signing scheme used to sign transactions - */ - abstract signingScheme: SigningScheme; - - /** - * Derives an account from a randomly generated private key. - * @param args.scheme The signature scheme to use, to generate the private key - * @param args.legacy Whether to use a legacy authentication scheme, when applicable - * @returns An account compatible with the provided signature scheme - */ - static generate(args?: GenerateEd25519AccountArgs): Ed25519Account; - static generate(args: GenerateEd25519SingleKeyAccountArgs): SingleKeyAccount; - static generate(args: GenerateSingleKeyAccountArgs): SingleKeyAccount; - static generate(args: GenerateAccountArgs): Account; - static generate(args: GenerateAccountArgs = {}) { - const { scheme = SigningSchemeInput.Ed25519, legacy = true } = args; - if (scheme === SigningSchemeInput.Ed25519 && legacy) { - return Ed25519Account.generate(); - } - return SingleKeyAccount.generate({ scheme }); - } - - /** - * Creates an account from the provided private key. - * - * @param args.privateKey a valid private key - * @param args.address the account's address. If not provided, it will be derived from the public key. - * @param args.legacy Whether to use a legacy authentication scheme, when applicable - */ - static fromPrivateKey(args: CreateEd25519AccountFromPrivateKeyArgs): Ed25519Account; - static fromPrivateKey(args: CreateEd25519SingleKeyAccountFromPrivateKeyArgs): SingleKeyAccount; - static fromPrivateKey(args: CreateSingleKeyAccountFromPrivateKeyArgs): SingleKeyAccount; - static fromPrivateKey(args: CreateAccountFromPrivateKeyArgs): Account; - static fromPrivateKey(args: CreateAccountFromPrivateKeyArgs) { - const { privateKey, address, legacy = true } = args; - if (privateKey instanceof Ed25519PrivateKey && legacy) { - return new Ed25519Account({ - privateKey, - address, - }); - } - return new SingleKeyAccount({ privateKey, address }); - } - - /** - * @deprecated use `fromPrivateKey` instead. - * Instantiates an account given a private key and a specified account address. - * This is primarily used to instantiate an `Account` that has had its authentication key rotated. - * - * @param args.privateKey PrivateKey - the underlying private key for the account - * @param args.address AccountAddress - The account address the `Account` will sign for - * @param args.legacy optional. If set to false, the keypair generated is a Unified keypair. Defaults - * to generating a Legacy Ed25519 keypair - * - * @returns Account - */ - static fromPrivateKeyAndAddress(args: CreateAccountFromPrivateKeyArgs) { - return this.fromPrivateKey(args); - } - - /** - * Derives an account with bip44 path and mnemonics - * - * @param args.scheme The signature scheme to derive the private key with - * @param args.path the BIP44 derive hardened path (e.g. m/44'/637'/0'/0'/0') for Ed25519, - * or non-hardened path (e.g. m/44'/637'/0'/0/0) for secp256k1 - * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki} - * @param args.mnemonic the mnemonic seed phrase of the account - */ - static fromDerivationPath(args: GenerateEd25519AccountArgs & PrivateKeyFromDerivationPathArgs): Ed25519Account; - static fromDerivationPath( - args: GenerateEd25519SingleKeyAccountArgs & PrivateKeyFromDerivationPathArgs, - ): SingleKeyAccount; - static fromDerivationPath(args: GenerateSingleKeyAccountArgs & PrivateKeyFromDerivationPathArgs): SingleKeyAccount; - static fromDerivationPath(args: GenerateAccountArgs & PrivateKeyFromDerivationPathArgs): Account; - static fromDerivationPath(args: GenerateAccountArgs & PrivateKeyFromDerivationPathArgs) { - const { scheme = SigningSchemeInput.Ed25519, mnemonic, path, legacy = true } = args; - if (scheme === SigningSchemeInput.Ed25519 && legacy) { - return Ed25519Account.fromDerivationPath({ mnemonic, path }); - } - return SingleKeyAccount.fromDerivationPath({ scheme, mnemonic, path }); - } - - /** - * @deprecated use `publicKey.authKey()` instead. - * This key enables account owners to rotate their private key(s) - * associated with the account without changing the address that hosts their account. - * See here for more info: {@link https://aptos.dev/concepts/accounts#single-signer-authentication} - * - * @param args.publicKey PublicKey - public key of the account - * @returns The authentication key for the associated account - */ - static authKey(args: { publicKey: AccountPublicKey }): AuthenticationKey { - const { publicKey } = args; - return publicKey.authKey(); - } - - /** - * Sign a message using the available signing capabilities. - * @param message the signing message, as binary input - * @return the AccountAuthenticator containing the signature, together with the account's public key - */ - abstract signWithAuthenticator(message: HexInput): AccountAuthenticator; - - /** - * Sign the given message with the private key. - * @param message in HexInput format - * @returns AccountSignature - */ - abstract sign(message: HexInput): Signature; - - /** - * @param args.message raw message data in HexInput format - * @param args.signature signed message signature - */ - verifySignature(args: VerifySignatureArgs): boolean { - return this.publicKey.verifySignature(args); - } -} diff --git a/src/core/account/Ed25519Account.ts b/src/core/account/Ed25519Account.ts deleted file mode 100644 index 5c820c006..000000000 --- a/src/core/account/Ed25519Account.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { AccountAuthenticatorEd25519 } from "../../transactions/authenticator/account"; -import { HexInput, SigningScheme } from "../../types"; -import { AccountAddress, AccountAddressInput } from "../accountAddress"; -import { Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature } from "../crypto"; -import type { Account } from "./Account"; - -export interface Ed25519SignerConstructorArgs { - privateKey: Ed25519PrivateKey; - address?: AccountAddressInput; -} - -export interface Ed25519SignerFromDerivationPathArgs { - path: string; - mnemonic: string; -} - -export interface VerifyEd25519SignatureArgs { - message: HexInput; - signature: Ed25519Signature; -} - -/** - * Signer implementation for the Ed25519 authentication scheme. - * This extends an {@link Ed25519Account} by adding signing capabilities through an {@link Ed25519PrivateKey}. - * - * Note: Generating a signer instance does not create the account on-chain. - */ -export class Ed25519Account implements Account { - /** - * Private key associated with the account - */ - readonly privateKey: Ed25519PrivateKey; - - readonly publicKey: Ed25519PublicKey; - - readonly accountAddress: AccountAddress; - - readonly signingScheme = SigningScheme.Ed25519; - - // region Constructors - - constructor(args: Ed25519SignerConstructorArgs) { - const { privateKey, address } = args; - this.privateKey = privateKey; - this.publicKey = privateKey.publicKey(); - this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); - } - - /** - * Derives a signer from a randomly generated private key - */ - static generate() { - const privateKey = Ed25519PrivateKey.generate(); - return new Ed25519Account({ privateKey }); - } - - /** - * Derives an account with bip44 path and mnemonics - * - * @param args.path the BIP44 derive hardened path e.g. m/44'/637'/0'/0'/0' - * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki} - * @param args.mnemonic the mnemonic seed phrase of the account - */ - static fromDerivationPath(args: Ed25519SignerFromDerivationPathArgs) { - const { path, mnemonic } = args; - const privateKey = Ed25519PrivateKey.fromDerivationPath(path, mnemonic); - return new Ed25519Account({ privateKey }); - } - - // endregion - - // region Account - - verifySignature(args: VerifyEd25519SignatureArgs): boolean { - return this.publicKey.verifySignature(args); - } - - signWithAuthenticator(message: HexInput) { - const signature = this.privateKey.sign(message); - return new AccountAuthenticatorEd25519(this.publicKey, signature); - } - - sign(message: HexInput) { - return this.signWithAuthenticator(message).signature; - } - - // endregion -} diff --git a/src/core/account/SingleKeyAccount.ts b/src/core/account/SingleKeyAccount.ts deleted file mode 100644 index c4a9d1156..000000000 --- a/src/core/account/SingleKeyAccount.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { AccountAuthenticatorSingleKey } from "../../transactions/authenticator/account"; -import { type HexInput, SigningScheme, SigningSchemeInput } from "../../types"; -import { AccountAddress, AccountAddressInput } from "../accountAddress"; -import { AnyPublicKey, AnySignature, Ed25519PrivateKey, PrivateKey, Secp256k1PrivateKey } from "../crypto"; -import type { Account } from "./Account"; - -export interface SingleKeySignerConstructorArgs { - privateKey: PrivateKey; - address?: AccountAddressInput; -} - -export interface SingleKeySignerGenerateArgs { - scheme?: SigningSchemeInput; -} - -export type SingleKeySignerFromDerivationPathArgs = SingleKeySignerGenerateArgs & { - path: string; - mnemonic: string; -}; - -export interface VerifySingleKeySignatureArgs { - message: HexInput; - signature: AnySignature; -} - -/** - * Signer implementation for the SingleKey authentication scheme. - * This extends a SingleKeyAccount by adding signing capabilities through a valid private key. - * Currently, the only supported signature schemes are Ed25519 and Secp256k1. - * - * Note: Generating a signer instance does not create the account on-chain. - */ -export class SingleKeyAccount implements Account { - /** - * Private key associated with the account - */ - readonly privateKey: PrivateKey; - - readonly publicKey: AnyPublicKey; - - readonly accountAddress: AccountAddress; - - readonly signingScheme = SigningScheme.SingleKey; - - // region Constructors - - constructor(args: SingleKeySignerConstructorArgs) { - const { privateKey, address } = args; - this.privateKey = privateKey; - this.publicKey = new AnyPublicKey(privateKey.publicKey()); - this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); - } - - /** - * Derives an account from a randomly generated private key. - * Default generation is using an Ed25519 key - * @returns Account with the given signature scheme - */ - static generate(args: SingleKeySignerGenerateArgs = {}) { - const { scheme = SigningSchemeInput.Ed25519 } = args; - let privateKey: PrivateKey; - switch (scheme) { - case SigningSchemeInput.Ed25519: - privateKey = Ed25519PrivateKey.generate(); - break; - case SigningSchemeInput.Secp256k1Ecdsa: - privateKey = Secp256k1PrivateKey.generate(); - break; - default: - throw new Error(`Unsupported signature scheme ${scheme}`); - } - return new SingleKeyAccount({ privateKey }); - } - - /** - * Derives an account with bip44 path and mnemonics, - * Default to using an Ed25519 signature scheme. - * - * @param args.scheme The signature scheme to derive the private key with - * @param args.path the BIP44 derive hardened path (e.g. m/44'/637'/0'/0'/0') for Ed25519, - * or non-hardened path (e.g. m/44'/637'/0'/0/0) for secp256k1 - * Detailed description: {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki} - * @param args.mnemonic the mnemonic seed phrase of the account - */ - static fromDerivationPath(args: SingleKeySignerFromDerivationPathArgs) { - const { scheme = SigningSchemeInput.Ed25519, path, mnemonic } = args; - let privateKey: PrivateKey; - switch (scheme) { - case SigningSchemeInput.Ed25519: - privateKey = Ed25519PrivateKey.fromDerivationPath(path, mnemonic); - break; - case SigningSchemeInput.Secp256k1Ecdsa: - privateKey = Secp256k1PrivateKey.fromDerivationPath(path, mnemonic); - break; - default: - throw new Error(`Unsupported signature scheme ${scheme}`); - } - return new SingleKeyAccount({ privateKey }); - } - - // endregion - - // region Account - - verifySignature(args: VerifySingleKeySignatureArgs): boolean { - return this.publicKey.verifySignature(args); - } - - signWithAuthenticator(message: HexInput) { - const innerSignature = this.privateKey.sign(message); - const signature = new AnySignature(innerSignature); - return new AccountAuthenticatorSingleKey(this.publicKey, signature); - } - - sign(message: HexInput) { - return this.signWithAuthenticator(message).signature; - } - - // endregion -} diff --git a/src/core/account/index.ts b/src/core/account/index.ts index 529101670..178cd64f8 100644 --- a/src/core/account/index.ts +++ b/src/core/account/index.ts @@ -1,3 +1 @@ -export * from "./Ed25519Account"; -export * from "./SingleKeyAccount"; export * from "./utils"; From 29d97163e99395bf98dc29e618792ec4e70d3522 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 08:24:29 -0400 Subject: [PATCH 031/136] update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 877ae4770..98044017e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to the Aptos TypeScript SDK will be captured in this file. T # Unreleased +- [`Breaking`] Removes private key from the Account class to support keyless and passkey +- Refactors the core/accounts folder to the top level +- Separates the signing message functionality out of the transactionSubmission file + # 1.13.1 (2024-04-23) - [`Fix`] Fixes Local ABI to use it locally rather than make an external network call From 186e15a906399e1e6243399864ffefbe167c4c86 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 08:24:44 -0400 Subject: [PATCH 032/136] update --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98044017e..eb9f2c871 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ All notable changes to the Aptos TypeScript SDK will be captured in this file. T - [`Breaking`] Removes private key from the Account class to support keyless and passkey - Refactors the core/accounts folder to the top level -- Separates the signing message functionality out of the transactionSubmission file +- Separates the signing message functionality out of the transactionSubmission.ts file # 1.13.1 (2024-04-23) From 7d4944a22e035d661b80f2f0f56d7ad6b141daa6 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 08:26:53 -0400 Subject: [PATCH 033/136] lint --- src/account/Ed25519Account.ts | 2 +- src/account/SingleKeyAccount.ts | 2 +- src/api/account.ts | 2 +- src/core/crypto/multiKey.ts | 8 +++--- src/index.ts | 2 +- src/transactions/transactionBuilder/index.ts | 1 - .../transactionBuilder/signingMessage.ts | 25 ++++++------------- 7 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/account/Ed25519Account.ts b/src/account/Ed25519Account.ts index ec7bc6c4c..b74aa6fb3 100644 --- a/src/account/Ed25519Account.ts +++ b/src/account/Ed25519Account.ts @@ -87,7 +87,7 @@ export class Ed25519Account implements Account { } signTransaction(transaction: AnyRawTransaction) { - return this.sign(generateSigningMessageForTransaction(transaction)) + return this.sign(generateSigningMessageForTransaction(transaction)); } // endregion diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts index f48eb1105..cb886c4c7 100644 --- a/src/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -118,7 +118,7 @@ export class SingleKeyAccount implements Account { } signTransaction(transaction: AnyRawTransaction) { - return this.sign(generateSigningMessageForTransaction(transaction)) + return this.sign(generateSigningMessageForTransaction(transaction)); } // endregion diff --git a/src/api/account.ts b/src/api/account.ts index 77bfa96a8..a52feb541 100644 --- a/src/api/account.ts +++ b/src/api/account.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account as AccountModule} from "../account"; +import { Account as AccountModule } from "../account"; import { AccountAddress, PrivateKey, AccountAddressInput } from "../core"; import { AccountData, diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index cc6e44149..d73b9e181 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -141,15 +141,13 @@ export class MultiKey extends AccountPublicKey { } getIndex(publicKey: PublicKey): number { - - const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey) + const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey); const index = this.publicKeys.findIndex((pk) => pk.toString() === anyPublicKey.toString()); if (index !== -1) { - return index; - } + return index; + } throw new Error("Public key not found in MultiKey"); - } } diff --git a/src/index.ts b/src/index.ts index a08160238..0e5041546 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -export * from "./account" +export * from "./account"; export * from "./api"; export * from "./bcs"; export * from "./client"; diff --git a/src/transactions/transactionBuilder/index.ts b/src/transactions/transactionBuilder/index.ts index e6fc29838..1ed9e6e2c 100644 --- a/src/transactions/transactionBuilder/index.ts +++ b/src/transactions/transactionBuilder/index.ts @@ -5,4 +5,3 @@ export * from "./helpers"; export * from "./transactionBuilder"; export * from "./remoteAbi"; export * from "./signingMessage"; - diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index 1abefe025..c4d98d381 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -7,18 +7,9 @@ * and a signed transaction that can be simulated, signed and submitted to chain. */ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; -import { - RAW_TRANSACTION_SALT, - RAW_TRANSACTION_WITH_DATA_SALT, -} from "../../utils/const"; -import { - FeePayerRawTransaction, - MultiAgentRawTransaction, - RawTransaction, -} from "../instances"; -import { - AnyRawTransaction, AnyRawTransactionInstance, -} from "../types"; +import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; +import { FeePayerRawTransaction, MultiAgentRawTransaction, RawTransaction } from "../instances"; +import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; import { Serializable } from "../../bcs"; /** @@ -47,7 +38,7 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin const hash = sha3Hash.create(); hash.update(`APTOS::${domainSeparator}`); - + const prefix = hash.digest(); const body = bytes; @@ -66,10 +57,10 @@ export function generateSigningMessageForSerializable(obj: Serializable): Uint8A export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { const rawTxn = deriveTransactionType(transaction); if (rawTxn instanceof RawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_SALT); - } if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_WITH_DATA_SALT); + return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_SALT); + } + if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_WITH_DATA_SALT); } throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); } - From 959b4f3fe11824ad720ba85b7ac0afe1f179b5f5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 15:14:32 -0400 Subject: [PATCH 034/136] fix imports --- tests/e2e/api/digitalAsset.test.ts | 2 +- tests/e2e/transaction/signTransaction.test.ts | 2 +- tests/e2e/transactionManagement/accountSequenceNumber.test.ts | 2 +- tests/e2e/transactionManagement/transactionWorker.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/e2e/api/digitalAsset.test.ts b/tests/e2e/api/digitalAsset.test.ts index 8fe3314fd..8f326b8ee 100644 --- a/tests/e2e/api/digitalAsset.test.ts +++ b/tests/e2e/api/digitalAsset.test.ts @@ -67,7 +67,7 @@ describe("DigitalAsset", () => { tokenAddress = await setupToken(); }); - test("it gets digital asset data for a digital asset's address", async () => { + test.only("it gets digital asset data for a digital asset's address", async () => { const tokenData = await aptos.getDigitalAssetData({ digitalAssetAddress: tokenAddress }); expect(tokenData.token_data_id).toEqual(tokenAddress); diff --git a/tests/e2e/transaction/signTransaction.test.ts b/tests/e2e/transaction/signTransaction.test.ts index a1b7dbf0b..a5c160315 100644 --- a/tests/e2e/transaction/signTransaction.test.ts +++ b/tests/e2e/transaction/signTransaction.test.ts @@ -53,7 +53,7 @@ describe("sign transaction", () => { const authenticator = AccountAuthenticator.deserialize(deserializer); expect(authenticator instanceof AccountAuthenticatorSingleKey).toBeTruthy(); }); - test("it signs an entry function transaction", async () => { + test.only("it signs an entry function transaction", async () => { const rawTxn = await aptos.transaction.build.simple({ sender: singleSignerED25519SenderAccount.accountAddress, data: { diff --git a/tests/e2e/transactionManagement/accountSequenceNumber.test.ts b/tests/e2e/transactionManagement/accountSequenceNumber.test.ts index 73566a25b..4a6de4fa1 100644 --- a/tests/e2e/transactionManagement/accountSequenceNumber.test.ts +++ b/tests/e2e/transactionManagement/accountSequenceNumber.test.ts @@ -1,5 +1,5 @@ import { longTestTimeout } from "../../unit/helper"; -import { Account } from "../../../src/core"; +import { Account } from "../../../src/account"; import * as AccountQueries from "../../../src/internal/account"; import { AccountSequenceNumber } from "../../../src/transactions/management/accountSequenceNumber"; import { getAptosClient } from "../helper"; diff --git a/tests/e2e/transactionManagement/transactionWorker.test.ts b/tests/e2e/transactionManagement/transactionWorker.test.ts index dbba48e83..2f7694c8b 100644 --- a/tests/e2e/transactionManagement/transactionWorker.test.ts +++ b/tests/e2e/transactionManagement/transactionWorker.test.ts @@ -1,5 +1,5 @@ import { longTestTimeout } from "../../unit/helper"; -import { Account } from "../../../src/core"; +import { Account } from "../../../src/account"; import { InputGenerateTransactionPayloadData } from "../../../src/transactions/types"; import { TransactionWorker } from "../../../src/transactions/management/transactionWorker"; import { TransactionResponseType, TypeTagAddress, TypeTagU64 } from "../../../src"; From edfd438b185165ca9ba709fa1eda82c61db453b8 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 17:06:25 -0400 Subject: [PATCH 035/136] fix the domain separator salt --- src/transactions/transactionBuilder/signingMessage.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index c4d98d381..f4e82fc6c 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -37,7 +37,11 @@ export function deriveTransactionType(transaction: AnyRawTransaction): AnyRawTra export function generateSigningMessage(bytes: Uint8Array, domainSeparator: string): Uint8Array { const hash = sha3Hash.create(); - hash.update(`APTOS::${domainSeparator}`); + if (!domainSeparator.startsWith("APTOS::")) { + throw new Error(`Domain separator needs to start with 'APTOS::'. Provided - ${domainSeparator}`); + } + + hash.update(domainSeparator); const prefix = hash.digest(); From 878ca69445dcf635def13ab61c04576384c8caa9 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 17:07:45 -0400 Subject: [PATCH 036/136] remove test.only --- tests/e2e/api/digitalAsset.test.ts | 2 +- tests/e2e/transaction/signTransaction.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/api/digitalAsset.test.ts b/tests/e2e/api/digitalAsset.test.ts index 8f326b8ee..8fe3314fd 100644 --- a/tests/e2e/api/digitalAsset.test.ts +++ b/tests/e2e/api/digitalAsset.test.ts @@ -67,7 +67,7 @@ describe("DigitalAsset", () => { tokenAddress = await setupToken(); }); - test.only("it gets digital asset data for a digital asset's address", async () => { + test("it gets digital asset data for a digital asset's address", async () => { const tokenData = await aptos.getDigitalAssetData({ digitalAssetAddress: tokenAddress }); expect(tokenData.token_data_id).toEqual(tokenAddress); diff --git a/tests/e2e/transaction/signTransaction.test.ts b/tests/e2e/transaction/signTransaction.test.ts index a5c160315..a1b7dbf0b 100644 --- a/tests/e2e/transaction/signTransaction.test.ts +++ b/tests/e2e/transaction/signTransaction.test.ts @@ -53,7 +53,7 @@ describe("sign transaction", () => { const authenticator = AccountAuthenticator.deserialize(deserializer); expect(authenticator instanceof AccountAuthenticatorSingleKey).toBeTruthy(); }); - test.only("it signs an entry function transaction", async () => { + test("it signs an entry function transaction", async () => { const rawTxn = await aptos.transaction.build.simple({ sender: singleSignerED25519SenderAccount.accountAddress, data: { From 707be7fa979393977279383bb94582586dc6236f Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 17:38:08 -0400 Subject: [PATCH 037/136] fix tests --- .../transaction/transactionBuilder.test.ts | 66 +++++++------------ .../transaction/transactionSubmission.test.ts | 27 ++------ 2 files changed, 28 insertions(+), 65 deletions(-) diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index bf9ea30e3..13ab94035 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -23,7 +23,6 @@ import { generateSignedTransactionForSimulation, generateTransactionPayload, generateTransactionPayloadWithABI, - sign, SignedTransaction, generateUserTransactionHash, } from "../../../src"; @@ -395,12 +394,9 @@ describe("transaction builder", () => { sender: alice.accountAddress, payload, }); - const accountAuthenticator = sign({ - signer: alice, - transaction, - }); - expect(accountAuthenticator instanceof AccountAuthenticator).toBeTruthy(); - const deserializer = new Deserializer(accountAuthenticator.bcsToBytes()); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + expect(senderAuthenticator instanceof AccountAuthenticator).toBeTruthy(); + const deserializer = new Deserializer(senderAuthenticator.bcsToBytes()); const authenticator = AccountAuthenticator.deserialize(deserializer); expect(authenticator instanceof AccountAuthenticatorEd25519).toBeTruthy(); }); @@ -421,12 +417,9 @@ describe("transaction builder", () => { payload, feePayerAddress: Account.generate().accountAddress, }); - const accountAuthenticator = sign({ - signer: alice, - transaction, - }); - expect(accountAuthenticator instanceof AccountAuthenticator).toBeTruthy(); - const deserializer = new Deserializer(accountAuthenticator.bcsToBytes()); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + expect(senderAuthenticator instanceof AccountAuthenticator).toBeTruthy(); + const deserializer = new Deserializer(senderAuthenticator.bcsToBytes()); const authenticator = AccountAuthenticator.deserialize(deserializer); expect(authenticator instanceof AccountAuthenticatorEd25519).toBeTruthy(); }); @@ -445,18 +438,15 @@ describe("transaction builder", () => { new U64(50), ], }); - const rawTxn = await buildTransaction({ + const transaction = await buildTransaction({ aptosConfig: config, sender: alice.accountAddress, payload, secondarySignerAddresses: [bob.accountAddress], }); - const accountAuthenticator = sign({ - signer: alice, - transaction: rawTxn, - }); - expect(accountAuthenticator instanceof AccountAuthenticator).toBeTruthy(); - const deserializer = new Deserializer(accountAuthenticator.bcsToBytes()); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + expect(senderAuthenticator instanceof AccountAuthenticator).toBeTruthy(); + const deserializer = new Deserializer(senderAuthenticator.bcsToBytes()); const authenticator = AccountAuthenticator.deserialize(deserializer); expect(authenticator instanceof AccountAuthenticatorEd25519).toBeTruthy(); }); @@ -480,10 +470,10 @@ describe("transaction builder", () => { sender: alice.accountAddress, payload, }); - const authenticator = sign({ signer: alice, transaction }); + const senderAuthenticator = alice.signWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, - senderAuthenticator: authenticator, + senderAuthenticator, }); expect(bcsTransaction instanceof Uint8Array).toBeTruthy(); const deserializer = new Deserializer(bcsTransaction); @@ -506,11 +496,8 @@ describe("transaction builder", () => { payload, secondarySignerAddresses: [bob.accountAddress], }); - const authenticator = sign({ signer: alice, transaction }); - const secondaryAuthenticator = sign({ - signer: bob, - transaction, - }); + const authenticator = alice.signWithAuthenticator(transaction); + const secondaryAuthenticator = bob.signWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator: authenticator, @@ -537,14 +524,11 @@ describe("transaction builder", () => { payload, feePayerAddress: bob.accountAddress, }); - const authenticator = sign({ signer: alice, transaction }); - const feePayerAuthenticator = sign({ - signer: bob, - transaction, - }); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + const feePayerAuthenticator = bob.signWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, - senderAuthenticator: authenticator, + senderAuthenticator, feePayerAuthenticator, }); expect(bcsTransaction instanceof Uint8Array).toBeTruthy(); @@ -564,7 +548,7 @@ describe("transaction builder", () => { amount: 1, }); - const senderAuthenticator = sign({ signer: alice, transaction }); + const senderAuthenticator = alice.signWithAuthenticator(transaction); // Generate hash const signedTxnInput = { @@ -595,11 +579,8 @@ describe("transaction builder", () => { payload, secondarySignerAddresses: [bob.accountAddress], }); - const senderAuthenticator = sign({ signer: alice, transaction }); - const secondaryAuthenticator = sign({ - signer: bob, - transaction, - }); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + const secondaryAuthenticator = bob.signWithAuthenticator(transaction); // Generate hash const signedTxnInput = { transaction, @@ -627,13 +608,10 @@ describe("transaction builder", () => { }); // Bob signs without knowing the fee payer - const senderAuthenticator = sign({ - signer: bob, - transaction, - }); + const senderAuthenticator = bob.signWithAuthenticator(transaction); // Alice signs after putting themselves in as fee payer transaction.feePayerAddress = alice.accountAddress; - const feePayerAuthenticator = sign({ signer: alice, transaction }); + const feePayerAuthenticator = alice.signWithAuthenticator(transaction); // Generate hash const signedTxnInput = { diff --git a/tests/e2e/transaction/transactionSubmission.test.ts b/tests/e2e/transaction/transactionSubmission.test.ts index ed7a72d0c..103b674eb 100644 --- a/tests/e2e/transaction/transactionSubmission.test.ts +++ b/tests/e2e/transaction/transactionSubmission.test.ts @@ -7,6 +7,7 @@ import { Deserializer, SigningSchemeInput, MultiKey, + MultiKeyAccount, AccountAuthenticatorMultiKey, RawTransaction, TransactionPayloadEntryFunction, @@ -603,37 +604,21 @@ describe("transaction submission", () => { signaturesRequired: 2, }); - const authKey = multiKey.authKey(); + const account = new MultiKeyAccount({multiKey, signers:[singleSignerED25519SenderAccount, singleSignerSecp256k1Account]}); - const multiKeyAccountAddress = authKey.derivedAddress(); - - await aptos.fundAccount({ accountAddress: multiKeyAccountAddress, amount: 100_000_000 }); + await aptos.fundAccount({ accountAddress: account.accountAddress, amount: 100_000_000 }); const transaction = await aptos.transaction.build.simple({ - sender: multiKeyAccountAddress, + sender: account.accountAddress, data: { function: `0x${contractPublisherAccount.accountAddress.toStringWithoutPrefix()}::transfer::transfer`, functionArguments: [1, receiverAccounts[0].accountAddress], }, }); - // create a bitmap where singleSignerED25519SenderAccount and singleSignerSecp256k1Account - const bitmap = multiKey.createBitmap({ bits: [0, 2] }); - - // account1 and account3 sign the transaction - const account1Authenticator = aptos.transaction.sign({ signer: singleSignerED25519SenderAccount, transaction }); - const account3Authenticator = aptos.transaction.sign({ signer: singleSignerSecp256k1Account, transaction }); - if (!(account1Authenticator.isSingleKey() && account3Authenticator.isSingleKey())) { - throw new Error("Both AccountAuthenticators should be an instance of AccountAuthenticatorSingleKey"); - } - - const multiKeyAuth = new AccountAuthenticatorMultiKey( - multiKey, - [account1Authenticator.signature, account3Authenticator.signature], - bitmap, - ); + const senderAuthenticator = aptos.transaction.sign({ signer: account, transaction }); - const response = await aptos.transaction.submit.simple({ transaction, senderAuthenticator: multiKeyAuth }); + const response = await aptos.transaction.submit.simple({ transaction, senderAuthenticator }); await aptos.waitForTransaction({ transactionHash: response.hash, }); From b12be78fa7400b80b0075af00f6dad62f02fce77 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 26 Apr 2024 17:44:39 -0400 Subject: [PATCH 038/136] fmt --- .../e2e/transaction/transactionBuilder.test.ts | 18 +++++++++--------- .../transaction/transactionSubmission.test.ts | 6 ++++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index 13ab94035..ce6780fe3 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -470,7 +470,7 @@ describe("transaction builder", () => { sender: alice.accountAddress, payload, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator, @@ -497,7 +497,7 @@ describe("transaction builder", () => { secondarySignerAddresses: [bob.accountAddress], }); const authenticator = alice.signWithAuthenticator(transaction); - const secondaryAuthenticator = bob.signWithAuthenticator(transaction); + const secondaryAuthenticator = bob.signWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator: authenticator, @@ -524,8 +524,8 @@ describe("transaction builder", () => { payload, feePayerAddress: bob.accountAddress, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); - const feePayerAuthenticator = bob.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + const feePayerAuthenticator = bob.signWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator, @@ -548,7 +548,7 @@ describe("transaction builder", () => { amount: 1, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signWithAuthenticator(transaction); // Generate hash const signedTxnInput = { @@ -579,8 +579,8 @@ describe("transaction builder", () => { payload, secondarySignerAddresses: [bob.accountAddress], }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); - const secondaryAuthenticator = bob.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signWithAuthenticator(transaction); + const secondaryAuthenticator = bob.signWithAuthenticator(transaction); // Generate hash const signedTxnInput = { transaction, @@ -608,10 +608,10 @@ describe("transaction builder", () => { }); // Bob signs without knowing the fee payer - const senderAuthenticator = bob.signWithAuthenticator(transaction); + const senderAuthenticator = bob.signWithAuthenticator(transaction); // Alice signs after putting themselves in as fee payer transaction.feePayerAddress = alice.accountAddress; - const feePayerAuthenticator = alice.signWithAuthenticator(transaction); + const feePayerAuthenticator = alice.signWithAuthenticator(transaction); // Generate hash const signedTxnInput = { diff --git a/tests/e2e/transaction/transactionSubmission.test.ts b/tests/e2e/transaction/transactionSubmission.test.ts index 103b674eb..6b7825bfe 100644 --- a/tests/e2e/transaction/transactionSubmission.test.ts +++ b/tests/e2e/transaction/transactionSubmission.test.ts @@ -8,7 +8,6 @@ import { SigningSchemeInput, MultiKey, MultiKeyAccount, - AccountAuthenticatorMultiKey, RawTransaction, TransactionPayloadEntryFunction, Bool, @@ -604,7 +603,10 @@ describe("transaction submission", () => { signaturesRequired: 2, }); - const account = new MultiKeyAccount({multiKey, signers:[singleSignerED25519SenderAccount, singleSignerSecp256k1Account]}); + const account = new MultiKeyAccount({ + multiKey, + signers: [singleSignerED25519SenderAccount, singleSignerSecp256k1Account], + }); await aptos.fundAccount({ accountAddress: account.accountAddress, amount: 100_000_000 }); From ed6c5198412706b31f7e96dc6ab17a9161575af9 Mon Sep 17 00:00:00 2001 From: Oliver He Date: Fri, 26 Apr 2024 17:52:31 -0400 Subject: [PATCH 039/136] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb9f2c871..b606c4d8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to the Aptos TypeScript SDK will be captured in this file. T - [`Breaking`] Removes private key from the Account class to support keyless and passkey - Refactors the core/accounts folder to the top level - Separates the signing message functionality out of the transactionSubmission.ts file +- Adds an Account implementation for MultiKey accounts # 1.13.1 (2024-04-23) From 8b0f205270fdec01391e3c3839156d7af58e658a Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 27 Apr 2024 00:28:08 -0400 Subject: [PATCH 040/136] fmt --- examples/typescript/keyless.ts | 13 +++--- examples/typescript/keyless_escrow.ts | 40 ++++++++++--------- src/account/Ed25519Account.ts | 2 +- src/account/EphemeralKeyPair.ts | 17 +++++--- src/account/KeylessAccount.ts | 2 +- src/account/MultiKeyAccount.ts | 4 +- src/account/SingleKeyAccount.ts | 2 +- src/api/account.ts | 2 +- src/api/aptosConfig.ts | 2 +- src/api/keyless.ts | 2 +- src/client/post.ts | 3 +- src/core/crypto/ed25519.ts | 10 ++--- src/core/crypto/ephemeral.ts | 3 +- src/core/crypto/keyless.ts | 8 +++- src/core/crypto/multiKey.ts | 8 ++-- src/core/crypto/singleKey.ts | 6 +-- src/transactions/transactionBuilder/index.ts | 1 - .../transactionBuilder/signingMessage.ts | 25 ++++-------- src/types/index.ts | 1 - 19 files changed, 73 insertions(+), 78 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 5b5fba44f..911d82e96 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -14,7 +14,7 @@ import { AptosConfig, Ed25519PrivateKey, EphemeralKeyPair, - Network + Network, } from "@aptos-labs/ts-sdk"; import { promisify } from "util"; @@ -25,7 +25,8 @@ const ALICE_INITIAL_BALANCE = 100_000_000; const BOB_INITIAL_BALANCE = 100; const TRANSFER_AMOUNT = 10_000; -const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; +const TEST_JWT = + "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; /** * Prints the balance of an account @@ -49,7 +50,7 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client - const config = new AptosConfig({network: Network.DEVNET}); + const config = new AptosConfig({ network: Network.DEVNET }); // const config = new AptosConfig(); const aptos = new Aptos(config); @@ -76,7 +77,7 @@ const example = async () => { }); const questionAsync = promisify(rl.question).bind(rl); - + // eslint-disable-next-line consistent-return async function getUserInput(): Promise { try { @@ -86,10 +87,10 @@ const example = async () => { console.log("No jwt token inputted. Using test jwt token"); console.log(); rl.close(); - return TEST_JWT + return TEST_JWT; } rl.close(); - return response.trim() + return response.trim(); } catch (error) { rl.close(); console.error("Error reading user input:", error); diff --git a/examples/typescript/keyless_escrow.ts b/examples/typescript/keyless_escrow.ts index 4fb4de798..2cf442740 100644 --- a/examples/typescript/keyless_escrow.ts +++ b/examples/typescript/keyless_escrow.ts @@ -32,7 +32,8 @@ const ALICE_INITIAL_BALANCE = 100_000_000_000; const TRANSFER_AMOUNT = 100_000_000; const TRANSFER_AMOUNT_WITH_FEE = TRANSFER_AMOUNT + 600; -const TEST_JWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; +const TEST_JWT = + "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; /** * Prints the balance of an account @@ -56,7 +57,7 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client - const config = new AptosConfig({network: Network.DEVNET}); + const config = new AptosConfig({ network: Network.DEVNET }); const aptos = new Aptos(config); // Create two accounts @@ -82,7 +83,7 @@ const example = async () => { }); const questionAsync = promisify(rl.question).bind(rl); - + // eslint-disable-next-line consistent-return async function getUserInput(): Promise { try { @@ -92,9 +93,9 @@ const example = async () => { console.log("No jwt token inputted. Using test jwt token"); console.log(); // rl.close(); - return TEST_JWT + return TEST_JWT; } - return response.trim() + return response.trim(); } catch (error) { rl.close(); console.error("Error reading user input:", error); @@ -110,9 +111,9 @@ const example = async () => { console.log("No email inputted. Using heliuchuan@gmail.com"); console.log(); // rl.close(); - return "heliuchuan@gmail.com" + return "heliuchuan@gmail.com"; } - return response.trim() + return response.trim(); } catch (error) { rl.close(); console.error("Error reading user input:", error); @@ -120,8 +121,8 @@ const example = async () => { } const iss = "https://accounts.google.com"; - const aud = "407408718192.apps.googleusercontent.com" - const uidKey = "email" + const aud = "407408718192.apps.googleusercontent.com"; + const uidKey = "email"; const jwt = await getUserInput(); @@ -134,8 +135,8 @@ const example = async () => { ephemeralKeyPair: aliceEphem, }); - const uidVal = bobEmail - const pepper = randomBytes(31);; + const uidVal = bobEmail; + const pepper = randomBytes(31); const escrowAddressSeed = computeAddressSeed({ uidKey, uidVal, @@ -144,8 +145,8 @@ const example = async () => { }); const escrowPublicKey = new KeylessPublicKey(iss, escrowAddressSeed); - const multiKey = new MultiKey({publicKeys: [alice.publicKey, escrowPublicKey], signaturesRequired: 1}) - const mkAddr = AuthenticationKey.fromPublicKey({ publicKey: multiKey} ).derivedAddress(); + const multiKey = new MultiKey({ publicKeys: [alice.publicKey, escrowPublicKey], signaturesRequired: 1 }); + const mkAddr = AuthenticationKey.fromPublicKey({ publicKey: multiKey }).derivedAddress(); console.log("\n=== Addresses ===\n"); console.log(`Alice's address is: ${alice.accountAddress}`); @@ -195,15 +196,16 @@ const example = async () => { console.error("Transfer fee:", aliceBalance - (newAliceBalance + TRANSFER_AMOUNT_WITH_FEE)); console.error(""); - const bobJWT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJlbWFpbCI6ImhlbGl1Y2h1YW5AZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJZSlIybkNLYV9kcUlLZjRlOGRJcmt3Iiwibm9uY2UiOiIxMDE3MTg3NDI5NjYzNzY0MDIyMzkyNTM5Nzc4NjU1MzQwMzE0MjA3OTM5MTI0ODAxNDIwOTI2NTYzMzk3NTMzNjg2MzQ4NDk3MDEzMSIsImlhdCI6MTcwOTkzMzgwMiwiZXhwIjoxNzA5OTM3NDAyfQ.iqVu6Uae_lUS7B-nJ_eVIisfgHqHFikb0cwxROuudnSwMYND5OiuG0Zlslx-ZgqEV0Dy28aRJT1zmt-xvgtqjJjiPikgf_1sncgs1M7LweUVDKw88DSifuM9UV5JkuHBFmDgiEAbAlLGdlpAJqgbNNG02yN-cxqLaluXSB13yDUzbBz3b_eHivZiHjp9f2E2x2-vw9MY6x6G6bpc1xBPjjR0Nm1GsPpaz8hyhLj_lUX-dRKwbq2xTrOciucRE0rVEqby1smVfS83AQ9P8wW1nhuo3okuFMM9qut1NsFwRQ0EiS8H4kRd8O5Rc-J2CtNrLAC-gmUfzBDzIjGeuj4VUg" + const bobJWT = + "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJlbWFpbCI6ImhlbGl1Y2h1YW5AZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJZSlIybkNLYV9kcUlLZjRlOGRJcmt3Iiwibm9uY2UiOiIxMDE3MTg3NDI5NjYzNzY0MDIyMzkyNTM5Nzc4NjU1MzQwMzE0MjA3OTM5MTI0ODAxNDIwOTI2NTYzMzk3NTMzNjg2MzQ4NDk3MDEzMSIsImlhdCI6MTcwOTkzMzgwMiwiZXhwIjoxNzA5OTM3NDAyfQ.iqVu6Uae_lUS7B-nJ_eVIisfgHqHFikb0cwxROuudnSwMYND5OiuG0Zlslx-ZgqEV0Dy28aRJT1zmt-xvgtqjJjiPikgf_1sncgs1M7LweUVDKw88DSifuM9UV5JkuHBFmDgiEAbAlLGdlpAJqgbNNG02yN-cxqLaluXSB13yDUzbBz3b_eHivZiHjp9f2E2x2-vw9MY6x6G6bpc1xBPjjR0Nm1GsPpaz8hyhLj_lUX-dRKwbq2xTrOciucRE0rVEqby1smVfS83AQ9P8wW1nhuo3okuFMM9qut1NsFwRQ0EiS8H4kRd8O5Rc-J2CtNrLAC-gmUfzBDzIjGeuj4VUg"; -// const bobJWT = await getUserInput(); + // const bobJWT = await getUserInput(); const bobTempZkIDAccount = await aptos.deriveKeylessAccount({ jwt: bobJWT, uidKey, ephemeralKeyPair: aliceEphem, - pepper + pepper, }); const bobZkID = await aptos.deriveKeylessAccount({ @@ -212,7 +214,7 @@ const example = async () => { ephemeralKeyPair: aliceEphem, }); - const escrowAccount = new MultiKeyAccount({ multiKey, signers: [bobTempZkIDAccount] }) + const escrowAccount = new MultiKeyAccount({ multiKey, signers: [bobTempZkIDAccount] }); // Fund the accounts console.log("\n=== Funding Bob's account ===\n"); @@ -238,8 +240,8 @@ const example = async () => { console.log("\n=== Transferring ===\n"); - const response = await aptos.signAndSubmitTransaction({ signer: escrowAccount, transaction:transferToBobTxn }); - console.log("Transaction hash: ", response.hash) + const response = await aptos.signAndSubmitTransaction({ signer: escrowAccount, transaction: transferToBobTxn }); + console.log("Transaction hash: ", response.hash); await aptos.waitForTransaction({ transactionHash: response.hash, }); diff --git a/src/account/Ed25519Account.ts b/src/account/Ed25519Account.ts index ec7bc6c4c..b74aa6fb3 100644 --- a/src/account/Ed25519Account.ts +++ b/src/account/Ed25519Account.ts @@ -87,7 +87,7 @@ export class Ed25519Account implements Account { } signTransaction(transaction: AnyRawTransaction) { - return this.sign(generateSigningMessageForTransaction(transaction)) + return this.sign(generateSigningMessageForTransaction(transaction)); } // endregion diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 3915ede1a..44b108aae 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -3,8 +3,13 @@ import { randomBytes } from "@noble/hashes/utils"; - -import { EPK_HORIZON_SECS, Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey} from "../core/crypto"; +import { + EPK_HORIZON_SECS, + Ed25519PrivateKey, + EphemeralPublicKey, + EphemeralSignature, + PrivateKey, +} from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; import { HexInput, SigningSchemeInput } from "../types"; @@ -29,7 +34,7 @@ export class EphemeralKeyPair { this.nonce = this.generateNonce(); } - static generate(args?: {scheme: SigningSchemeInput}): EphemeralKeyPair { + static generate(args?: { scheme: SigningSchemeInput }): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { @@ -43,8 +48,8 @@ export class EphemeralKeyPair { generateNonce(): string { const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); - fields.push(BigInt(this.expiryDateSecs)) - fields.push(bytesToBigIntLE(this.blinder)) + fields.push(BigInt(this.expiryDateSecs)); + fields.push(bytesToBigIntLE(this.blinder)); const nonceHash = poseidonHash(fields); return nonceHash.toString(); } @@ -65,7 +70,7 @@ function generateBlinder(): Uint8Array { } function currentTimeInSeconds(): number { - return Math.floor(new Date().getTime() / 1000) + return Math.floor(new Date().getTime() / 1000); } function floorToWholeHour(timestampInSeconds: number): number { diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index d4818a960..f4f700187 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -119,7 +119,7 @@ export class KeylessAccount implements Account { async waitForProofFetch() { if (this.proof instanceof Promise) { - await this.proof + await this.proof; } } diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 8ff9e6ff2..ff1fde44a 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -78,9 +78,7 @@ export class MultiKeyAccount implements Account { async waitForProofFetch() { const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; - await Promise.all( - keylessSigners.filter((signer) => signer.proof instanceof Promise).map( (signer) => signer.proof), - ); + await Promise.all(keylessSigners.filter((signer) => signer.proof instanceof Promise).map((signer) => signer.proof)); } /** diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts index 57c94f13e..c3d7171eb 100644 --- a/src/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -119,7 +119,7 @@ export class SingleKeyAccount implements Account { } signTransaction(transaction: AnyRawTransaction) { - return this.sign(generateSigningMessageForTransaction(transaction)) + return this.sign(generateSigningMessageForTransaction(transaction)); } // endregion diff --git a/src/api/account.ts b/src/api/account.ts index e49e86786..a52feb541 100644 --- a/src/api/account.ts +++ b/src/api/account.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account as AccountModule} from "../account" +import { Account as AccountModule } from "../account"; import { AccountAddress, PrivateKey, AccountAddressInput } from "../core"; import { AccountData, diff --git a/src/api/aptosConfig.ts b/src/api/aptosConfig.ts index c9a2a4cb1..8a6bd8291 100644 --- a/src/api/aptosConfig.ts +++ b/src/api/aptosConfig.ts @@ -135,7 +135,7 @@ export class AptosConfig { isPepperServiceRequest(url: string): boolean { return NetworkToPepperAPI[this.network] === url; } - + /** * Checks if the URL is a known prover service endpoint * diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 9f2d7880e..80823754e 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -35,7 +35,7 @@ export class Keyless { * @param args.jwt jwt token * @returns The pepper */ - async getPepper(args: { jwt: string, ephemeralKeyPair: EphemeralKeyPair; }): Promise { + async getPepper(args: { jwt: string; ephemeralKeyPair: EphemeralKeyPair }): Promise { return getPepper({ aptosConfig: this.config, ...args }); } diff --git a/src/client/post.ts b/src/client/post.ts index f5669f2a0..6749a2013 100644 --- a/src/client/post.ts +++ b/src/client/post.ts @@ -136,7 +136,6 @@ export async function postAptosFaucet( }); } - export async function postAptosPepperService( options: PostAptosRequestOptions, ): Promise> { @@ -147,4 +146,4 @@ export async function postAptosProvingService( options: PostAptosRequestOptions, ): Promise> { return post({ ...options, type: AptosApiType.PROVER }); -} \ No newline at end of file +} diff --git a/src/core/crypto/ed25519.ts b/src/core/crypto/ed25519.ts index 0c5caaf69..6adb9f36e 100644 --- a/src/core/crypto/ed25519.ts +++ b/src/core/crypto/ed25519.ts @@ -7,11 +7,7 @@ import { Serializable, Serializer } from "../../bcs/serializer"; import { AuthenticationKey } from "../authenticationKey"; import { Hex } from "../hex"; import { HexInput, SigningScheme as AuthenticationKeyScheme } from "../../types"; -import { - isValidHardenedPath, - fromDerivationPath as fromDerivationPathInner, - mnemonicToSeed, -} from "./hdKey"; +import { isValidHardenedPath, fromDerivationPath as fromDerivationPathInner, mnemonicToSeed } from "./hdKey"; import { PrivateKey } from "./privateKey"; import { AccountPublicKey, VerifySignatureArgs } from "./publicKey"; import { Signature } from "./signature"; @@ -189,7 +185,9 @@ export class Ed25519PrivateKey extends Serializable implements PrivateKey { if (!isValidHardenedPath(path)) { throw new Error(`Invalid derivation path ${path}`); } - return new Ed25519PrivateKey(fromDerivationPathInner(path, Ed25519PrivateKey.SLIP_0010_SEED, mnemonicToSeed(mnemonics))); + return new Ed25519PrivateKey( + fromDerivationPathInner(path, Ed25519PrivateKey.SLIP_0010_SEED, mnemonicToSeed(mnemonics)), + ); } // endregion diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts index 7e8f9c872..aa171f586 100644 --- a/src/core/crypto/ephemeral.ts +++ b/src/core/crypto/ephemeral.ts @@ -43,7 +43,7 @@ export class EphemeralPublicKey extends PublicKey { * @returns string representation of the public key */ toString(): string { - return this.bcsToHex().toString() + return this.bcsToHex().toString(); } /** @@ -86,7 +86,6 @@ export class EphemeralPublicKey extends PublicKey { } } - export class EphemeralSignature extends Signature { public readonly signature: Signature; diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index a0023eaf1..0c61a4eb9 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -243,7 +243,13 @@ export class SignedGroth16Signature extends Signature { trainingWheelsSignature?: EphemeralSignature; }) { super(); - const { proof, expHorizonSecs = BigInt(EPK_HORIZON_SECS), trainingWheelsSignature, extraField, overrideAudVal } = args; + const { + proof, + expHorizonSecs = BigInt(EPK_HORIZON_SECS), + trainingWheelsSignature, + extraField, + overrideAudVal, + } = args; this.proof = proof; this.expHorizonSecs = expHorizonSecs; this.trainingWheelsSignature = trainingWheelsSignature; diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index cc6e44149..d73b9e181 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -141,15 +141,13 @@ export class MultiKey extends AccountPublicKey { } getIndex(publicKey: PublicKey): number { - - const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey) + const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey); const index = this.publicKeys.findIndex((pk) => pk.toString() === anyPublicKey.toString()); if (index !== -1) { - return index; - } + return index; + } throw new Error("Public key not found in MultiKey"); - } } diff --git a/src/core/crypto/singleKey.ts b/src/core/crypto/singleKey.ts index fde96aed3..07d36aa97 100644 --- a/src/core/crypto/singleKey.ts +++ b/src/core/crypto/singleKey.ts @@ -178,9 +178,9 @@ export class AnySignature extends Signature { case AnySignatureVariant.Secp256k1: signature = Secp256k1Signature.deserialize(deserializer); break; - case AnySignatureVariant.Keyless: - signature = KeylessSignature.deserialize(deserializer); - break; + case AnySignatureVariant.Keyless: + signature = KeylessSignature.deserialize(deserializer); + break; default: throw new Error(`Unknown variant index for AnySignature: ${variantIndex}`); } diff --git a/src/transactions/transactionBuilder/index.ts b/src/transactions/transactionBuilder/index.ts index e6fc29838..1ed9e6e2c 100644 --- a/src/transactions/transactionBuilder/index.ts +++ b/src/transactions/transactionBuilder/index.ts @@ -5,4 +5,3 @@ export * from "./helpers"; export * from "./transactionBuilder"; export * from "./remoteAbi"; export * from "./signingMessage"; - diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index 1abefe025..c4d98d381 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -7,18 +7,9 @@ * and a signed transaction that can be simulated, signed and submitted to chain. */ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; -import { - RAW_TRANSACTION_SALT, - RAW_TRANSACTION_WITH_DATA_SALT, -} from "../../utils/const"; -import { - FeePayerRawTransaction, - MultiAgentRawTransaction, - RawTransaction, -} from "../instances"; -import { - AnyRawTransaction, AnyRawTransactionInstance, -} from "../types"; +import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; +import { FeePayerRawTransaction, MultiAgentRawTransaction, RawTransaction } from "../instances"; +import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; import { Serializable } from "../../bcs"; /** @@ -47,7 +38,7 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin const hash = sha3Hash.create(); hash.update(`APTOS::${domainSeparator}`); - + const prefix = hash.digest(); const body = bytes; @@ -66,10 +57,10 @@ export function generateSigningMessageForSerializable(obj: Serializable): Uint8A export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { const rawTxn = deriveTransactionType(transaction); if (rawTxn instanceof RawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_SALT); - } if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(),RAW_TRANSACTION_WITH_DATA_SALT); + return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_SALT); + } + if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { + return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_WITH_DATA_SALT); } throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); } - diff --git a/src/types/index.ts b/src/types/index.ts index a978f2b66..589c9d057 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -117,7 +117,6 @@ export enum AnySignatureVariant { Keyless = 3, } - export enum EphemeralPublicKeyVariant { Ed25519 = 0, } From feaef7027c94ae5f13f95a988b54aefa4bdb289b Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 30 Apr 2024 03:20:45 -0700 Subject: [PATCH 041/136] 1.13.1 --- src/account/EphemeralKeyPair.ts | 32 ++++++++++++++++--- src/account/KeylessAccount.ts | 54 ++++++++++++++++++++++----------- src/api/keyless.ts | 23 ++------------ src/core/crypto/ephemeral.ts | 3 ++ src/core/crypto/keyless.ts | 4 +-- src/internal/keyless.ts | 22 ++------------ src/utils/const.ts | 4 +-- 7 files changed, 77 insertions(+), 65 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 44b108aae..dd220a6a0 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -12,12 +12,13 @@ import { } from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; -import { HexInput, SigningSchemeInput } from "../types"; +import { EphemeralPublicKeyVariant, HexInput, SigningSchemeInput } from "../types"; +import { Deserializer, Serializable, Serializer } from "../bcs"; -export class EphemeralKeyPair { +export class EphemeralKeyPair extends Serializable{ readonly blinder: Uint8Array; - readonly expiryDateSecs: bigint; + readonly expiryDateSecs: bigint | number; readonly nonce: string; @@ -25,7 +26,8 @@ export class EphemeralKeyPair { readonly publicKey: EphemeralPublicKey; - constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint; blinder?: HexInput }) { + constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint | number; blinder?: HexInput }) { + super() const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); @@ -34,6 +36,28 @@ export class EphemeralKeyPair { this.nonce = this.generateNonce(); } + serialize(serializer: Serializer): void { + serializer.serializeU32AsUleb128(this.publicKey.variant); + serializer.serializeBytes(this.privateKey.toUint8Array()) + serializer.serializeU64(this.expiryDateSecs) + serializer.serializeFixedBytes(this.blinder) + } + + static deserialize(deserializer: Deserializer): EphemeralKeyPair { + const variantIndex = deserializer.deserializeUleb128AsU32(); + let privateKey: PrivateKey; + switch (variantIndex) { + case EphemeralPublicKeyVariant.Ed25519: + privateKey = Ed25519PrivateKey.deserialize(deserializer); + break; + default: + throw new Error(`Unknown variant index for EphemeralPublicKey: ${variantIndex}`); + } + const expiryDateSecs = deserializer.deserializeU64(); + const blinder = deserializer.deserializeFixedBytes(31); + return new EphemeralKeyPair({privateKey, expiryDateSecs, blinder}); + } + static generate(args?: { scheme: SigningSchemeInput }): EphemeralKeyPair { let privateKey: PrivateKey; diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index f4f700187..54d498470 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -22,7 +22,7 @@ import { Account } from "./Account"; import { EphemeralKeyPair } from "./EphemeralKeyPair"; import { Hex } from "../core/hex"; import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; -import { Serializer } from "../bcs"; +import { Deserializer, Serializer } from "../bcs"; import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction } from "../transactions/types"; @@ -44,9 +44,6 @@ export class KeylessAccount implements Account { static readonly SLIP_0010_SEED: string = "32 bytes"; - static readonly APTOS_CONNECT_CLIENT_ID: string = - "734998116548-ib6ircv72o1b6l0no9ol4spnnkr8gm69.apps.googleusercontent.com"; - publicKey: KeylessPublicKey; ephemeralKeyPair: EphemeralKeyPair; @@ -102,6 +99,41 @@ export class KeylessAccount implements Account { this.pepper = pepperBytes; } + async serialize(serializer: Serializer): Promise { + serializer.serializeStr(this.jwt); + serializer.serializeStr(this.uidKey); + serializer.serializeFixedBytes(this.pepper); + this.ephemeralKeyPair.serialize(serializer); + const proof = await this.proof; + proof.serialize(serializer); + } + + static deserialize(deserializer: Deserializer): KeylessAccount { + const jwt = deserializer.deserializeStr(); + const uidKey = deserializer.deserializeStr(); + const pepper = deserializer.deserializeFixedBytes(31); + const ephemeralKeyPair = EphemeralKeyPair.deserialize(deserializer); + const proof = SignedGroth16Signature.deserialize(deserializer); + return KeylessAccount.fromJWTAndProof({ + proofFetcherOrData: proof, + pepper, + uidKey, + jwt, + ephemeralKeyPair, + }); + } + + async bcsToBytes(): Promise { + const serializer = new Serializer(); + await this.serialize(serializer); + return serializer.toUint8Array(); + } + + async bcsToHex(): Promise { + const bcsBytes = await this.bcsToBytes(); + return Hex.fromHexInput(bcsBytes); + } + private async initialize(promise: Promise) { try { this.proof = await promise; @@ -138,7 +170,7 @@ export class KeylessAccount implements Account { const serializer = new Serializer(); serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()); serializer.serializeOption(this.proof.proof); - const signMess = generateSigningMessage(serializer.toUint8Array(), "TransactionAndProof"); + const signMess = generateSigningMessage(serializer.toUint8Array(), "APTOS::TransactionAndProof"); const ephemeralSignature = this.ephemeralKeyPair.sign(signMess); @@ -178,18 +210,6 @@ export class KeylessAccount implements Account { }); } - deriveAptosConnectPublicKey(): KeylessPublicKey { - const { uidKey, uidVal, pepper } = this; - const { iss } = this.publicKey; - const addressSeed = computeAddressSeed({ - uidKey, - uidVal, - aud: KeylessAccount.APTOS_CONNECT_CLIENT_ID, - pepper, - }); - return new KeylessPublicKey(iss, addressSeed); - } - // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this verifySignature(args: { message: HexInput; signature: Signature }): boolean { return true; diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 80823754e..6b523feaf 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,28 +1,11 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account, EphemeralKeyPair, KeylessAccount, MultiKeyAccount } from "../account"; +import { EphemeralKeyPair, KeylessAccount } from "../account"; import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; -interface BaseDeriveKeylessAccountArgs { - jwt: string; - ephemeralKeyPair: EphemeralKeyPair; - uidKey?: string; - pepper?: HexInput; - extraFieldKey?: string; - fetchProofAsync?: boolean; -} - -interface DeriveKeylessAccountArgs extends BaseDeriveKeylessAccountArgs { - disableConnect: true; -} - -interface DeriveKeylessAccountWithConnectArgs extends BaseDeriveKeylessAccountArgs { - disableConnect?: boolean; -} - /** * A class to query all `OIDB` related queries on Aptos. */ @@ -39,8 +22,6 @@ export class Keyless { return getPepper({ aptosConfig: this.config, ...args }); } - async deriveKeylessAccount(args: DeriveKeylessAccountArgs): Promise; - async deriveKeylessAccount(args: DeriveKeylessAccountWithConnectArgs): Promise; async deriveKeylessAccount(args: { jwt: string; ephemeralKeyPair: EphemeralKeyPair; @@ -49,7 +30,7 @@ export class Keyless { extraFieldKey?: string; disableConnect?: boolean; fetchProofAsync?: boolean; - }): Promise { + }): Promise { return deriveKeylessAccount({ aptosConfig: this.config, ...args }); } } diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts index aa171f586..3fb97c322 100644 --- a/src/core/crypto/ephemeral.ts +++ b/src/core/crypto/ephemeral.ts @@ -16,12 +16,15 @@ export class EphemeralPublicKey extends PublicKey { */ public readonly publicKey: PublicKey; + public readonly variant: EphemeralPublicKeyVariant; + constructor(publicKey: PublicKey) { super(); const publicKeyType = publicKey.constructor.name; switch (publicKeyType) { case Ed25519PublicKey.name: this.publicKey = publicKey; + this.variant = EphemeralPublicKeyVariant.Ed25519; break; default: throw new Error(`Unsupported key for EphemeralPublicKey - ${publicKeyType}`); diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 0c61a4eb9..4d451474f 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -419,7 +419,7 @@ export class KeylessSignature extends Signature { readonly jwtHeader: string; - readonly expiryDateSecs: bigint; + readonly expiryDateSecs: bigint | number; readonly ephemeralPublicKey: EphemeralPublicKey; @@ -433,7 +433,7 @@ export class KeylessSignature extends Signature { constructor(args: { jwtHeader: string; openIdSignatureOrZkProof: OpenIdSignatureOrZkProof; - expiryDateSecs: bigint; + expiryDateSecs: bigint | number; ephemeralPublicKey: EphemeralPublicKey; ephemeralSignature: EphemeralSignature; }) { diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 244c2e427..ed73608a1 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -18,12 +18,11 @@ import { EphemeralSignature, Groth16Zkp, Hex, - MultiKey, SignedGroth16Signature, } from "../core"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; -import { EphemeralKeyPair, KeylessAccount, MultiKeyAccount } from "../account"; +import { EphemeralKeyPair, KeylessAccount } from "../account"; import { PepperFetchResponse, ProverResponse } from "../types/keyless"; const APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST = "APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST"; @@ -171,15 +170,10 @@ export async function deriveKeylessAccount(args: { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; - disableConnect?: boolean; fetchProofAsync?: boolean; -}): Promise { +}): Promise { const { fetchProofAsync } = args; - let { pepper, disableConnect } = args; - - if (pepper || disableConnect) { - disableConnect = true; - } + let { pepper } = args; if (pepper === undefined) { pepper = await getPepper(args); } else if (Hex.fromHexInput(pepper).toUint8Array().length !== 31) { @@ -191,15 +185,5 @@ export async function deriveKeylessAccount(args: { const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proofFetcherOrData: proof, pepper }); - if (disableConnect === true) { return keylessAccount; - } - - const aptosConnectPublicKey = keylessAccount.deriveAptosConnectPublicKey(); - - const multiKey = new MultiKey({ - publicKeys: [keylessAccount.publicKey, aptosConnectPublicKey], - signaturesRequired: 1, - }); - return new MultiKeyAccount({ multiKey, signers: [keylessAccount] }); } diff --git a/src/utils/const.ts b/src/utils/const.ts index ea92d01dd..21e65af23 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -45,8 +45,8 @@ export const DEFAULT_TXN_TIMEOUT_SEC = 20; */ export const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; -export const RAW_TRANSACTION_SALT = "RawTransaction"; -export const RAW_TRANSACTION_WITH_DATA_SALT = "RawTransactionWithData"; +export const RAW_TRANSACTION_SALT = "APTOS::RawTransaction"; +export const RAW_TRANSACTION_WITH_DATA_SALT = "APTOS::RawTransactionWithData"; /** * The list of supported Processor types for our indexer api. From f893121f7387d747d86ee8dd65fc66378738f389 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 30 Apr 2024 03:55:30 -0700 Subject: [PATCH 042/136] 1.13.1-zeta.3 --- package.json | 2 +- src/account/KeylessAccount.ts | 4 ++++ src/api/keyless.ts | 1 - src/version.ts | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 69f776a2f..a27138e13 100644 --- a/package.json +++ b/package.json @@ -90,5 +90,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.13.1-zeta.1" + "version": "1.13.1-zeta.3" } diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 54d498470..7dd3a55df 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -215,6 +215,10 @@ export class KeylessAccount implements Account { return true; } + static fromBytes(bytes: Uint8Array): KeylessAccount { + return KeylessAccount.deserialize(new Deserializer(bytes)); + } + static fromJWTAndProof(args: { proofFetcherOrData: Promise | SignedGroth16Signature; jwt: string; diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 6b523feaf..3c9f48f7b 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -28,7 +28,6 @@ export class Keyless { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; - disableConnect?: boolean; fetchProofAsync?: boolean; }): Promise { return deriveKeylessAccount({ aptosConfig: this.config, ...args }); diff --git a/src/version.ts b/src/version.ts index 2e939d51d..2e187550f 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.13.1-zeta.0"; +export const VERSION = "1.13.1-zeta.3"; From a8e98fb4f490fffb6b88ea75a269502e8bb3ed36 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 30 Apr 2024 15:48:52 -0700 Subject: [PATCH 043/136] 1.13.1-zeta.5 --- package.json | 2 +- src/account/EphemeralKeyPair.ts | 24 +++++++++++------ src/account/KeylessAccount.ts | 46 ++++++++++++--------------------- src/api/keyless.ts | 1 - src/internal/keyless.ts | 12 +++------ src/version.ts | 2 +- 6 files changed, 38 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index a27138e13..5fd5ecca9 100644 --- a/package.json +++ b/package.json @@ -90,5 +90,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.13.1-zeta.3" + "version": "1.13.1-zeta.5" } diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index dd220a6a0..db5670f2b 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -15,19 +15,19 @@ import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/c import { EphemeralPublicKeyVariant, HexInput, SigningSchemeInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; -export class EphemeralKeyPair extends Serializable{ +export class EphemeralKeyPair extends Serializable { readonly blinder: Uint8Array; readonly expiryDateSecs: bigint | number; readonly nonce: string; - readonly privateKey: PrivateKey; + private privateKey: PrivateKey; - readonly publicKey: EphemeralPublicKey; + private publicKey: EphemeralPublicKey; constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint | number; blinder?: HexInput }) { - super() + super(); const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); @@ -36,11 +36,15 @@ export class EphemeralKeyPair extends Serializable{ this.nonce = this.generateNonce(); } + getPublicKey(): EphemeralPublicKey { + return this.publicKey; + } + serialize(serializer: Serializer): void { serializer.serializeU32AsUleb128(this.publicKey.variant); - serializer.serializeBytes(this.privateKey.toUint8Array()) - serializer.serializeU64(this.expiryDateSecs) - serializer.serializeFixedBytes(this.blinder) + serializer.serializeBytes(this.privateKey.toUint8Array()); + serializer.serializeU64(this.expiryDateSecs); + serializer.serializeFixedBytes(this.blinder); } static deserialize(deserializer: Deserializer): EphemeralKeyPair { @@ -55,7 +59,11 @@ export class EphemeralKeyPair extends Serializable{ } const expiryDateSecs = deserializer.deserializeU64(); const blinder = deserializer.deserializeFixedBytes(31); - return new EphemeralKeyPair({privateKey, expiryDateSecs, blinder}); + return new EphemeralKeyPair({ privateKey, expiryDateSecs, blinder }); + } + + static fromBytes(bytes: Uint8Array): EphemeralKeyPair { + return EphemeralKeyPair.deserialize(new Deserializer(bytes)); } static generate(args?: { scheme: SigningSchemeInput }): EphemeralKeyPair { diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 7dd3a55df..01a89de8c 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -58,7 +58,7 @@ export class KeylessAccount implements Account { accountAddress: AccountAddress; - proof: SignedGroth16Signature | Promise; + proof: SignedGroth16Signature; signingScheme: SigningScheme; @@ -72,10 +72,10 @@ export class KeylessAccount implements Account { uidVal: string; aud: string; pepper: HexInput; - proofFetcherOrData: Promise | SignedGroth16Signature; + proof: SignedGroth16Signature; jwt: string; }) { - const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofFetcherOrData, jwt } = args; + const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proof, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; const addressSeed = computeAddressSeed(args); this.publicKey = new KeylessPublicKey(iss, addressSeed); @@ -84,12 +84,7 @@ export class KeylessAccount implements Account { this.uidVal = uidVal; this.aud = aud; this.jwt = jwt; - if (proofFetcherOrData instanceof Promise) { - this.proof = proofFetcherOrData; - this.initialize(proofFetcherOrData); - } else { - this.proof = proofFetcherOrData; - } + this.proof = proof; this.signingScheme = SigningScheme.SingleKey; const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); @@ -99,13 +94,12 @@ export class KeylessAccount implements Account { this.pepper = pepperBytes; } - async serialize(serializer: Serializer): Promise { + serialize(serializer: Serializer): void { serializer.serializeStr(this.jwt); serializer.serializeStr(this.uidKey); serializer.serializeFixedBytes(this.pepper); this.ephemeralKeyPair.serialize(serializer); - const proof = await this.proof; - proof.serialize(serializer); + this.proof.serialize(serializer); } static deserialize(deserializer: Deserializer): KeylessAccount { @@ -115,7 +109,7 @@ export class KeylessAccount implements Account { const ephemeralKeyPair = EphemeralKeyPair.deserialize(deserializer); const proof = SignedGroth16Signature.deserialize(deserializer); return KeylessAccount.fromJWTAndProof({ - proofFetcherOrData: proof, + proof, pepper, uidKey, jwt, @@ -123,25 +117,17 @@ export class KeylessAccount implements Account { }); } - async bcsToBytes(): Promise { + bcsToBytes(): Uint8Array { const serializer = new Serializer(); - await this.serialize(serializer); + this.serialize(serializer); return serializer.toUint8Array(); } - async bcsToHex(): Promise { - const bcsBytes = await this.bcsToBytes(); + bcsToHex(): Hex { + const bcsBytes = this.bcsToBytes(); return Hex.fromHexInput(bcsBytes); } - private async initialize(promise: Promise) { - try { - this.proof = await promise; - } catch (error) { - throw new Error("Failed to fetch proof"); - } - } - signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { const raw = deriveTransactionType(transaction); const signature = new AnySignature(this.sign(raw.bcsToBytes())); @@ -165,7 +151,7 @@ export class KeylessAccount implements Account { throw new Error("Failed to fetch proof."); } const jwtHeader = this.jwt.split(".")[0]; - const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); const serializer = new Serializer(); serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()); @@ -199,7 +185,7 @@ export class KeylessAccount implements Account { }); const { expiryDateSecs } = this.ephemeralKeyPair; - const ephemeralPublicKey = this.ephemeralKeyPair.publicKey; + const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); const ephemeralSignature = this.ephemeralKeyPair.sign(data); return new KeylessSignature({ jwtHeader, @@ -220,13 +206,13 @@ export class KeylessAccount implements Account { } static fromJWTAndProof(args: { - proofFetcherOrData: Promise | SignedGroth16Signature; + proof: SignedGroth16Signature; jwt: string; ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; uidKey?: string; }): KeylessAccount { - const { proofFetcherOrData, jwt, ephemeralKeyPair, pepper } = args; + const { proof, jwt, ephemeralKeyPair, pepper } = args; const uidKey = args.uidKey ?? "sub"; const jwtPayload = jwtDecode(jwt); @@ -237,7 +223,7 @@ export class KeylessAccount implements Account { const aud = jwtPayload.aud!; const uidVal = jwtPayload[uidKey]; return new KeylessAccount({ - proofFetcherOrData, + proof, ephemeralKeyPair, iss, uidKey, diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 3c9f48f7b..a5bfbd420 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -28,7 +28,6 @@ export class Keyless { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; - fetchProofAsync?: boolean; }): Promise { return deriveKeylessAccount({ aptosConfig: this.config, ...args }); } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index ed73608a1..460a67958 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -79,7 +79,7 @@ export async function getPepper(args: { const body = { jwt_b64: jwt, - epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), + epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, @@ -131,7 +131,7 @@ export async function getProof(args: { } const json = { jwt_b64: jwt, - epk: ephemeralKeyPair.publicKey.bcsToHex().toStringWithoutPrefix(), + epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), exp_horizon_secs: EPK_HORIZON_SECS, @@ -170,20 +170,16 @@ export async function deriveKeylessAccount(args: { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; - fetchProofAsync?: boolean; }): Promise { - const { fetchProofAsync } = args; let { pepper } = args; if (pepper === undefined) { pepper = await getPepper(args); } else if (Hex.fromHexInput(pepper).toUint8Array().length !== 31) { throw new Error("Pepper needs to be 31 bytes"); } + const proof = await getProof({ ...args, pepper }); - const proofPromise = getProof({ ...args, pepper }); - const proof = fetchProofAsync ? proofPromise : await proofPromise; - - const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proofFetcherOrData: proof, pepper }); + const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proof, pepper }); return keylessAccount; } diff --git a/src/version.ts b/src/version.ts index 2e187550f..e6abca100 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.13.1-zeta.3"; +export const VERSION = "1.13.1-zeta.5"; From b7a8ddcc81d6629921ebe2ff85203986a55fa8b3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 6 May 2024 10:50:11 -0700 Subject: [PATCH 044/136] add expiry check helper --- src/account/EphemeralKeyPair.ts | 8 ++++++++ src/account/KeylessAccount.ts | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index db5670f2b..daa46a847 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -40,6 +40,11 @@ export class EphemeralKeyPair extends Serializable { return this.publicKey; } + isExpired(): boolean { + const currentTimeSecs: number = Math.floor(Date.now() / 1000); + return currentTimeSecs > this.expiryDateSecs; + } + serialize(serializer: Serializer): void { serializer.serializeU32AsUleb128(this.publicKey.variant); serializer.serializeBytes(this.privateKey.toUint8Array()); @@ -93,6 +98,9 @@ export class EphemeralKeyPair extends Serializable { * @returns EphemeralSignature */ sign(data: HexInput): EphemeralSignature { + if (this.isExpired()) { + throw new Error("EphemeralKeyPair has expired") + } return new EphemeralSignature(this.privateKey.sign(data)); } } diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 01a89de8c..14839a1e1 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -117,6 +117,10 @@ export class KeylessAccount implements Account { }); } + isExpired(): boolean { + return this.ephemeralKeyPair.isExpired(); + } + bcsToBytes(): Uint8Array { const serializer = new Serializer(); this.serialize(serializer); From 2b81a99a2e36b82b6f1175fc905df9b2af6acce0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 6 May 2024 13:26:29 -0700 Subject: [PATCH 045/136] Add event emitter --- src/account/KeylessAccount.ts | 77 ++++++++++++++++++++++++++++++----- src/api/keyless.ts | 3 +- src/internal/keyless.ts | 11 +++-- 3 files changed, 75 insertions(+), 16 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 14839a1e1..3c91af508 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -3,6 +3,7 @@ import { JwtPayload, jwtDecode } from "jwt-decode"; import { decode } from "base-64"; +import EventEmitter from "eventemitter3"; import { HexInput, SigningScheme } from "../types"; import { AccountAddress } from "../core/accountAddress"; import { @@ -39,6 +40,23 @@ function base64UrlDecode(base64Url: string): string { return decodedString; } +export type ProofFetchSuccess = { + status: "Success"; +}; + +export type ProofFetchFailure = { + status: "Failed"; + error: string; +}; + +export type ProofFetchStatus = ProofFetchSuccess | ProofFetchFailure + +export type ProofFetchCallback = (status: ProofFetchStatus) => Promise; + +export interface ProofFetchEvents { + proofFetchFinish: (status: ProofFetchStatus) => void; +} + export class KeylessAccount implements Account { static readonly PEPPER_LENGTH: number = 31; @@ -58,12 +76,16 @@ export class KeylessAccount implements Account { accountAddress: AccountAddress; - proof: SignedGroth16Signature; + proof: SignedGroth16Signature | undefined; + + proofOrPromise: SignedGroth16Signature | Promise; signingScheme: SigningScheme; jwt: string; + emitter: EventEmitter; + constructor(args: { address?: AccountAddress; ephemeralKeyPair: EphemeralKeyPair; @@ -72,10 +94,11 @@ export class KeylessAccount implements Account { uidVal: string; aud: string; pepper: HexInput; - proof: SignedGroth16Signature; + proofOrFetcher: SignedGroth16Signature | Promise; + proofFetchCallback?: ProofFetchCallback jwt: string; }) { - const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proof, jwt } = args; + const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; const addressSeed = computeAddressSeed(args); this.publicKey = new KeylessPublicKey(iss, addressSeed); @@ -84,7 +107,21 @@ export class KeylessAccount implements Account { this.uidVal = uidVal; this.aud = aud; this.jwt = jwt; - this.proof = proof; + this.emitter = new EventEmitter(); + this.proofOrPromise = proofOrFetcher; + if (proofOrFetcher instanceof SignedGroth16Signature) { + this.proof = proofOrFetcher; + } else { + if (proofFetchCallback === undefined) { + throw new Error("Must provide callback") + } + this.emitter.on("proofFetchFinish", async (status) => { + await proofFetchCallback(status); + this.emitter.removeAllListeners(); + }); + this.init(proofOrFetcher); + } + this.signingScheme = SigningScheme.SingleKey; const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); @@ -94,11 +131,27 @@ export class KeylessAccount implements Account { this.pepper = pepperBytes; } + async init(promise: Promise) { + try { + this.proof = await promise; + this.emitter.emit("proofFetchFinish", {status: "Success"}); + } catch (error) { + if (error instanceof Error) { + this.emitter.emit("proofFetchFinish", {status: "Failed", error: error.toString()}); + } else { + this.emitter.emit("proofFetchFinish", {status: "Failed", error: "Unknown"}); + } + } + } + serialize(serializer: Serializer): void { serializer.serializeStr(this.jwt); serializer.serializeStr(this.uidKey); serializer.serializeFixedBytes(this.pepper); this.ephemeralKeyPair.serialize(serializer); + if (this.proof === undefined) { + throw new Error("Connot serialize - proof undefined") + } this.proof.serialize(serializer); } @@ -140,8 +193,8 @@ export class KeylessAccount implements Account { } async waitForProofFetch() { - if (this.proof instanceof Promise) { - await this.proof; + if (this.proofOrPromise instanceof Promise) { + await this.proofOrPromise; } } @@ -151,8 +204,8 @@ export class KeylessAccount implements Account { if (expiryDateSecs < currentTimeInSeconds) { throw new Error("Ephemeral key pair is expired."); } - if (this.proof instanceof Promise) { - throw new Error("Failed to fetch proof."); + if (this.proof === undefined) { + throw new Error("Proof not found"); } const jwtHeader = this.jwt.split(".")[0]; const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); @@ -210,13 +263,14 @@ export class KeylessAccount implements Account { } static fromJWTAndProof(args: { - proof: SignedGroth16Signature; + proof: SignedGroth16Signature | Promise; jwt: string; ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; uidKey?: string; + proofFetchCallback?: ProofFetchCallback; }): KeylessAccount { - const { proof, jwt, ephemeralKeyPair, pepper } = args; + const { proof, jwt, ephemeralKeyPair, pepper, proofFetchCallback } = args; const uidKey = args.uidKey ?? "sub"; const jwtPayload = jwtDecode(jwt); @@ -227,7 +281,7 @@ export class KeylessAccount implements Account { const aud = jwtPayload.aud!; const uidVal = jwtPayload[uidKey]; return new KeylessAccount({ - proof, + proofOrFetcher: proof, ephemeralKeyPair, iss, uidKey, @@ -235,6 +289,7 @@ export class KeylessAccount implements Account { aud, pepper, jwt, + proofFetchCallback, }); } diff --git a/src/api/keyless.ts b/src/api/keyless.ts index a5bfbd420..436654258 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { EphemeralKeyPair, KeylessAccount } from "../account"; +import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; import { deriveKeylessAccount, getPepper } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; @@ -28,6 +28,7 @@ export class Keyless { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; + proofFetchCallback?: ProofFetchCallback; }): Promise { return deriveKeylessAccount({ aptosConfig: this.config, ...args }); } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 460a67958..6ad4a16a4 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -22,7 +22,7 @@ import { } from "../core"; import { HexInput } from "../types"; import { Serializer } from "../bcs"; -import { EphemeralKeyPair, KeylessAccount } from "../account"; +import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; import { PepperFetchResponse, ProverResponse } from "../types/keyless"; const APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST = "APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST"; @@ -84,7 +84,6 @@ export async function getPepper(args: { epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, }; - // console.log(JSON.stringify(body)); const { data } = await postAptosPepperService({ aptosConfig, path: "fetch", @@ -170,16 +169,20 @@ export async function deriveKeylessAccount(args: { uidKey?: string; pepper?: HexInput; extraFieldKey?: string; + proofFetchCallback?: ProofFetchCallback; }): Promise { + const { proofFetchCallback } = args; let { pepper } = args; if (pepper === undefined) { pepper = await getPepper(args); } else if (Hex.fromHexInput(pepper).toUint8Array().length !== 31) { throw new Error("Pepper needs to be 31 bytes"); } - const proof = await getProof({ ...args, pepper }); - const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proof, pepper }); + const proofPromise = getProof({ ...args, pepper }); + const proof = proofFetchCallback ? proofPromise : await proofPromise; + + const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proof, pepper, proofFetchCallback }); return keylessAccount; } From 6ec0a7cea0645dd4aa83bca23e1c974b2e6d165c Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 6 May 2024 13:26:59 -0700 Subject: [PATCH 046/136] 1.13.3-zeta.1 --- package.json | 2 +- src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b9b76639c..8f43b60df 100644 --- a/package.json +++ b/package.json @@ -90,5 +90,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.13.3-zeta.0" + "version": "1.13.3-zeta.1" } diff --git a/src/version.ts b/src/version.ts index b999b4196..772225da6 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.13.3-zeta.0"; +export const VERSION = "1.13.3-zeta.1"; From aaaeed5b26baf198549ffe07bd67538b76419e92 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 10 May 2024 13:54:12 -0700 Subject: [PATCH 047/136] 1.13.3-zeta.3 --- package.json | 2 +- src/internal/keyless.ts | 82 +++------------------------------------ src/types/keyless.ts | 2 +- src/utils/apiEndpoints.ts | 12 +++--- src/version.ts | 2 +- 5 files changed, 15 insertions(+), 85 deletions(-) diff --git a/package.json b/package.json index 8f43b60df..63b1650f2 100644 --- a/package.json +++ b/package.json @@ -90,5 +90,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.13.3-zeta.1" + "version": "1.13.3-zeta.3" } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 6ad4a16a4..fdbd1ce40 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -8,64 +8,13 @@ * faucet namespace and without having a dependency cycle error. */ import { jwtDecode } from "jwt-decode"; -import { bls12_381 as bls } from "@noble/curves/bls12-381"; -import { ProjPointType } from "@noble/curves/abstract/weierstrass"; import { AptosConfig } from "../api/aptosConfig"; -import { getAptosPepperService, postAptosPepperService, postAptosProvingService } from "../client"; -import { - APTOS_BIP44_DEFAULT_DERIVATION_PATH, - EPK_HORIZON_SECS, - EphemeralSignature, - Groth16Zkp, - Hex, - SignedGroth16Signature, -} from "../core"; +import { postAptosPepperService, postAptosProvingService } from "../client"; +import { EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; import { HexInput } from "../types"; -import { Serializer } from "../bcs"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; import { PepperFetchResponse, ProverResponse } from "../types/keyless"; -const APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST = "APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST"; - -function stringToUint8Array(str: string): Uint8Array { - const encoder = new TextEncoder(); - return encoder.encode(str); -} - -const PINKAS_VUF_SECRET_KEY_BASE_AFFINE = bls.G2.hashToCurve( - stringToUint8Array("APTOS_KEYLESS_PEPPER_PINKAS_VUF_SECRET_KEY_BASE"), - { DST: APTOS_KEYLESS_PEPPER_PINKAS_VUF_DST }, -).toAffine(); - -function getPepperInput(args: { jwt: string; uidKey?: string }): ProjPointType { - const { jwt, uidKey } = args; - const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); - const serializer = new Serializer(); - serializer.serializeStr(jwtPayload.iss); - serializer.serializeStr(jwtPayload.aud); - serializer.serializeStr(jwtPayload[uidKey || "sub"]); - serializer.serializeStr(uidKey || "sub"); - const serial = serializer.toUint8Array(); - const msg = bls.G1.hashToCurve(serial, { DST: "APTOS_PEPPER_SERVICE_BLS12381_VUF_DST" }).toAffine(); - const pp = bls.G1.ProjectivePoint.fromAffine(msg); - return pp; -} - -async function verifyPepperBase(args: { - aptosConfig: AptosConfig; - pepperInput: ProjPointType; - pepperBase: Uint8Array; -}): Promise { - const { aptosConfig, pepperInput, pepperBase } = args; - const { data: pubKeyResponse } = await getAptosPepperService({ - aptosConfig, - path: "vrf-pub-key", - originMethod: "getPepper", - }); - const publicKeyFromService = bls.G2.ProjectivePoint.fromHex(pubKeyResponse.vrf_public_key_hex_string); - return bls.verifyShortSignature(pepperBase, pepperInput, publicKeyFromService); -} - export async function getPepper(args: { aptosConfig: AptosConfig; jwt: string; @@ -74,8 +23,7 @@ export async function getPepper(args: { derivationPath?: string; verify?: boolean; }): Promise { - const { aptosConfig, jwt, ephemeralKeyPair, uidKey, verify } = args; - let { derivationPath } = args; + const { aptosConfig, jwt, ephemeralKeyPair, uidKey, derivationPath } = args; const body = { jwt_b64: jwt, @@ -83,6 +31,7 @@ export async function getPepper(args: { exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), uid_key: uidKey, + derivation_path: derivationPath, }; const { data } = await postAptosPepperService({ aptosConfig, @@ -91,26 +40,7 @@ export async function getPepper(args: { originMethod: "getPepper", overrides: { WITH_CREDENTIALS: false }, }); - const pepperBase = Hex.fromHexInput(data.signature).toUint8Array(); - - if (verify) { - const pepperVerified = verifyPepperBase({ aptosConfig, pepperBase, pepperInput: getPepperInput(args) }); - if (!pepperVerified) { - throw new Error("Unable to verify"); - } - } - // This takes the BLS VUF H(m)^sk and transforms it into a Pinkas VUF e(H(m), g_3^sk), where g_3 is the base of the secret key (computed pseudo-randomly via hash-to-curve). - // This gives us the freedom of either decentralizing the pepper service as a BLS-based MPC or on top of the validators, by reusing the Pinkas WVUF-based randomness infrastructure. - const newPepperBase = bls.pairing( - bls.G1.ProjectivePoint.fromHex(pepperBase), - bls.G2.ProjectivePoint.fromAffine(PINKAS_VUF_SECRET_KEY_BASE_AFFINE), - ); - - if (derivationPath === undefined) { - derivationPath = APTOS_BIP44_DEFAULT_DERIVATION_PATH; - } - const pepper = KeylessAccount.fromDerivationPath(derivationPath, bls.fields.Fp12.toBytes(newPepperBase)); - return pepper.slice(0, 31); + return Hex.fromHexInput(data.pepper).toUint8Array(); } export async function getProof(args: { @@ -184,5 +114,5 @@ export async function deriveKeylessAccount(args: { const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proof, pepper, proofFetchCallback }); - return keylessAccount; + return keylessAccount; } diff --git a/src/types/keyless.ts b/src/types/keyless.ts index 81d8e917d..78e335247 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -3,4 +3,4 @@ export type ProverResponse = { public_inputs_hash: string; training_wheels_signature: string; }; -export type PepperFetchResponse = { signature: string }; +export type PepperFetchResponse = { signature: string; pepper: string; address: string }; diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index d505adb6e..41933d26e 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -27,16 +27,16 @@ export const NetworkToFaucetAPI: Record = { export const NetworkToPepperAPI: Record = { mainnet: "mainnet not yet ready, requires sdk upgrade", - testnet: "https://api.testnet.aptoslabs.com/keyless/pepper/v0", - devnet: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", - local: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", + testnet: "https://pepper.keyless.testnet.aptoslabs.com/v0", + devnet: "https://pepper.keyless.devnet.aptoslabs.com/v0", + local: "https://pepper.keyless.devnet.aptoslabs.com/v0", }; export const NetworkToProverAPI: Record = { mainnet: "mainnet not yet ready, requires sdk upgrade", - testnet: "https://api.testnet.aptoslabs.com/keyless/prover/v0", - devnet: "https://api.devnet.aptoslabs.com/keyless/prover/v0", - local: "https://api.devnet.aptoslabs.com/keyless/prover/v0", + testnet: "https://prover.keyless.testnet.aptoslabs.com/v0", + devnet: "https://prover.keyless.devnet.aptoslabs.com/v0", + local: "https://prover.keyless.devnet.aptoslabs.com/v0", }; export enum Network { diff --git a/src/version.ts b/src/version.ts index 772225da6..4896effdd 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.13.3-zeta.1"; +export const VERSION = "1.13.3-zeta.3"; From 75dbc007745c4e1b5ff347fa509a41953c8165c0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 02:01:05 -0400 Subject: [PATCH 048/136] address comments --- src/account/Account.ts | 9 +++++++-- src/account/MultiKeyAccount.ts | 33 +++++++++++++++++---------------- src/account/SingleKeyAccount.ts | 8 ++++---- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/account/Account.ts b/src/account/Account.ts index 6f26370f1..771ad878a 100644 --- a/src/account/Account.ts +++ b/src/account/Account.ts @@ -218,17 +218,22 @@ export abstract class Account { /** * Sign a transaction using the available signing capabilities. * @param transaction the raw transaction - * @return the AccountAuthenticator containing the signature og the transaction, together with the account's public key + * @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key */ abstract signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; /** * Sign the given message with the private key. * @param message in HexInput format - * @returns AccountSignature + * @returns Signature */ abstract sign(message: HexInput): Signature; + /** + * Sign the given transaction. + * @param message in HexInput format + * @returns Signature + */ abstract signTransaction(transaction: AnyRawTransaction): Signature; /** diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 528e80993..6f30570c4 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -29,17 +29,12 @@ export class MultiKeyAccount implements Account { signaturesBitmap: Uint8Array; /** - * constructor for Account + * constructor for MultiKeyAccount * - * Need to update this to use the new crypto library if new schemes are added. - * - * @param args.privateKey PrivateKey - private key of the account - * @param args.address AccountAddress - address of the account - * @param args.legacy optional. If set to false, the keypair authentication keys will be derived with a unified scheme. - * Defaults to deriving an authentication key with the legacy scheme. - * - * This method is private because it should only be called by the factory static methods. - * @returns Account + * @param args.multiKey the multikey of the account which consists of N public keys and a number M which is + * the number of required signatures. + * @param args.signers an array of M signers that will be used to sign the transaction + * @returns MultiKeyAccount */ constructor(args: { multiKey: MultiKey; signers: Account[] }) { const { multiKey, signers } = args; @@ -57,6 +52,14 @@ export class MultiKeyAccount implements Account { this.signaturesBitmap = this.publicKey.createBitmap({ bits }); } + /** + * Static constructor for MultiKeyAccount + * + * @param args.publicKeys the N public keys of the MultiKeyAccount + * @param args.signaturesRequired the number of signatures required + * @param args.signers an array of M signers that will be used to sign the transaction + * @returns MultiKeyAccount + */ static fromPublicKeysAndSigners(args: { publicKeys: PublicKey[]; signaturesRequired: number; @@ -71,17 +74,15 @@ export class MultiKeyAccount implements Account { return account instanceof MultiKeyAccount; } - signWithAuthenticator(transaction: AnyRawTransaction) { + signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorMultiKey { return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } /** - * Sign the given message with the private key. - * - * TODO: Add sign transaction or specific types + * Sign the given message with the account. * * @param data in HexInput format - * @returns Signature + * @returns MultiSignature */ sign(data: HexInput): MultiSignature { const signatures = []; @@ -91,7 +92,7 @@ export class MultiKeyAccount implements Account { return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); } - signTransaction(transaction: AnyRawTransaction) { + signTransaction(transaction: AnyRawTransaction): MultiSignature { const signatures = []; for (const signer of this.signers) { signatures.push(signer.signTransaction(transaction)); diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts index cb886c4c7..e1028b5af 100644 --- a/src/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -108,16 +108,16 @@ export class SingleKeyAccount implements Account { return this.publicKey.verifySignature(args); } - signWithAuthenticator(transaction: AnyRawTransaction) { - const signature = this.sign(generateSigningMessageForTransaction(transaction)); + signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { + const signature = this.signTransaction(transaction); return new AccountAuthenticatorSingleKey(this.publicKey, signature); } - sign(message: HexInput) { + sign(message: HexInput): AnySignature { return new AnySignature(this.privateKey.sign(message)); } - signTransaction(transaction: AnyRawTransaction) { + signTransaction(transaction: AnyRawTransaction): AnySignature { return this.sign(generateSigningMessageForTransaction(transaction)); } From 069fc97b4bce508249abd15449140176f54c7ae3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 05:02:52 -0400 Subject: [PATCH 049/136] address more comments --- .../transactionBuilder/signingMessage.ts | 47 +++++--- tests/unit/signingMessage.test.ts | 101 ++++++++++++++++++ 2 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 tests/unit/signingMessage.test.ts diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index f4e82fc6c..c4a68747b 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -2,13 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 /** - * This file handles the transaction creation lifecycle. - * It holds different operations to generate a transaction payload, a raw transaction, - * and a signed transaction that can be simulated, signed and submitted to chain. + * This file handles the generation of the signing message. */ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; -import { FeePayerRawTransaction, MultiAgentRawTransaction, RawTransaction } from "../instances"; +import { FeePayerRawTransaction, MultiAgentRawTransaction } from "../instances"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; import { Serializable } from "../../bcs"; @@ -34,6 +32,14 @@ export function deriveTransactionType(transaction: AnyRawTransaction): AnyRawTra return transaction.rawTransaction; } +/** + * Generates the 'signing message' form of a message to be signed. + * + * @param bytes The byte representation of the message to be signed and sent to the chain + * @param domainSeparator A domain separator that starts with 'APTOS::' + * + * @returns The Uint8Array of the signing message + */ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: string): Uint8Array { const hash = sha3Hash.create(); @@ -54,17 +60,34 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin return mergedArray; } -export function generateSigningMessageForSerializable(obj: Serializable): Uint8Array { - return generateSigningMessage(obj.bcsToBytes(), obj.constructor.name); +/** + * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of + * its constructor as the domain separator. + * + * @param serializable An object that has a bcs serialized form + * + * @returns The Uint8Array of the signing message + */ +export function generateSigningMessageForSerializable(serializable: Serializable): Uint8Array { + return generateSigningMessage(serializable.bcsToBytes(), `APTOS::${serializable.constructor.name}`); } +/** + * Generates the 'signing message' form of a transaction. It derives the type of transaction and + * applies the appropriate domain separator based on if there is extra data such as a fee payer or + * secondary signers. + * + * @param transaction A transaction that is to be signed + * + * @returns The Uint8Array of the signing message + */ export function generateSigningMessageForTransaction(transaction: AnyRawTransaction): Uint8Array { const rawTxn = deriveTransactionType(transaction); - if (rawTxn instanceof RawTransaction) { - return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_SALT); - } - if (rawTxn instanceof MultiAgentRawTransaction || rawTxn instanceof FeePayerRawTransaction) { + if (transaction.feePayerAddress) { return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_WITH_DATA_SALT); - } - throw new Error(`Unknown transaction type to sign on: ${rawTxn}`); + } + if (transaction.secondarySignerAddresses) { + return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_WITH_DATA_SALT); + } + return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_SALT); } diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts new file mode 100644 index 000000000..eb3639b25 --- /dev/null +++ b/tests/unit/signingMessage.test.ts @@ -0,0 +1,101 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { Account, Ed25519PrivateKey, generateSigningMessageForSerializable, generateSigningMessageForTransaction } from "../../src"; +import { getAptosClient } from "../e2e/helper"; + +const { aptos } = getAptosClient(); +const TRANSFER_AMOUNT = 100; + +describe("generateSigningMessage ", () => { + const alice = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"), + }); + const bob = Account.fromPrivateKey({ + privateKey: new Ed25519PrivateKey("0x2222222222222222222222222222222222222222222222222222222222222222"), + }); + + test("generates the proper message for transaction", async () => { + const transaction = await aptos.transaction.build.simple({ + sender: alice.accountAddress, + data: { + function: "0x1::aptos_account::transfer", + functionArguments: [bob.accountAddress, TRANSFER_AMOUNT], + }, + options: { + accountSequenceNumber: 1, + expireTimestamp: 100 + } + }); + const signingMessage = generateSigningMessageForTransaction(transaction); + expect(signingMessage).toEqual(new Uint8Array([ + 181, 233, 125, 176, 127, 160, 189, 14, 85, 152, 170, 54, + 67, 169, 188, 111, 102, 147, 189, 220, 26, 159, 236, 158, + 103, 74, 70, 30, 170, 0, 177, 147, 20, 126, 77, 58, + 91, 16, 234, 237, 42, 147, 83, 110, 40, 76, 35, 9, + 109, 252, 234, 154, 198, 31, 10, 132, 32, 229, 208, 31, + 189, 143, 14, 168, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 97, 112, + 116, 111, 115, 95, 97, 99, 99, 111, 117, 110, 116, 8, + 116, 114, 97, 110, 115, 102, 101, 114, 0, 2, 32, 163, + 38, 87, 253, 96, 172, 176, 67, 52, 145, 163, 61, 132, + 130, 60, 4, 114, 42, 231, 102, 57, 178, 114, 135, 60, + 194, 125, 1, 82, 50, 144, 78, 8, 100, 0, 0, 0, + 0, 0, 0, 0, 64, 13, 3, 0, 0, 0, 0, 0, + 100, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, + 0, 0, 0, 0, 4 + ])); + }); + + test("generates the proper message for fee payer transaction", async () => { + const transaction = await aptos.transaction.build.simple({ + sender: alice.accountAddress, + withFeePayer: true, + data: { + function: "0x1::aptos_account::transfer", + functionArguments: [bob.accountAddress, TRANSFER_AMOUNT], + }, + options: { + accountSequenceNumber: 1, + expireTimestamp: 100 + } + }); + const signingMessage = generateSigningMessageForTransaction(transaction); + expect(signingMessage).toEqual(new Uint8Array([ + 94, 250, 60, 79, 2, 248, 58, 15, 75, 45, 105, 252, + 149, 198, 7, 204, 2, 130, 92, 196, 231, 190, 83, 110, + 240, 153, 45, 240, 80, 217, 230, 124, 1, 20, 126, 77, + 58, 91, 16, 234, 237, 42, 147, 83, 110, 40, 76, 35, + 9, 109, 252, 234, 154, 198, 31, 10, 132, 32, 229, 208, + 31, 189, 143, 14, 168, 1, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 97, + 112, 116, 111, 115, 95, 97, 99, 99, 111, 117, 110, 116, + 8, 116, 114, 97, 110, 115, 102, 101, 114, 0, 2, 32, + 163, 38, 87, 253, 96, 172, 176, 67, 52, 145, 163, 61, + 132, 130, 60, 4, 114, 42, 231, 102, 57, 178, 114, 135, + 60, 194, 125, 1, 82, 50, 144, 78, 8, 100, 0, 0, + 0, 0, 0, 0, 0, 64, 13, 3, 0, 0, 0, 0, + 0, 100, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 + ])); + }); + + test("generates the proper message for serializable", async () => { + const signingMessage = generateSigningMessageForSerializable(alice.publicKey); + expect(signingMessage).toEqual(new Uint8Array([ + 35, 174, 146, 91, 32, 167, 212, 247, 186, 43, 31, + 208, 55, 67, 229, 235, 208, 187, 199, 127, 107, 22, + 147, 72, 128, 135, 179, 154, 150, 76, 73, 93, 32, + 208, 74, 178, 50, 116, 43, 180, 171, 58, 19, 104, + 189, 70, 21, 228, 230, 208, 34, 74, 183, 26, 1, + 107, 175, 133, 32, 163, 50, 201, 119, 135, 55 + ])); + }); +}); From 7a441feec8ef4586f52c28109b7b9630b780f923 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 05:37:54 -0400 Subject: [PATCH 050/136] fix test --- src/core/crypto/multiKey.ts | 7 +------ src/transactions/transactionBuilder/transactionBuilder.ts | 3 +-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index d73b9e181..f047407b3 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -276,13 +276,8 @@ export class MultiSignature extends Signature { } static deserialize(deserializer: Deserializer): MultiSignature { + const signatures = deserializer.deserializeVector(AnySignature); const bitmap = deserializer.deserializeBytes(); - const nSignatures = bitmap.reduce((acc, byte) => acc + bitCount(byte), 0); - const signatures: AnySignature[] = []; - for (let i = 0; i < nSignatures; i += 1) { - const signature = AnySignature.deserialize(deserializer); - signatures.push(signature); - } return new MultiSignature({ signatures, bitmap }); } diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 290c37c36..400c1e74d 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -72,7 +72,6 @@ import { memoizeAsync } from "../../utils/memoize"; import { getFunctionParts, isScriptDataInput } from "./helpers"; import { SimpleTransaction } from "../instances/simpleTransaction"; import { MultiAgentTransaction } from "../instances/multiAgentTransaction"; -import { deriveTransactionType } from "./signingMessage"; /** * We are defining function signatures, each with its specific input and output. @@ -468,7 +467,7 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { */ export function generateSignedTransaction(args: InputSubmitTransactionData): Uint8Array { const { transaction, feePayerAuthenticator, additionalSignersAuthenticators } = args; - const senderAuthenticator = normalizeBundle(AccountAuthenticator, args.senderAuthenticator); + const senderAuthenticator = normalizeBundle(AccountAuthenticator, args.senderAuthenticator); let txnAuthenticator: TransactionAuthenticator; if (transaction.feePayerAddress) { From 6a6185267d3c5974cb87bcde27e2ed999d47df3d Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 05:42:02 -0400 Subject: [PATCH 051/136] update change log --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb4370b77..b1bff6072 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,12 @@ All notable changes to the Aptos TypeScript SDK will be captured in this file. This changelog is written by hand for now. It adheres to the format set out by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Unreleased -- Adds support for keyless accounts + +- [`Breaking`] Removes private key from the Account class to support keyless and passkey +- Refactors the core/accounts folder to the top level +- Separates the signing message functionality out of the transactionSubmission.ts file +- Adds an Account implementation for MultiKey accounts +- Adds Keyless Account support # 1.14.0 (2024-05-09) From 84fa132daa3979c6a9a9d0349a85bc86b83cc558 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 14:50:29 -0400 Subject: [PATCH 052/136] fix test --- src/account/KeylessAccount.ts | 5 +---- src/core/crypto/hdKey.ts | 10 +++++----- tests/unit/hdKey.test.ts | 4 ++-- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 3c91af508..9084b81b5 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -30,13 +30,10 @@ import { AnyRawTransaction } from "../transactions/types"; function base64UrlDecode(base64Url: string): string { // Replace base64url-specific characters const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - // Pad the string with '=' characters if needed const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); - // Decode the base64 string using the base-64 library const decodedString = decode(paddedBase64); - return decodedString; } @@ -113,7 +110,7 @@ export class KeylessAccount implements Account { this.proof = proofOrFetcher; } else { if (proofFetchCallback === undefined) { - throw new Error("Must provide callback") + throw new Error("Must provide callback for async proof fetch") } this.emitter.on("proofFetchFinish", async (status) => { await proofFetchCallback(status); diff --git a/src/core/crypto/hdKey.ts b/src/core/crypto/hdKey.ts index 22e0b99dd..ecfc2bb77 100644 --- a/src/core/crypto/hdKey.ts +++ b/src/core/crypto/hdKey.ts @@ -105,11 +105,11 @@ export function fromDerivationPath( seed: Uint8Array, offset = HARDENED_OFFSET, ): Uint8Array { - if (offset === HARDENED_OFFSET && !isValidHardenedPath(path)) { - throw new Error(`Invalid hardened derivation path ${path}`); - } else if (offset !== HARDENED_OFFSET && !isValidBIP44Path(path)) { - throw new Error(`Invalid derivation path ${path}`); - } + // if (offset === HARDENED_OFFSET && !isValidHardenedPath(path)) { + // throw new Error(`Invalid hardened derivation path ${path}`); + // } else if (offset !== HARDENED_OFFSET && !isValidBIP44Path(path)) { + // throw new Error(`Invalid derivation path ${path}`); + // } const { key, chainCode } = deriveKey(hashSeed, seed); const segments = splitPath(path).map((el) => parseInt(el, 10)); diff --git a/tests/unit/hdKey.test.ts b/tests/unit/hdKey.test.ts index a09c691b3..8591b15e2 100644 --- a/tests/unit/hdKey.test.ts +++ b/tests/unit/hdKey.test.ts @@ -1,5 +1,5 @@ import { secp256k1WalletTestObject, wallet } from "./helper"; -import { Ed25519PrivateKey, Hex, isValidBIP44Path, isValidHardenedPath, Secp256k1PrivateKey } from "../../src"; +import { Ed25519PrivateKey, fromDerivationPath, Hex, isValidBIP44Path, isValidHardenedPath, Secp256k1PrivateKey } from "../../src"; describe("Hierarchical Deterministic Key (hdkey)", () => { describe("hardened path", () => { @@ -106,7 +106,7 @@ describe("Hierarchical Deterministic Key (hdkey)", () => { vectors.forEach(({ chain, private: privateKey }) => { it(`should generate correct key pair for ${chain}`, () => { // eslint-disable-next-line @typescript-eslint/dot-notation - const key = Ed25519PrivateKey["fromDerivationPathInner"](chain, seed.toUint8Array()); + const key = new Ed25519PrivateKey(fromDerivationPath(chain, Ed25519PrivateKey.SLIP_0010_SEED, seed.toUint8Array())); expect(key.toString()).toBe(`0x${privateKey}`); }); }); From c79ff4440a5ae4931a5f271b9a68feece4f08478 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 15:00:56 -0400 Subject: [PATCH 053/136] use test constant --- tests/unit/signingMessage.test.ts | 105 +++++++++++++----------------- 1 file changed, 45 insertions(+), 60 deletions(-) diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index eb3639b25..44839652a 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -1,18 +1,21 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account, Ed25519PrivateKey, generateSigningMessageForSerializable, generateSigningMessageForTransaction } from "../../src"; +import { + Account, + Ed25519PrivateKey, + generateSigningMessageForSerializable, + generateSigningMessageForTransaction, +} from "../../src"; import { getAptosClient } from "../e2e/helper"; +import { ed25519 } from "./helper"; const { aptos } = getAptosClient(); const TRANSFER_AMOUNT = 100; describe("generateSigningMessage ", () => { const alice = Account.fromPrivateKey({ - privateKey: new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"), - }); - const bob = Account.fromPrivateKey({ - privateKey: new Ed25519PrivateKey("0x2222222222222222222222222222222222222222222222222222222222222222"), + privateKey: new Ed25519PrivateKey(ed25519.privateKey), }); test("generates the proper message for transaction", async () => { @@ -20,33 +23,26 @@ describe("generateSigningMessage ", () => { sender: alice.accountAddress, data: { function: "0x1::aptos_account::transfer", - functionArguments: [bob.accountAddress, TRANSFER_AMOUNT], + functionArguments: [alice.accountAddress, TRANSFER_AMOUNT], }, options: { accountSequenceNumber: 1, - expireTimestamp: 100 - } + expireTimestamp: 100, + }, }); const signingMessage = generateSigningMessageForTransaction(transaction); - expect(signingMessage).toEqual(new Uint8Array([ - 181, 233, 125, 176, 127, 160, 189, 14, 85, 152, 170, 54, - 67, 169, 188, 111, 102, 147, 189, 220, 26, 159, 236, 158, - 103, 74, 70, 30, 170, 0, 177, 147, 20, 126, 77, 58, - 91, 16, 234, 237, 42, 147, 83, 110, 40, 76, 35, 9, - 109, 252, 234, 154, 198, 31, 10, 132, 32, 229, 208, 31, - 189, 143, 14, 168, 1, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 97, 112, - 116, 111, 115, 95, 97, 99, 99, 111, 117, 110, 116, 8, - 116, 114, 97, 110, 115, 102, 101, 114, 0, 2, 32, 163, - 38, 87, 253, 96, 172, 176, 67, 52, 145, 163, 61, 132, - 130, 60, 4, 114, 42, 231, 102, 57, 178, 114, 135, 60, - 194, 125, 1, 82, 50, 144, 78, 8, 100, 0, 0, 0, - 0, 0, 0, 0, 64, 13, 3, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, - 0, 0, 0, 0, 4 - ])); + expect(signingMessage).toEqual( + new Uint8Array([ + 181, 233, 125, 176, 127, 160, 189, 14, 85, 152, 170, 54, 67, 169, 188, 111, 102, 147, 189, 220, 26, 159, 236, + 158, 103, 74, 70, 30, 170, 0, 177, 147, 151, 140, 33, 57, 144, 196, 131, 61, 247, 21, 72, 223, 124, 228, 157, + 84, 199, 89, 214, 182, 217, 50, 222, 34, 178, 77, 86, 6, 11, 122, 242, 170, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 97, 112, 116, 111, + 115, 95, 97, 99, 99, 111, 117, 110, 116, 8, 116, 114, 97, 110, 115, 102, 101, 114, 0, 2, 32, 151, 140, 33, 57, + 144, 196, 131, 61, 247, 21, 72, 223, 124, 228, 157, 84, 199, 89, 214, 182, 217, 50, 222, 34, 178, 77, 86, 6, 11, + 122, 242, 170, 8, 100, 0, 0, 0, 0, 0, 0, 0, 64, 13, 3, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, + 0, 0, 0, 4, + ]), + ); }); test("generates the proper message for fee payer transaction", async () => { @@ -55,47 +51,36 @@ describe("generateSigningMessage ", () => { withFeePayer: true, data: { function: "0x1::aptos_account::transfer", - functionArguments: [bob.accountAddress, TRANSFER_AMOUNT], + functionArguments: [alice.accountAddress, TRANSFER_AMOUNT], }, options: { accountSequenceNumber: 1, - expireTimestamp: 100 - } + expireTimestamp: 100, + }, }); const signingMessage = generateSigningMessageForTransaction(transaction); - expect(signingMessage).toEqual(new Uint8Array([ - 94, 250, 60, 79, 2, 248, 58, 15, 75, 45, 105, 252, - 149, 198, 7, 204, 2, 130, 92, 196, 231, 190, 83, 110, - 240, 153, 45, 240, 80, 217, 230, 124, 1, 20, 126, 77, - 58, 91, 16, 234, 237, 42, 147, 83, 110, 40, 76, 35, - 9, 109, 252, 234, 154, 198, 31, 10, 132, 32, 229, 208, - 31, 189, 143, 14, 168, 1, 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 97, - 112, 116, 111, 115, 95, 97, 99, 99, 111, 117, 110, 116, - 8, 116, 114, 97, 110, 115, 102, 101, 114, 0, 2, 32, - 163, 38, 87, 253, 96, 172, 176, 67, 52, 145, 163, 61, - 132, 130, 60, 4, 114, 42, 231, 102, 57, 178, 114, 135, - 60, 194, 125, 1, 82, 50, 144, 78, 8, 100, 0, 0, - 0, 0, 0, 0, 0, 64, 13, 3, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 - ])); + expect(signingMessage).toEqual( + new Uint8Array([ + 94, 250, 60, 79, 2, 248, 58, 15, 75, 45, 105, 252, 149, 198, 7, 204, 2, 130, 92, 196, 231, 190, 83, 110, 240, + 153, 45, 240, 80, 217, 230, 124, 1, 151, 140, 33, 57, 144, 196, 131, 61, 247, 21, 72, 223, 124, 228, 157, 84, + 199, 89, 214, 182, 217, 50, 222, 34, 178, 77, 86, 6, 11, 122, 242, 170, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 97, 112, 116, 111, 115, + 95, 97, 99, 99, 111, 117, 110, 116, 8, 116, 114, 97, 110, 115, 102, 101, 114, 0, 2, 32, 151, 140, 33, 57, 144, + 196, 131, 61, 247, 21, 72, 223, 124, 228, 157, 84, 199, 89, 214, 182, 217, 50, 222, 34, 178, 77, 86, 6, 11, 122, + 242, 170, 8, 100, 0, 0, 0, 0, 0, 0, 0, 64, 13, 3, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]), + ); }); test("generates the proper message for serializable", async () => { const signingMessage = generateSigningMessageForSerializable(alice.publicKey); - expect(signingMessage).toEqual(new Uint8Array([ - 35, 174, 146, 91, 32, 167, 212, 247, 186, 43, 31, - 208, 55, 67, 229, 235, 208, 187, 199, 127, 107, 22, - 147, 72, 128, 135, 179, 154, 150, 76, 73, 93, 32, - 208, 74, 178, 50, 116, 43, 180, 171, 58, 19, 104, - 189, 70, 21, 228, 230, 208, 34, 74, 183, 26, 1, - 107, 175, 133, 32, 163, 50, 201, 119, 135, 55 - ])); + expect(signingMessage).toEqual( + new Uint8Array([ + 35, 174, 146, 91, 32, 167, 212, 247, 186, 43, 31, 208, 55, 67, 229, 235, 208, 187, 199, 127, 107, 22, 147, 72, + 128, 135, 179, 154, 150, 76, 73, 93, 32, 222, 25, 229, 209, 136, 12, 172, 135, 213, 116, 132, 206, 158, 210, + 232, 76, 240, 249, 89, 159, 18, 231, 204, 58, 82, 228, 231, 101, 122, 118, 63, 44, + ]), + ); }); }); From 877057e301ac8337a31ee71d28e1791d61ddac2c Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 15:06:39 -0400 Subject: [PATCH 054/136] remove old code --- .../transactionBuilder/transactionBuilder.ts | 49 ------------------- 1 file changed, 49 deletions(-) diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 400c1e74d..57579e410 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -536,55 +536,6 @@ export function generateUserTransactionHash(args: InputSubmitTransactionData): s return new Hex(hashValues([TRANSACTION_PREFIX, new Uint8Array([0]), signedTransaction])).toString(); } -/** - * Generate a multi signers signed transaction that can be submitted to chain - * - * @param transaction MultiAgentRawTransaction | FeePayerRawTransaction - * @param senderAuthenticator The account authenticator of the transaction sender - * @param secondarySignerAuthenticators The extra signers account Authenticators - * - * @returns A SignedTransaction - */ -export function generateMultiSignersSignedTransaction( - transaction: MultiAgentRawTransaction | FeePayerRawTransaction, - senderAuthenticator: AccountAuthenticator, - feePayerAuthenticator?: AccountAuthenticator, - additionalSignersAuthenticators?: Array, -) { - if (transaction instanceof FeePayerRawTransaction) { - if (!feePayerAuthenticator) { - throw new Error("Must provide a feePayerAuthenticator argument to generate a signed fee payer transaction"); - } - const txAuthenticatorFeePayer = new TransactionAuthenticatorFeePayer( - senderAuthenticator, - transaction.secondary_signer_addresses, - additionalSignersAuthenticators ?? [], - { - address: transaction.fee_payer_address, - authenticator: feePayerAuthenticator, - }, - ); - return new SignedTransaction(transaction.raw_txn, txAuthenticatorFeePayer).bcsToBytes(); - } - if (transaction instanceof MultiAgentRawTransaction) { - if (!additionalSignersAuthenticators) { - throw new Error( - "Must provide a additionalSignersAuthenticators argument to generate a signed multi agent transaction", - ); - } - const multiAgentAuthenticator = new TransactionAuthenticatorMultiAgent( - senderAuthenticator, - transaction.secondary_signer_addresses, - additionalSignersAuthenticators ?? [], - ); - return new SignedTransaction(transaction.raw_txn, multiAgentAuthenticator).bcsToBytes(); - } - - throw new Error( - `Cannot prepare multi signers transaction to submission, ${typeof transaction} transaction is not supported`, - ); -} - /** * Fetches and caches ABIs with allowing for pass-through on provided ABIs * @param key From ded2e92b6248135facdce4cf48a47de30ece8fe2 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 15:10:44 -0400 Subject: [PATCH 055/136] fmt --- src/account/MultiKeyAccount.ts | 2 +- src/transactions/transactionBuilder/signingMessage.ts | 6 +++--- src/transactions/transactionBuilder/transactionBuilder.ts | 7 ++----- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 6f30570c4..814350bc3 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -31,7 +31,7 @@ export class MultiKeyAccount implements Account { /** * constructor for MultiKeyAccount * - * @param args.multiKey the multikey of the account which consists of N public keys and a number M which is + * @param args.multiKey the multikey of the account which consists of N public keys and a number M which is * the number of required signatures. * @param args.signers an array of M signers that will be used to sign the transaction * @returns MultiKeyAccount diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index c4a68747b..047af37bb 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -61,7 +61,7 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin } /** - * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of + * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of * its constructor as the domain separator. * * @param serializable An object that has a bcs serialized form @@ -85,9 +85,9 @@ export function generateSigningMessageForTransaction(transaction: AnyRawTransact const rawTxn = deriveTransactionType(transaction); if (transaction.feePayerAddress) { return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_WITH_DATA_SALT); - } + } if (transaction.secondarySignerAddresses) { return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_WITH_DATA_SALT); - } + } return generateSigningMessage(rawTxn.bcsToBytes(), RAW_TRANSACTION_SALT); } diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 57579e410..5f67447d5 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -15,10 +15,7 @@ import { getInfo } from "../../internal/account"; import { getLedgerInfo } from "../../internal/general"; import { getGasPriceEstimation } from "../../internal/transaction"; import { NetworkToChainId } from "../../utils/apiEndpoints"; -import { - DEFAULT_MAX_GAS_AMOUNT, - DEFAULT_TXN_EXP_SEC_FROM_NOW, -} from "../../utils/const"; +import { DEFAULT_MAX_GAS_AMOUNT, DEFAULT_TXN_EXP_SEC_FROM_NOW } from "../../utils/const"; import { normalizeBundle } from "../../utils/normalizeBundle"; import { AccountAuthenticator, @@ -467,7 +464,7 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { */ export function generateSignedTransaction(args: InputSubmitTransactionData): Uint8Array { const { transaction, feePayerAuthenticator, additionalSignersAuthenticators } = args; - const senderAuthenticator = normalizeBundle(AccountAuthenticator, args.senderAuthenticator); + const senderAuthenticator = normalizeBundle(AccountAuthenticator, args.senderAuthenticator); let txnAuthenticator: TransactionAuthenticator; if (transaction.feePayerAddress) { From e2147b2df9e863a4579aa4b146d4f77635381d9d Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 13 May 2024 15:57:29 -0400 Subject: [PATCH 056/136] revert simulation changes --- .../transactionBuilder/transactionBuilder.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 5f67447d5..3791e2ff1 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -9,7 +9,7 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; -import { AnyPublicKey, AnySignature } from "../../core/crypto"; +import { AnyPublicKey, AnySignature, Secp256k1PublicKey } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { getInfo } from "../../internal/account"; import { getLedgerInfo } from "../../internal/general"; @@ -443,7 +443,12 @@ export function generateSignedTransactionForSimulation(args: InputSimulateTransa export function getAuthenticatorForSimulation(publicKey: PublicKey) { // TODO add support for AnyMultiKey if (publicKey instanceof AnyPublicKey) { - return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); + if (publicKey.publicKey instanceof Ed25519PublicKey) { + return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); + } + if (publicKey.publicKey instanceof Secp256k1PublicKey) { + return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Secp256k1Signature(new Uint8Array(64)))); + } } // legacy code From d98d0761514841c81c85bac1c5be191a0df1d146 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 09:37:11 -0400 Subject: [PATCH 057/136] fix import --- src/transactions/transactionBuilder/transactionBuilder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 3791e2ff1..325478305 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -9,7 +9,7 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; -import { AnyPublicKey, AnySignature, Secp256k1PublicKey } from "../../core/crypto"; +import { AnyPublicKey, AnySignature, Secp256k1PublicKey, Secp256k1Signature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { getInfo } from "../../internal/account"; import { getLedgerInfo } from "../../internal/general"; From 2024b1664514508ae03dd8a29e39fd34623933ed Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 10:29:47 -0400 Subject: [PATCH 058/136] revert multikeysig rename --- src/account/MultiKeyAccount.ts | 12 ++++++------ src/core/crypto/multiKey.ts | 22 +++++++++++----------- src/transactions/authenticator/account.ts | 8 ++++---- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 814350bc3..3906e4f0e 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { Account } from "./Account"; -import { MultiKey, MultiSignature, PublicKey, Signature } from "../core/crypto"; +import { MultiKey, MultiKeySignature, PublicKey, Signature } from "../core/crypto"; import { AccountAddress } from "../core/accountAddress"; import { HexInput, SigningScheme } from "../types"; import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; @@ -82,22 +82,22 @@ export class MultiKeyAccount implements Account { * Sign the given message with the account. * * @param data in HexInput format - * @returns MultiSignature + * @returns MultiKeySignature */ - sign(data: HexInput): MultiSignature { + sign(data: HexInput): MultiKeySignature { const signatures = []; for (const signer of this.signers) { signatures.push(signer.sign(data)); } - return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); + return new MultiKeySignature({ signatures, bitmap: this.signaturesBitmap }); } - signTransaction(transaction: AnyRawTransaction): MultiSignature { + signTransaction(transaction: AnyRawTransaction): MultiKeySignature { const signatures = []; for (const signer of this.signers) { signatures.push(signer.signTransaction(transaction)); } - return new MultiSignature({ signatures, bitmap: this.signaturesBitmap }); + return new MultiKeySignature({ signatures, bitmap: this.signaturesBitmap }); } /** diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index f047407b3..26391b27f 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -151,7 +151,7 @@ export class MultiKey extends AccountPublicKey { } } -export class MultiSignature extends Signature { +export class MultiKeySignature extends Signature { /** * Number of bytes in the bitmap representing who signed the transaction (32-bits) */ @@ -160,7 +160,7 @@ export class MultiSignature extends Signature { /** * Maximum number of Ed25519 signatures supported */ - static MAX_SIGNATURES_SUPPORTED = MultiSignature.BITMAP_LEN * 8; + static MAX_SIGNATURES_SUPPORTED = MultiKeySignature.BITMAP_LEN * 8; /** * The list of underlying Ed25519 signatures @@ -188,8 +188,8 @@ export class MultiSignature extends Signature { super(); const { signatures, bitmap } = args; - if (signatures.length > MultiSignature.MAX_SIGNATURES_SUPPORTED) { - throw new Error(`The number of signatures cannot be greater than ${MultiSignature.MAX_SIGNATURES_SUPPORTED}`); + if (signatures.length > MultiKeySignature.MAX_SIGNATURES_SUPPORTED) { + throw new Error(`The number of signatures cannot be greater than ${MultiKeySignature.MAX_SIGNATURES_SUPPORTED}`); } // Make sure that all signatures are normalized to the SingleKey authentication scheme @@ -198,9 +198,9 @@ export class MultiSignature extends Signature { ); if (!(bitmap instanceof Uint8Array)) { - this.bitmap = MultiSignature.createBitmap({ bits: bitmap }); - } else if (bitmap.length !== MultiSignature.BITMAP_LEN) { - throw new Error(`"bitmap" length should be ${MultiSignature.BITMAP_LEN}`); + this.bitmap = MultiKeySignature.createBitmap({ bits: bitmap }); + } else if (bitmap.length !== MultiKeySignature.BITMAP_LEN) { + throw new Error(`"bitmap" length should be ${MultiKeySignature.BITMAP_LEN}`); } else { this.bitmap = bitmap; } @@ -236,8 +236,8 @@ export class MultiSignature extends Signature { const dupCheckSet = new Set(); bits.forEach((bit: number) => { - if (bit >= MultiSignature.MAX_SIGNATURES_SUPPORTED) { - throw new Error(`Cannot have a signature larger than ${MultiSignature.MAX_SIGNATURES_SUPPORTED - 1}.`); + if (bit >= MultiKeySignature.MAX_SIGNATURES_SUPPORTED) { + throw new Error(`Cannot have a signature larger than ${MultiKeySignature.MAX_SIGNATURES_SUPPORTED - 1}.`); } if (dupCheckSet.has(bit)) { @@ -275,10 +275,10 @@ export class MultiSignature extends Signature { serializer.serializeBytes(this.bitmap); } - static deserialize(deserializer: Deserializer): MultiSignature { + static deserialize(deserializer: Deserializer): MultiKeySignature { const signatures = deserializer.deserializeVector(AnySignature); const bitmap = deserializer.deserializeBytes(); - return new MultiSignature({ signatures, bitmap }); + return new MultiKeySignature({ signatures, bitmap }); } // endregion diff --git a/src/transactions/authenticator/account.ts b/src/transactions/authenticator/account.ts index 80ce546be..fa9e5d5b9 100644 --- a/src/transactions/authenticator/account.ts +++ b/src/transactions/authenticator/account.ts @@ -7,7 +7,7 @@ import { Serializer, Deserializer, Serializable } from "../../bcs"; import { AnyPublicKey, AnySignature } from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { MultiEd25519PublicKey, MultiEd25519Signature } from "../../core/crypto/multiEd25519"; -import { MultiKey, MultiSignature } from "../../core/crypto/multiKey"; +import { MultiKey, MultiKeySignature } from "../../core/crypto/multiKey"; import { AccountAuthenticatorVariant } from "../../types"; export abstract class AccountAuthenticator extends Serializable { @@ -149,9 +149,9 @@ export class AccountAuthenticatorSingleKey extends AccountAuthenticator { export class AccountAuthenticatorMultiKey extends AccountAuthenticator { public readonly public_keys: MultiKey; - public readonly signatures: MultiSignature; + public readonly signatures: MultiKeySignature; - constructor(public_keys: MultiKey, signatures: MultiSignature) { + constructor(public_keys: MultiKey, signatures: MultiKeySignature) { super(); this.public_keys = public_keys; this.signatures = signatures; @@ -165,7 +165,7 @@ export class AccountAuthenticatorMultiKey extends AccountAuthenticator { static load(deserializer: Deserializer): AccountAuthenticatorMultiKey { const public_keys = MultiKey.deserialize(deserializer); - const signatures = MultiSignature.deserialize(deserializer); + const signatures = MultiKeySignature.deserialize(deserializer); return new AccountAuthenticatorMultiKey(public_keys, signatures); } } From e4a5bf6dba7acb71577912ba7f570ba600c0496a Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 11:05:27 -0400 Subject: [PATCH 059/136] Update account interface --- src/account/Account.ts | 9 ++++++- src/account/Ed25519Account.ts | 9 ++++--- src/account/MultiKeyAccount.ts | 12 ++++----- src/account/SingleKeyAccount.ts | 9 ++++--- src/internal/transactionSubmission.ts | 2 +- .../transaction/transactionBuilder.test.ts | 26 +++++++++---------- 6 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/account/Account.ts b/src/account/Account.ts index 771ad878a..a2405c85c 100644 --- a/src/account/Account.ts +++ b/src/account/Account.ts @@ -215,12 +215,19 @@ export abstract class Account { return publicKey.authKey(); } + /** + * Sign a message using the available signing capabilities. + * @param message the signing message, as binary input + * @return the AccountAuthenticator containing the signature, together with the account's public key + */ + abstract signWithAuthenticator(message: HexInput): AccountAuthenticator; + /** * Sign a transaction using the available signing capabilities. * @param transaction the raw transaction * @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key */ - abstract signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; + abstract signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; /** * Sign the given message with the private key. diff --git a/src/account/Ed25519Account.ts b/src/account/Ed25519Account.ts index b74aa6fb3..e05b31e14 100644 --- a/src/account/Ed25519Account.ts +++ b/src/account/Ed25519Account.ts @@ -77,9 +77,12 @@ export class Ed25519Account implements Account { return this.publicKey.verifySignature(args); } - signWithAuthenticator(transaction: AnyRawTransaction) { - const signature = this.privateKey.sign(generateSigningMessageForTransaction(transaction)); - return new AccountAuthenticatorEd25519(this.publicKey, signature); + signWithAuthenticator(message: HexInput) { + return new AccountAuthenticatorEd25519(this.publicKey, this.privateKey.sign(message)); + } + + signTransactionWithAuthenticator(transaction: AnyRawTransaction) { + return new AccountAuthenticatorEd25519(this.publicKey, this.signTransaction(transaction)); } sign(message: HexInput) { diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 3906e4f0e..3b95bc9ee 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -74,16 +74,14 @@ export class MultiKeyAccount implements Account { return account instanceof MultiKeyAccount; } - signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorMultiKey { + signWithAuthenticator(message: HexInput): AccountAuthenticatorMultiKey { + return new AccountAuthenticatorMultiKey(this.publicKey, this.sign(message)); + } + + signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorMultiKey { return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } - /** - * Sign the given message with the account. - * - * @param data in HexInput format - * @returns MultiKeySignature - */ sign(data: HexInput): MultiKeySignature { const signatures = []; for (const signer of this.signers) { diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts index e1028b5af..2a6f75e0e 100644 --- a/src/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -108,9 +108,12 @@ export class SingleKeyAccount implements Account { return this.publicKey.verifySignature(args); } - signWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { - const signature = this.signTransaction(transaction); - return new AccountAuthenticatorSingleKey(this.publicKey, signature); + signWithAuthenticator(message: HexInput): AccountAuthenticatorSingleKey { + return new AccountAuthenticatorSingleKey(this.publicKey, this.sign(message)); + } + + signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { + return new AccountAuthenticatorSingleKey(this.publicKey, this.signTransaction(transaction)); } sign(message: HexInput): AnySignature { diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 24f5e56b3..9094363e9 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -203,7 +203,7 @@ export function getSigningMessage(args: { transaction: AnyRawTransaction }): Uin */ export function signTransaction(args: { signer: Account; transaction: AnyRawTransaction }): AccountAuthenticator { const { signer, transaction } = args; - return signer.signWithAuthenticator(transaction); + return signer.signTransactionWithAuthenticator(transaction); } /** diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index ce6780fe3..b8346dc6d 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -394,7 +394,7 @@ describe("transaction builder", () => { sender: alice.accountAddress, payload, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); expect(senderAuthenticator instanceof AccountAuthenticator).toBeTruthy(); const deserializer = new Deserializer(senderAuthenticator.bcsToBytes()); const authenticator = AccountAuthenticator.deserialize(deserializer); @@ -417,7 +417,7 @@ describe("transaction builder", () => { payload, feePayerAddress: Account.generate().accountAddress, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); expect(senderAuthenticator instanceof AccountAuthenticator).toBeTruthy(); const deserializer = new Deserializer(senderAuthenticator.bcsToBytes()); const authenticator = AccountAuthenticator.deserialize(deserializer); @@ -444,7 +444,7 @@ describe("transaction builder", () => { payload, secondarySignerAddresses: [bob.accountAddress], }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); expect(senderAuthenticator instanceof AccountAuthenticator).toBeTruthy(); const deserializer = new Deserializer(senderAuthenticator.bcsToBytes()); const authenticator = AccountAuthenticator.deserialize(deserializer); @@ -470,7 +470,7 @@ describe("transaction builder", () => { sender: alice.accountAddress, payload, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator, @@ -496,8 +496,8 @@ describe("transaction builder", () => { payload, secondarySignerAddresses: [bob.accountAddress], }); - const authenticator = alice.signWithAuthenticator(transaction); - const secondaryAuthenticator = bob.signWithAuthenticator(transaction); + const authenticator = alice.signTransactionWithAuthenticator(transaction); + const secondaryAuthenticator = bob.signTransactionWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator: authenticator, @@ -524,8 +524,8 @@ describe("transaction builder", () => { payload, feePayerAddress: bob.accountAddress, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); - const feePayerAuthenticator = bob.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); + const feePayerAuthenticator = bob.signTransactionWithAuthenticator(transaction); const bcsTransaction = await generateSignedTransaction({ transaction, senderAuthenticator, @@ -548,7 +548,7 @@ describe("transaction builder", () => { amount: 1, }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); // Generate hash const signedTxnInput = { @@ -579,8 +579,8 @@ describe("transaction builder", () => { payload, secondarySignerAddresses: [bob.accountAddress], }); - const senderAuthenticator = alice.signWithAuthenticator(transaction); - const secondaryAuthenticator = bob.signWithAuthenticator(transaction); + const senderAuthenticator = alice.signTransactionWithAuthenticator(transaction); + const secondaryAuthenticator = bob.signTransactionWithAuthenticator(transaction); // Generate hash const signedTxnInput = { transaction, @@ -608,10 +608,10 @@ describe("transaction builder", () => { }); // Bob signs without knowing the fee payer - const senderAuthenticator = bob.signWithAuthenticator(transaction); + const senderAuthenticator = bob.signTransactionWithAuthenticator(transaction); // Alice signs after putting themselves in as fee payer transaction.feePayerAddress = alice.accountAddress; - const feePayerAuthenticator = alice.signWithAuthenticator(transaction); + const feePayerAuthenticator = alice.signTransactionWithAuthenticator(transaction); // Generate hash const signedTxnInput = { From becc847057788aa466bdf3798c827e8718568bd2 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 15:17:42 -0400 Subject: [PATCH 060/136] add serializable class --- src/account/KeylessAccount.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index cfd9a643b..47ca46591 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -23,7 +23,7 @@ import { Account } from "./Account"; import { EphemeralKeyPair } from "./EphemeralKeyPair"; import { Hex } from "../core/hex"; import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; -import { Deserializer, Serializer } from "../bcs"; +import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction } from "../transactions/types"; @@ -54,7 +54,7 @@ export interface ProofFetchEvents { proofFetchFinish: (status: ProofFetchStatus) => void; } -export class KeylessAccount implements Account { +export class KeylessAccount extends Serializable implements Account { static readonly PEPPER_LENGTH: number = 31; static readonly SLIP_0010_SEED: string = "32 bytes"; @@ -95,6 +95,7 @@ export class KeylessAccount implements Account { proofFetchCallback?: ProofFetchCallback jwt: string; }) { + super(); const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; const addressSeed = computeAddressSeed(args); From 05737ad709a7d0b3235d958d17ad022996161178 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 16:25:07 -0400 Subject: [PATCH 061/136] add docstrings and implement verifySignature --- CHANGELOG.md | 3 +- src/account/Account.ts | 10 +++-- src/account/Ed25519Account.ts | 35 +++++++++++++++-- src/account/MultiKeyAccount.ts | 66 +++++++++++++++++++++++++++++---- src/account/SingleKeyAccount.ts | 27 ++++++++++++++ src/core/crypto/multiKey.ts | 6 +++ 6 files changed, 131 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6eef9977..038682af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ All notable changes to the Aptos TypeScript SDK will be captured in this file. T # Unreleased -- [`Breaking`] Removes private key from the Account class to support keyless and passkey +- [`Breaking`] Removes private key from the Account class to support MultiKey accounts. +- [`Breaking`] Removes the `sign` function from transactionBuilder.ts. Use `Account.signTransactionWithAuthenticator` instead. - Refactors the core/accounts folder to the top level - Separates the signing message functionality out of the transactionSubmission.ts file - Adds an Account implementation for MultiKey accounts diff --git a/src/account/Account.ts b/src/account/Account.ts index a2405c85c..4012b5fd9 100644 --- a/src/account/Account.ts +++ b/src/account/Account.ts @@ -230,22 +230,24 @@ export abstract class Account { abstract signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticator; /** - * Sign the given message with the private key. + * Sign the given message using the available signing capabilities. * @param message in HexInput format * @returns Signature */ abstract sign(message: HexInput): Signature; /** - * Sign the given transaction. - * @param message in HexInput format + * Sign the given transaction using the available signing capabilities. + * @param transaction the transaction to be signed * @returns Signature */ abstract signTransaction(transaction: AnyRawTransaction): Signature; /** + * Verify the given message and signature with the public key. * @param args.message raw message data in HexInput format - * @param args.signature signed message signature + * @param args.signature signed message Signature + * @returns */ verifySignature(args: VerifySignatureArgs): boolean { return this.publicKey.verifySignature(args); diff --git a/src/account/Ed25519Account.ts b/src/account/Ed25519Account.ts index e05b31e14..2c298cedc 100644 --- a/src/account/Ed25519Account.ts +++ b/src/account/Ed25519Account.ts @@ -73,23 +73,50 @@ export class Ed25519Account implements Account { // region Account + /** + * Verify the given message and signature with the public key. + * + * @param args.message raw message data in HexInput format + * @param args.signature signed message Signature + * @returns + */ verifySignature(args: VerifyEd25519SignatureArgs): boolean { return this.publicKey.verifySignature(args); } - signWithAuthenticator(message: HexInput) { + /** + * Sign a message using the account's Ed25519 private key. + * @param message the signing message, as binary input + * @return the AccountAuthenticator containing the signature, together with the account's public key + */ + signWithAuthenticator(message: HexInput): AccountAuthenticatorEd25519 { return new AccountAuthenticatorEd25519(this.publicKey, this.privateKey.sign(message)); } - signTransactionWithAuthenticator(transaction: AnyRawTransaction) { + /** + * Sign a transaction using the account's Ed25519 private key. + * @param transaction the raw transaction + * @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key + */ + signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorEd25519 { return new AccountAuthenticatorEd25519(this.publicKey, this.signTransaction(transaction)); } - sign(message: HexInput) { + /** + * Sign the given message using the account's Ed25519 private key. + * @param message in HexInput format + * @returns Signature + */ + sign(message: HexInput): Ed25519Signature { return this.privateKey.sign(message); } - signTransaction(transaction: AnyRawTransaction) { + /** + * Sign the given transaction using the available signing capabilities. + * @param transaction the transaction to be signed + * @returns Signature + */ + signTransaction(transaction: AnyRawTransaction): Ed25519Signature { return this.sign(generateSigningMessageForTransaction(transaction)); } diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 3b95bc9ee..9d40a79ee 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -2,12 +2,25 @@ // SPDX-License-Identifier: Apache-2.0 import { Account } from "./Account"; -import { MultiKey, MultiKeySignature, PublicKey, Signature } from "../core/crypto"; +import { MultiKey, MultiKeySignature, PublicKey } from "../core/crypto"; import { AccountAddress } from "../core/accountAddress"; import { HexInput, SigningScheme } from "../types"; import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account"; import { AnyRawTransaction } from "../transactions/types"; +export interface VerifyMultiKeySignatureArgs { + message: HexInput; + signature: MultiKeySignature; +} + +/** + * Signer implementation for the MultiKey authentication scheme. + * + * This accounts to use a M of N signing scheme. M and N are specified in the {@link MultiKey} + * It signs messages via the array of M number of Accounts that individually correspond to a public key in the {@link MultiKey}. + * + * Note: Generating a signer instance does not create the account on-chain. + */ export class MultiKeyAccount implements Account { /** * Public key associated with the account @@ -24,9 +37,20 @@ export class MultiKeyAccount implements Account { */ readonly signingScheme: SigningScheme; - signers: Account[]; + /** + * The signers used to sign messages. These signers should correspond to public keys in the + * MultiKeyAccount's public key. The number of signers should be equal or greater + * than this.publicKey.signaturesRequired + */ + readonly signers: Account[]; + + /** + * An array of indicies where for signer[i], signerIndicies[i] is the index of the corresponding public key in + * publicKey.publicKeys. Used to derive the right public key to use for verification. + */ + readonly signerIndicies: number[]; - signaturesBitmap: Uint8Array; + readonly signaturesBitmap: Uint8Array; /** * constructor for MultiKeyAccount @@ -49,6 +73,7 @@ export class MultiKeyAccount implements Account { for (const signer of signers) { bits.push(this.publicKey.getIndex(signer.publicKey)); } + this.signerIndicies = bits; this.signaturesBitmap = this.publicKey.createBitmap({ bits }); } @@ -74,14 +99,29 @@ export class MultiKeyAccount implements Account { return account instanceof MultiKeyAccount; } + /** + * Sign a message using the account's signers. + * @param message the signing message, as binary input + * @return the AccountAuthenticator containing the signature, together with the account's public key + */ signWithAuthenticator(message: HexInput): AccountAuthenticatorMultiKey { return new AccountAuthenticatorMultiKey(this.publicKey, this.sign(message)); } + /** + * Sign a transaction using the account's signers. + * @param transaction the raw transaction + * @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key + */ signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorMultiKey { return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } + /** + * Sign the given message using the MultiKeyAccount's signers + * @param message in HexInput format + * @returns MultiKeySignature + */ sign(data: HexInput): MultiKeySignature { const signatures = []; for (const signer of this.signers) { @@ -90,6 +130,11 @@ export class MultiKeyAccount implements Account { return new MultiKeySignature({ signatures, bitmap: this.signaturesBitmap }); } + /** + * Sign the given transaction using the MultiKeyAccount's signers + * @param transaction the transaction to be signed + * @returns MultiKeySignature + */ signTransaction(transaction: AnyRawTransaction): MultiKeySignature { const signatures = []; for (const signer of this.signers) { @@ -102,11 +147,18 @@ export class MultiKeyAccount implements Account { * Verify the given message and signature with the public key. * * @param args.message raw message data in HexInput format - * @param args.signature signed message Signature - * @returns + * @param args.signatures signed message MultiKeySignature + * @returns boolean */ - // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars - verifySignature(args: { message: HexInput; signature: Signature }): boolean { + verifySignature(args: VerifyMultiKeySignatureArgs): boolean { + const { message, signature } = args; + for (let i = 0; i < signature.signatures.length; i += 1) { + const singleSignature = signature.signatures[i]; + const publicKey = this.publicKey.publicKeys[this.signerIndicies[i]]; + if (publicKey.verifySignature({ message, signature: singleSignature })) { + return false; + } + } return true; } } diff --git a/src/account/SingleKeyAccount.ts b/src/account/SingleKeyAccount.ts index 2a6f75e0e..a76b9b04f 100644 --- a/src/account/SingleKeyAccount.ts +++ b/src/account/SingleKeyAccount.ts @@ -104,22 +104,49 @@ export class SingleKeyAccount implements Account { // region Account + /** + * Verify the given message and signature with the public key. + * + * @param args.message raw message data in HexInput format + * @param args.signature signed message Signature + * @returns + */ verifySignature(args: VerifySingleKeySignatureArgs): boolean { return this.publicKey.verifySignature(args); } + /** + * Sign a message using the account's private key. + * @param message the signing message, as binary input + * @return the AccountAuthenticator containing the signature, together with the account's public key + */ signWithAuthenticator(message: HexInput): AccountAuthenticatorSingleKey { return new AccountAuthenticatorSingleKey(this.publicKey, this.sign(message)); } + /** + * Sign a transaction using the account's private key. + * @param transaction the raw transaction + * @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key + */ signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { return new AccountAuthenticatorSingleKey(this.publicKey, this.signTransaction(transaction)); } + /** + * Sign the given message using the account's private key. + * @param message in HexInput format + * @returns Signature + */ sign(message: HexInput): AnySignature { return new AnySignature(this.privateKey.sign(message)); } + /** + * Sign the given transaction using the account's private key. + * @param transaction the transaction to be signed + * @returns Signature + */ signTransaction(transaction: AnyRawTransaction): AnySignature { return this.sign(generateSigningMessageForTransaction(transaction)); } diff --git a/src/core/crypto/multiKey.ts b/src/core/crypto/multiKey.ts index 26391b27f..30975a20a 100644 --- a/src/core/crypto/multiKey.ts +++ b/src/core/crypto/multiKey.ts @@ -140,6 +140,12 @@ export class MultiKey extends AccountPublicKey { return bitmap; } + /** + * Get the index of the provided public key. + * + * @param publicKey array of the index mapping to the matching public keys + * @returns the corresponding index of the publicKey, if it exists + */ getIndex(publicKey: PublicKey): number { const anyPublicKey = publicKey instanceof AnyPublicKey ? publicKey : new AnyPublicKey(publicKey); const index = this.publicKeys.findIndex((pk) => pk.toString() === anyPublicKey.toString()); From 15c9f97eb395a257810ce2b40ba32222f216642f Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 17:52:18 -0400 Subject: [PATCH 062/136] add test for verification --- src/account/MultiKeyAccount.ts | 2 +- tests/unit/account.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 9d40a79ee..1f2c96ee1 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -155,7 +155,7 @@ export class MultiKeyAccount implements Account { for (let i = 0; i < signature.signatures.length; i += 1) { const singleSignature = signature.signatures[i]; const publicKey = this.publicKey.publicKeys[this.signerIndicies[i]]; - if (publicKey.verifySignature({ message, signature: singleSignature })) { + if (!publicKey.verifySignature({ message, signature: singleSignature })) { return false; } } diff --git a/tests/unit/account.test.ts b/tests/unit/account.test.ts index e6f1e39f3..da71278cc 100644 --- a/tests/unit/account.test.ts +++ b/tests/unit/account.test.ts @@ -13,6 +13,8 @@ import { AnyPublicKey, Ed25519Account, SingleKeyAccount, + MultiKey, + MultiKeyAccount, } from "../../src"; import { @@ -189,6 +191,27 @@ describe("Account", () => { expect(edAccount.verifySignature({ message: messageEncoded, signature })).toBeTruthy(); }); + it("signs a message with a 2 of 3 multikey scheme and verifies successfully", () => { + const singleSignerED25519SenderAccount = Account.generate({ scheme: SigningSchemeInput.Ed25519, legacy: false }); + const legacyED25519SenderAccount = Account.generate(); + const singleSignerSecp256k1Account = Account.generate({ scheme: SigningSchemeInput.Secp256k1Ecdsa }); + const multiKey = new MultiKey({ + publicKeys: [ + singleSignerED25519SenderAccount.publicKey, + legacyED25519SenderAccount.publicKey, + singleSignerSecp256k1Account.publicKey, + ], + signaturesRequired: 2, + }); + const account = new MultiKeyAccount({ + multiKey, + signers: [singleSignerED25519SenderAccount, singleSignerSecp256k1Account], + }); + const message = "test message"; + const multiKeySig = account.sign(message); + expect(account.verifySignature({message, signature: multiKeySig})).toEqual(true); + }); + it("signs a message with a legacy ed25519 scheme and verifies successfully", () => { const { privateKey: privateKeyBytes, address, signatureHex, messageEncoded, stringMessage } = ed25519; const privateKey = new Ed25519PrivateKey(privateKeyBytes); From 8c07a730081632db1c1b57da94781229577b55a0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 14 May 2024 17:58:04 -0400 Subject: [PATCH 063/136] fmt --- tests/unit/account.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/account.test.ts b/tests/unit/account.test.ts index da71278cc..2f5785478 100644 --- a/tests/unit/account.test.ts +++ b/tests/unit/account.test.ts @@ -207,9 +207,9 @@ describe("Account", () => { multiKey, signers: [singleSignerED25519SenderAccount, singleSignerSecp256k1Account], }); - const message = "test message"; + const message = "test message"; const multiKeySig = account.sign(message); - expect(account.verifySignature({message, signature: multiKeySig})).toEqual(true); + expect(account.verifySignature({ message, signature: multiKeySig })).toEqual(true); }); it("signs a message with a legacy ed25519 scheme and verifies successfully", () => { From 2132878e808c72cabbc3619738dd12b822896976 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 15 May 2024 06:09:22 -0400 Subject: [PATCH 064/136] add test for misordering signers --- src/account/MultiKeyAccount.ts | 22 +++++++++--- .../transaction/transactionSubmission.test.ts | 35 +++++++++++++++++++ tests/unit/account.test.ts | 21 +++++++++++ 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 1f2c96ee1..cbc0d8397 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -64,17 +64,23 @@ export class MultiKeyAccount implements Account { const { multiKey, signers } = args; this.publicKey = multiKey; - this.signers = signers; this.signingScheme = SigningScheme.MultiKey; this.accountAddress = this.publicKey.authKey().derivedAddress(); - const bits: number[] = []; + // Get the index of each respective signer in the bitmap + const bitPositions: number[] = []; for (const signer of signers) { - bits.push(this.publicKey.getIndex(signer.publicKey)); + bitPositions.push(this.publicKey.getIndex(signer.publicKey)); } - this.signerIndicies = bits; - this.signaturesBitmap = this.publicKey.createBitmap({ bits }); + // Zip signers and bit positions and sort signers by bit positions in order + // to ensure the signature is signed in ascending order according to the bitmap. + // Authentication on chain will fail otherwise. + const signersAndBitPosition: [Account, number][] = signers.map((signer, index) => [signer, bitPositions[index]]); + signersAndBitPosition.sort((a, b) => a[1] - b[1]); + this.signers = signersAndBitPosition.map((value) => value[0]); + this.signerIndicies = signersAndBitPosition.map((value) => value[1]); + this.signaturesBitmap = this.publicKey.createBitmap({ bits: bitPositions }); } /** @@ -152,6 +158,12 @@ export class MultiKeyAccount implements Account { */ verifySignature(args: VerifyMultiKeySignatureArgs): boolean { const { message, signature } = args; + const isSignerIndiciesSorted = this.signerIndicies.every( + (value, i) => i === 0 || value >= this.signerIndicies[i - 1], + ); + if (!isSignerIndiciesSorted) { + return false; + } for (let i = 0; i < signature.signatures.length; i += 1) { const singleSignature = signature.signatures[i]; const publicKey = this.publicKey.publicKeys[this.signerIndicies[i]]; diff --git a/tests/e2e/transaction/transactionSubmission.test.ts b/tests/e2e/transaction/transactionSubmission.test.ts index 6b7825bfe..592000ddd 100644 --- a/tests/e2e/transaction/transactionSubmission.test.ts +++ b/tests/e2e/transaction/transactionSubmission.test.ts @@ -626,6 +626,41 @@ describe("transaction submission", () => { }); expect(response.signature?.type).toBe("single_sender"); }); + + test("it submits a multi key transaction with misordered signers", async () => { + const multiKey = new MultiKey({ + publicKeys: [ + singleSignerED25519SenderAccount.publicKey, + legacyED25519SenderAccount.publicKey, + singleSignerSecp256k1Account.publicKey, + ], + signaturesRequired: 2, + }); + + const account = new MultiKeyAccount({ + multiKey, + // the input to signers does not maintain ordering + signers: [singleSignerSecp256k1Account, singleSignerED25519SenderAccount], + }); + + await aptos.fundAccount({ accountAddress: account.accountAddress, amount: 100_000_000 }); + + const transaction = await aptos.transaction.build.simple({ + sender: account.accountAddress, + data: { + function: `0x${contractPublisherAccount.accountAddress.toStringWithoutPrefix()}::transfer::transfer`, + functionArguments: [1, receiverAccounts[0].accountAddress], + }, + }); + + const senderAuthenticator = aptos.transaction.sign({ signer: account, transaction }); + + const response = await aptos.transaction.submit.simple({ transaction, senderAuthenticator }); + await aptos.waitForTransaction({ + transactionHash: response.hash, + }); + expect(response.signature?.type).toBe("single_sender"); + }); }); describe("publish move module", () => { const account = Account.generate(); diff --git a/tests/unit/account.test.ts b/tests/unit/account.test.ts index 2f5785478..766bb5610 100644 --- a/tests/unit/account.test.ts +++ b/tests/unit/account.test.ts @@ -212,6 +212,27 @@ describe("Account", () => { expect(account.verifySignature({ message, signature: multiKeySig })).toEqual(true); }); + it("signs a message with a 2 of 3 multikey scheme and verifies successfully with misordered signers", () => { + const singleSignerED25519SenderAccount = Account.generate({ scheme: SigningSchemeInput.Ed25519, legacy: false }); + const legacyED25519SenderAccount = Account.generate(); + const singleSignerSecp256k1Account = Account.generate({ scheme: SigningSchemeInput.Secp256k1Ecdsa }); + const multiKey = new MultiKey({ + publicKeys: [ + singleSignerED25519SenderAccount.publicKey, + legacyED25519SenderAccount.publicKey, + singleSignerSecp256k1Account.publicKey, + ], + signaturesRequired: 2, + }); + const account = new MultiKeyAccount({ + multiKey, + signers: [singleSignerSecp256k1Account, singleSignerED25519SenderAccount], + }); + const message = "test message"; + const multiKeySig = account.sign(message); + expect(account.verifySignature({ message, signature: multiKeySig })).toEqual(true); + }); + it("signs a message with a legacy ed25519 scheme and verifies successfully", () => { const { privateKey: privateKeyBytes, address, signatureHex, messageEncoded, stringMessage } = ed25519; const privateKey = new Ed25519PrivateKey(privateKeyBytes); From 9b634c22f0edea570e44c65a2782fccfebebd3d5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 15:17:38 -0400 Subject: [PATCH 065/136] update example --- examples/typescript/keyless.ts | 46 ++++-------------------------- examples/typescript/package.json | 6 ++-- examples/typescript/pnpm-lock.yaml | 37 +++++++++++++++++------- 3 files changed, 36 insertions(+), 53 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 911d82e96..682267945 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -2,11 +2,9 @@ /* eslint-disable no-console */ /** - * This example shows how to use the Aptos client to create accounts, fund them, and transfer between them. + * This example shows how to use the Keyless accounts on Aptos */ -import * as readline from "readline"; - import { Account, AccountAddress, @@ -16,18 +14,14 @@ import { EphemeralKeyPair, Network, } from "@aptos-labs/ts-sdk"; -import { promisify } from "util"; +import * as readlineSync from "readline-sync"; -// TODO: There currently isn't a way to use the APTOS_COIN in the COIN_STORE due to a regex const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; const COIN_STORE = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; const ALICE_INITIAL_BALANCE = 100_000_000; const BOB_INITIAL_BALANCE = 100; const TRANSFER_AMOUNT = 10_000; -const TEST_JWT = - "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; - /** * Prints the balance of an account * @param aptos @@ -51,8 +45,6 @@ const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { const example = async () => { // Setup the client const config = new AptosConfig({ network: Network.DEVNET }); - // const config = new AptosConfig(); - const aptos = new Aptos(config); const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); @@ -71,33 +63,12 @@ const example = async () => { console.log(link); console.log(); - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - }); - - const questionAsync = promisify(rl.question).bind(rl); - - // eslint-disable-next-line consistent-return - async function getUserInput(): Promise { - try { - const response = await questionAsync("Paste the JWT token (or press enter to use default test token): "); - if (response.trim() === "") { - console.log(); - console.log("No jwt token inputted. Using test jwt token"); - console.log(); - rl.close(); - return TEST_JWT; - } - rl.close(); - return response.trim(); - } catch (error) { - rl.close(); - console.error("Error reading user input:", error); - } + function inputJwt(): string { + const jwt: string = readlineSync.question("Paste the JWT token (or press enter to use default test token): ", {hideEchoBack: false}); + return jwt; } - const jwt = await getUserInput(); + const jwt = inputJwt(); const bob = Account.generate(); @@ -105,16 +76,11 @@ const example = async () => { jwt, ephemeralKeyPair: aliceEphem, pepper: "00000000000000000000000000000000000000000000000000000000000000", - disableConnect: true, - // extraFieldKey: "family_name" }); console.log("=== Addresses ===\n"); console.log(`Alice's keyless account address is: ${alice.accountAddress}`); - console.log(`Alice's pk is: ${aliceEphem.privateKey}`); console.log(`Alice's nonce is: ${aliceEphem.nonce}`); - // console.log(`Alice's zkid is: ${alice.publicKey.addressSeed}`); - // console.log(`Alice's pk is: ${aliceEphem.privateKey}`); console.log(`Bob's address is: ${bob.accountAddress}`); diff --git a/examples/typescript/package.json b/examples/typescript/package.json index 36b690349..157531a26 100644 --- a/examples/typescript/package.json +++ b/examples/typescript/package.json @@ -24,10 +24,12 @@ "author": "", "license": "ISC", "dependencies": { + "@noble/curves": "^1.4.0", + "@types/readline-sync": "^1.4.8", "dotenv": "^16.3.1", "npm-run-all": "latest", - "superagent": "^8.1.2", - "@noble/curves": "^1.4.0" + "readline-sync": "^1.4.10", + "superagent": "^8.1.2" }, "peerDependencies": { "@aptos-labs/ts-sdk": "link:../.." diff --git a/examples/typescript/pnpm-lock.yaml b/examples/typescript/pnpm-lock.yaml index 181342256..f9ef022f5 100644 --- a/examples/typescript/pnpm-lock.yaml +++ b/examples/typescript/pnpm-lock.yaml @@ -11,12 +11,18 @@ dependencies: '@noble/curves': specifier: ^1.4.0 version: 1.4.0 + '@types/readline-sync': + specifier: ^1.4.8 + version: 1.4.8 dotenv: specifier: ^16.3.1 version: 16.3.1 npm-run-all: specifier: latest version: 4.1.5 + readline-sync: + specifier: ^1.4.10 + version: 1.4.10 superagent: specifier: ^8.1.2 version: 8.1.2 @@ -24,13 +30,13 @@ dependencies: devDependencies: '@types/node': specifier: latest - version: 20.8.9 + version: 20.12.12 ts-node: specifier: latest - version: 10.9.1(@types/node@20.8.9)(typescript@5.2.2) + version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) typescript: specifier: latest - version: 5.2.2 + version: 5.4.5 packages: @@ -84,12 +90,16 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/node@20.8.9: - resolution: {integrity: sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==} + /@types/node@20.12.12: + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} dependencies: undici-types: 5.26.5 dev: true + /@types/readline-sync@1.4.8: + resolution: {integrity: sha512-BL7xOf0yKLA6baAX6MMOnYkoflUyj/c7y3pqMRfU0va7XlwHAOTOIo4x55P/qLfMsuaYdJJKubToLqRVmRtRZA==} + dev: false + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -767,6 +777,11 @@ packages: path-type: 3.0.0 dev: false + /readline-sync@1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + dev: false + /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} @@ -950,8 +965,8 @@ packages: engines: {node: '>= 0.4'} dev: false - /ts-node@10.9.1(@types/node@20.8.9)(typescript@5.2.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -969,14 +984,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.9 + '@types/node': 20.12.12 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -1019,8 +1034,8 @@ packages: is-typed-array: 1.1.12 dev: false - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true From 388081709608d3a6e095d2c0fd9ba8b161aceb24 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 19:06:17 -0400 Subject: [PATCH 066/136] ekp docstrings --- src/account/EphemeralKeyPair.ts | 40 ++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index daa46a847..5b1456729 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -16,14 +16,37 @@ import { EphemeralPublicKeyVariant, HexInput, SigningSchemeInput } from "../type import { Deserializer, Serializable, Serializer } from "../bcs"; export class EphemeralKeyPair extends Serializable { + + static readonly BLINDER_LENGTH: number = 31; + + /** + * A byte array of length BLINDER_LENGTH used to obfuscate the public key from the IdP. + * Used in calculating the nonce passed to the IdP and as a secret witness in proof generation. + */ readonly blinder: Uint8Array; + /** + * A timestamp in seconds indicating when the ephemeral key pair is expired. After expiry, a new + * EphemeralKeyPair must be generated and a new JWT needs to be created. + */ readonly expiryDateSecs: bigint | number; + /** + * The value passed to the IdP when the user authenticates. It comprises of a hash of the + * ephermeral public key, expiry date, and blinder. + */ readonly nonce: string; + /** + * A private key used to sign transactions. This private key is not tied to any account on the chain as it + * is ephemeral in nature. + */ private privateKey: PrivateKey; + /** + * A public key used to verify transactions. This public key is not tied to any account on the chain as it + * is ephemeral in nature. + */ private publicKey: EphemeralPublicKey; constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint | number; blinder?: HexInput }) { @@ -31,15 +54,26 @@ export class EphemeralKeyPair extends Serializable { const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); + // We set the expiry date to be the nearest floored hour this.expiryDateSecs = expiryDateSecs || BigInt(floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS)); + // Generate the blinder if not provided this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); + // Calculate the nonce this.nonce = this.generateNonce(); } + /** + * Returns the public key of the key pair. + * @return EphemeralPublicKey + */ getPublicKey(): EphemeralPublicKey { return this.publicKey; } + /** + * Returns the public key of the key pair. + * @return boolean + */ isExpired(): boolean { const currentTimeSecs: number = Math.floor(Date.now() / 1000); return currentTimeSecs > this.expiryDateSecs; @@ -83,7 +117,7 @@ export class EphemeralKeyPair extends Serializable { return new EphemeralKeyPair({ privateKey }); } - generateNonce(): string { + private generateNonce(): string { const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); fields.push(BigInt(this.expiryDateSecs)); fields.push(bytesToBigIntLE(this.blinder)); @@ -93,7 +127,7 @@ export class EphemeralKeyPair extends Serializable { /** * Sign the given message with the private key. - * * + * * @param data in HexInput format * @returns EphemeralSignature */ @@ -106,7 +140,7 @@ export class EphemeralKeyPair extends Serializable { } function generateBlinder(): Uint8Array { - return randomBytes(31); + return randomBytes(EphemeralKeyPair.BLINDER_LENGTH); } function currentTimeInSeconds(): number { From 06c41ae0ad9d88c2c755cf8f6a5e64f331ec2e4d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 19:09:12 -0400 Subject: [PATCH 067/136] update docs --- src/internal/keyless.ts | 2 +- src/internal/transactionSubmission.ts | 2 ++ src/utils/apiEndpoints.ts | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index fdbd1ce40..c839a55ee 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -3,7 +3,7 @@ /** * This file contains the underlying implementations for exposed API surface in - * the {@link api/oidb}. By moving the methods out into a separate file, + * the {@link api/keyless}. By moving the methods out into a separate file, * other namespaces and processes can access these methods without depending on the entire * faucet namespace and without having a dependency cycle error. */ diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 29309e1ba..4d149e27f 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -275,6 +275,8 @@ export async function signAndSubmitTransaction(args: { transaction: AnyRawTransaction; }): Promise { const { aptosConfig, signer, transaction } = args; + // If the signer contains a KeylessAccount, await proof fetching in case the proof + // was fetched asyncronously. if (signer instanceof KeylessAccount || signer instanceof MultiKeyAccount) { await signer.waitForProofFetch(); } diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index c31f64114..e0f480ba7 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -23,17 +23,17 @@ export const NetworkToFaucetAPI: Record = { }; export const NetworkToPepperAPI: Record = { - mainnet: "mainnet not yet ready, requires sdk upgrade", + mainnet: "https://pepper.keyless.mainnet.aptoslabs.com/v0", testnet: "https://pepper.keyless.testnet.aptoslabs.com/v0", devnet: "https://pepper.keyless.devnet.aptoslabs.com/v0", - local: "https://pepper.keyless.devnet.aptoslabs.com/v0", + local: "http://127.0.0.1:8000/v0", }; export const NetworkToProverAPI: Record = { - mainnet: "mainnet not yet ready, requires sdk upgrade", + mainnet: "https://prover.keyless.mainnet.aptoslabs.com/v0", testnet: "https://prover.keyless.testnet.aptoslabs.com/v0", devnet: "https://prover.keyless.devnet.aptoslabs.com/v0", - local: "https://prover.keyless.devnet.aptoslabs.com/v0", + local: "http://127.0.0.1:8083/v0", }; export enum Network { From 7a78d482c7b07d7fbb5add4d1726d5461ab21b9d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 19:09:29 -0400 Subject: [PATCH 068/136] remove waitfortxn changes --- src/transactions/management/transactionWorker.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/transactions/management/transactionWorker.ts b/src/transactions/management/transactionWorker.ts index 27fcb71ec..c56a37ae6 100644 --- a/src/transactions/management/transactionWorker.ts +++ b/src/transactions/management/transactionWorker.ts @@ -233,13 +233,7 @@ export class TransactionWorker extends EventEmitter { async checkTransaction(sentTransaction: PromiseFulfilledResult, sequenceNumber: bigint) { try { const waitFor: Array> = []; - waitFor.push( - waitForTransaction({ - aptosConfig: this.aptosConfig, - transactionHash: sentTransaction.value.hash, - options: { timeoutSecs: 3 }, - }), - ); + waitFor.push(waitForTransaction({ aptosConfig: this.aptosConfig, transactionHash: sentTransaction.value.hash })); const sentTransactions = await Promise.allSettled(waitFor); for (let i = 0; i < sentTransactions.length; i += 1) { From 492fcde83e5d7828b913501f8dbf09b2e88b25cb Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 19:15:45 -0400 Subject: [PATCH 069/136] add docstring to ekp.generate --- src/account/EphemeralKeyPair.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 5b1456729..ed0342423 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -105,11 +105,16 @@ export class EphemeralKeyPair extends Serializable { return EphemeralKeyPair.deserialize(new Deserializer(bytes)); } - static generate(args?: { scheme: SigningSchemeInput }): EphemeralKeyPair { + /** + * Returns the public key of the key pair. + * @param scheme the type of keypair to use for the EphemeralKeyPair. Only Ed25519 supported for now. + * @return boolean + */ + static generate(args?: { scheme: EphemeralPublicKeyVariant }): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { - case SigningSchemeInput.Ed25519: + case EphemeralPublicKeyVariant.Ed25519: default: privateKey = Ed25519PrivateKey.generate(); } From 8285fd5d5eae4a18756d1fe83d84ca42dc158206 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 19:16:04 -0400 Subject: [PATCH 070/136] remove unused dep --- src/account/EphemeralKeyPair.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index ed0342423..4bf3f551b 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -12,7 +12,7 @@ import { } from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; -import { EphemeralPublicKeyVariant, HexInput, SigningSchemeInput } from "../types"; +import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; export class EphemeralKeyPair extends Serializable { From 316e540a60114156f015e58a71d5b4054059e92e Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 19:17:01 -0400 Subject: [PATCH 071/136] remove slip 10 code --- src/account/KeylessAccount.ts | 7 ------- src/core/crypto/ed25519.ts | 28 ++++++++++++++++++++++++---- src/core/crypto/hdKey.ts | 31 ------------------------------- tests/unit/hdKey.test.ts | 4 ++-- 4 files changed, 26 insertions(+), 44 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 47ca46591..9efe0d971 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -16,7 +16,6 @@ import { Signature, SignedGroth16Signature, computeAddressSeed, - fromDerivationPath as fromDerivationPathInner, } from "../core/crypto"; import { Account } from "./Account"; @@ -57,8 +56,6 @@ export interface ProofFetchEvents { export class KeylessAccount extends Serializable implements Account { static readonly PEPPER_LENGTH: number = 31; - static readonly SLIP_0010_SEED: string = "32 bytes"; - publicKey: KeylessPublicKey; ephemeralKeyPair: EphemeralKeyPair; @@ -296,8 +293,4 @@ export class KeylessAccount extends Serializable implements Account { proofFetchCallback, }); } - - static fromDerivationPath(path: string, seed: Uint8Array): Uint8Array { - return fromDerivationPathInner(path, KeylessAccount.SLIP_0010_SEED, seed); - } } diff --git a/src/core/crypto/ed25519.ts b/src/core/crypto/ed25519.ts index 6adb9f36e..97b6daf80 100644 --- a/src/core/crypto/ed25519.ts +++ b/src/core/crypto/ed25519.ts @@ -7,7 +7,7 @@ import { Serializable, Serializer } from "../../bcs/serializer"; import { AuthenticationKey } from "../authenticationKey"; import { Hex } from "../hex"; import { HexInput, SigningScheme as AuthenticationKeyScheme } from "../../types"; -import { isValidHardenedPath, fromDerivationPath as fromDerivationPathInner, mnemonicToSeed } from "./hdKey"; +import { CKDPriv, deriveKey, HARDENED_OFFSET, isValidHardenedPath, mnemonicToSeed, splitPath } from "./hdKey"; import { PrivateKey } from "./privateKey"; import { AccountPublicKey, VerifySignatureArgs } from "./publicKey"; import { Signature } from "./signature"; @@ -185,9 +185,29 @@ export class Ed25519PrivateKey extends Serializable implements PrivateKey { if (!isValidHardenedPath(path)) { throw new Error(`Invalid derivation path ${path}`); } - return new Ed25519PrivateKey( - fromDerivationPathInner(path, Ed25519PrivateKey.SLIP_0010_SEED, mnemonicToSeed(mnemonics)), - ); + return Ed25519PrivateKey.fromDerivationPathInner(path, mnemonicToSeed(mnemonics)); + } + + /** + * A private inner function so we can separate from the main fromDerivationPath() method + * to add tests to verify we create the keys correctly. + * + * @param path the BIP44 path + * @param seed the seed phrase created by the mnemonics + * @param offset the offset used for key derivation, defaults to 0x80000000 + * @returns + */ + private static fromDerivationPathInner(path: string, seed: Uint8Array, offset = HARDENED_OFFSET): Ed25519PrivateKey { + const { key, chainCode } = deriveKey(Ed25519PrivateKey.SLIP_0010_SEED, seed); + + const segments = splitPath(path).map((el) => parseInt(el, 10)); + + // Derive the child key based on the path + const { key: privateKey } = segments.reduce((parentKeys, segment) => CKDPriv(parentKeys, segment + offset), { + key, + chainCode, + }); + return new Ed25519PrivateKey(privateKey); } // endregion diff --git a/src/core/crypto/hdKey.ts b/src/core/crypto/hdKey.ts index ecfc2bb77..da3949d07 100644 --- a/src/core/crypto/hdKey.ts +++ b/src/core/crypto/hdKey.ts @@ -4,7 +4,6 @@ import { hmac } from "@noble/hashes/hmac"; import { sha512 } from "@noble/hashes/sha512"; import * as bip39 from "@scure/bip39"; -import { HexInput } from "../../types"; export type DerivedKeys = { key: Uint8Array; @@ -16,7 +15,6 @@ export type DerivedKeys = { */ export const APTOS_HARDENED_REGEX = /^m\/44'\/637'\/[0-9]+'\/[0-9]+'\/[0-9]+'?$/; export const APTOS_BIP44_REGEX = /^m\/44'\/637'\/[0-9]+'\/[0-9]+\/[0-9]+$/; -export const APTOS_BIP44_DEFAULT_DERIVATION_PATH = "m/44'/637'/0'/0'/0'"; /** * A list of supported key types and associated seeds @@ -93,35 +91,6 @@ const removeApostrophes = (val: string): string => val.replace("'", ""); */ export const splitPath = (path: string): Array => path.split("/").slice(1).map(removeApostrophes); -/** - * @param path the BIP44 path - * @param seed the seed phrase created by the mnemonics - * @param offset the offset used for key derivation, defaults to 0x80000000 - * @returns - */ -export function fromDerivationPath( - path: string, - hashSeed: HexInput, - seed: Uint8Array, - offset = HARDENED_OFFSET, -): Uint8Array { - // if (offset === HARDENED_OFFSET && !isValidHardenedPath(path)) { - // throw new Error(`Invalid hardened derivation path ${path}`); - // } else if (offset !== HARDENED_OFFSET && !isValidBIP44Path(path)) { - // throw new Error(`Invalid derivation path ${path}`); - // } - const { key, chainCode } = deriveKey(hashSeed, seed); - - const segments = splitPath(path).map((el) => parseInt(el, 10)); - - // Derive the child key based on the path - const { key: privateKey } = segments.reduce((parentKeys, segment) => CKDPriv(parentKeys, segment + offset), { - key, - chainCode, - }); - return privateKey; -} - /** * Normalizes the mnemonic by removing extra whitespace and making it lowercase * @param mnemonic the mnemonic seed phrase diff --git a/tests/unit/hdKey.test.ts b/tests/unit/hdKey.test.ts index 8591b15e2..a09c691b3 100644 --- a/tests/unit/hdKey.test.ts +++ b/tests/unit/hdKey.test.ts @@ -1,5 +1,5 @@ import { secp256k1WalletTestObject, wallet } from "./helper"; -import { Ed25519PrivateKey, fromDerivationPath, Hex, isValidBIP44Path, isValidHardenedPath, Secp256k1PrivateKey } from "../../src"; +import { Ed25519PrivateKey, Hex, isValidBIP44Path, isValidHardenedPath, Secp256k1PrivateKey } from "../../src"; describe("Hierarchical Deterministic Key (hdkey)", () => { describe("hardened path", () => { @@ -106,7 +106,7 @@ describe("Hierarchical Deterministic Key (hdkey)", () => { vectors.forEach(({ chain, private: privateKey }) => { it(`should generate correct key pair for ${chain}`, () => { // eslint-disable-next-line @typescript-eslint/dot-notation - const key = new Ed25519PrivateKey(fromDerivationPath(chain, Ed25519PrivateKey.SLIP_0010_SEED, seed.toUint8Array())); + const key = Ed25519PrivateKey["fromDerivationPathInner"](chain, seed.toUint8Array()); expect(key.toString()).toBe(`0x${privateKey}`); }); }); From 406fa5cc89f0b475a91cefe89619dc1b9edce28d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 20:19:38 -0400 Subject: [PATCH 072/136] update docs --- src/account/KeylessAccount.ts | 113 ++++++++++++++++++--------------- src/account/MultiKeyAccount.ts | 4 ++ src/utils/apiEndpoints.ts | 4 +- 3 files changed, 68 insertions(+), 53 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 9efe0d971..57b34f7ba 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -9,9 +9,9 @@ import { AccountAddress } from "../core/accountAddress"; import { AnyPublicKey, AnySignature, + Groth16Zkp, KeylessPublicKey, KeylessSignature, - OpenIdSignature, OpenIdSignatureOrZkProof, Signature, SignedGroth16Signature, @@ -23,8 +23,8 @@ import { EphemeralKeyPair } from "./EphemeralKeyPair"; import { Hex } from "../core/hex"; import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; import { Deserializer, Serializable, Serializer } from "../bcs"; -import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; -import { AnyRawTransaction } from "../transactions/types"; +import { deriveTransactionType, generateSigningMessageForSerializable } from "../transactions/transactionBuilder/signingMessage"; +import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; function base64UrlDecode(base64Url: string): string { // Replace base64url-specific characters @@ -165,44 +165,55 @@ export class KeylessAccount extends Serializable implements Account { }); } + /** + * Checks if the proof is expired. If so the account must be rederived with a new EphemeralKeyPair + * and JWT token. + * @return boolean + */ isExpired(): boolean { return this.ephemeralKeyPair.isExpired(); } - bcsToBytes(): Uint8Array { - const serializer = new Serializer(); - this.serialize(serializer); - return serializer.toUint8Array(); - } - - bcsToHex(): Hex { - const bcsBytes = this.bcsToBytes(); - return Hex.fromHexInput(bcsBytes); - } - + /** + * Sign a message using Keyless. + * @param message the message to sign, as binary input + * @return the AccountAuthenticator containing the signature, together with the account's public key + */ signWithAuthenticator(message: HexInput): AccountAuthenticatorSingleKey { const signature = new AnySignature(this.sign(message)); const publicKey = new AnyPublicKey(this.publicKey); return new AccountAuthenticatorSingleKey(publicKey, signature); } + /** + * Sign a transaction using Keyless. + * @param transaction the raw transaction + * @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key + */ signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey { - const raw = deriveTransactionType(transaction); - const signature = new AnySignature(this.sign(raw.bcsToBytes())); + const signature = new AnySignature(this.signTransaction(transaction)); const publicKey = new AnyPublicKey(this.publicKey); return new AccountAuthenticatorSingleKey(publicKey, signature); } + /** + * Waits for asyncronous proof fetching to finish. + * @return + */ async waitForProofFetch() { if (this.proofOrPromise instanceof Promise) { await this.proofOrPromise; } } - sign(data: HexInput): Signature { + /** + * Sign the given message using Keyless. + * @param message in HexInput format + * @returns Signature + */ + sign(data: HexInput): KeylessSignature { const { expiryDateSecs } = this.ephemeralKeyPair; - const currentTimeInSeconds = Math.floor(new Date().getTime() / 1000); - if (expiryDateSecs < currentTimeInSeconds) { + if (this.isExpired()) { throw new Error("Ephemeral key pair is expired."); } if (this.proof === undefined) { @@ -210,13 +221,7 @@ export class KeylessAccount extends Serializable implements Account { } const jwtHeader = this.jwt.split(".")[0]; const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); - - const serializer = new Serializer(); - serializer.serializeFixedBytes(Hex.fromHexInput(data).toUint8Array()); - serializer.serializeOption(this.proof.proof); - const signMess = generateSigningMessage(serializer.toUint8Array(), "APTOS::TransactionAndProof"); - - const ephemeralSignature = this.ephemeralKeyPair.sign(signMess); + const ephemeralSignature = this.ephemeralKeyPair.sign(data); return new KeylessSignature({ jwtHeader: base64UrlDecode(jwtHeader), @@ -227,36 +232,25 @@ export class KeylessAccount extends Serializable implements Account { }); } - signTransaction(transaction: AnyRawTransaction): Signature { + /** + * Sign the given transaction with Keyless. + * Signs the transaction and proof to guard against proof malleability. + * @param transaction the transaction to be signed + * @returns KeylessSignature + */ + signTransaction(transaction: AnyRawTransaction): KeylessSignature { + if (this.proof === undefined) { + throw new Error("Proof not found"); + } const raw = deriveTransactionType(transaction); - return this.sign(raw.bcsToBytes()); - } - - signWithOpenIdSignature(data: HexInput): Signature { - const [jwtHeader, jwtPayload, jwtSignature] = this.jwt.split("."); - const openIdSig = new OpenIdSignature({ - jwtSignature, - jwtPayloadJson: jwtPayload, - uidKey: this.uidKey, - epkBlinder: this.ephemeralKeyPair.blinder, - pepper: this.pepper, - }); - - const { expiryDateSecs } = this.ephemeralKeyPair; - const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); - const ephemeralSignature = this.ephemeralKeyPair.sign(data); - return new KeylessSignature({ - jwtHeader, - openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(openIdSig), - expiryDateSecs, - ephemeralPublicKey, - ephemeralSignature, - }); + const txnAndProof = new TransactionAndProof(raw, this.proof.proof) + const signMess = generateSigningMessageForSerializable(txnAndProof); + return this.sign(signMess); } // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this verifySignature(args: { message: HexInput; signature: Signature }): boolean { - return true; + throw new Error("Not implemented"); } static fromBytes(bytes: Uint8Array): KeylessAccount { @@ -294,3 +288,20 @@ export class KeylessAccount extends Serializable implements Account { }); } } + +class TransactionAndProof extends Serializable { + transaction: AnyRawTransactionInstance; + + proof?: Groth16Zkp; + + constructor(transaction: AnyRawTransactionInstance, proof?: Groth16Zkp) { + super(); + this.transaction = transaction; + this.proof = proof; + } + + serialize(serializer: Serializer): void { + serializer.serializeFixedBytes(this.transaction.bcsToBytes()); + serializer.serializeOption(this.proof); + } +} diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 2a507f620..25eea2e7f 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -124,6 +124,10 @@ export class MultiKeyAccount implements Account { return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction)); } + /** + * Waits for any proofs to be fetched + * @return + */ async waitForProofFetch() { const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; await Promise.all(keylessSigners.filter((signer) => signer.proof instanceof Promise).map((signer) => signer.proof)); diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index e0f480ba7..d33df85ce 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -25,14 +25,14 @@ export const NetworkToFaucetAPI: Record = { export const NetworkToPepperAPI: Record = { mainnet: "https://pepper.keyless.mainnet.aptoslabs.com/v0", testnet: "https://pepper.keyless.testnet.aptoslabs.com/v0", - devnet: "https://pepper.keyless.devnet.aptoslabs.com/v0", + devnet: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", local: "http://127.0.0.1:8000/v0", }; export const NetworkToProverAPI: Record = { mainnet: "https://prover.keyless.mainnet.aptoslabs.com/v0", testnet: "https://prover.keyless.testnet.aptoslabs.com/v0", - devnet: "https://prover.keyless.devnet.aptoslabs.com/v0", + devnet: "https://api.devnet.aptoslabs.com/keyless/prover/v0", local: "http://127.0.0.1:8083/v0", }; From 92ff8f78220d3edf13c6b7e45b9c01a17ab41c9b Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 16 May 2024 21:04:22 -0400 Subject: [PATCH 073/136] add poseidon test --- tests/unit/poseidon.test.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tests/unit/poseidon.test.ts diff --git a/tests/unit/poseidon.test.ts b/tests/unit/poseidon.test.ts new file mode 100644 index 000000000..c383861fc --- /dev/null +++ b/tests/unit/poseidon.test.ts @@ -0,0 +1,15 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { poseidonHash } from "../../src/core/crypto/poseidon"; + +describe("Poseidon", () => { + it("should hash correctly", () => { + const input = [1,2] + let hash = poseidonHash(input); + expect(hash).toEqual(BigInt("7853200120776062878684798364095072458815029376092732009249414926327459813530")); + input.pop() + hash = poseidonHash(input); + expect(hash).toEqual(BigInt("18586133768512220936620570745912940619677854269274689475585506675881198879027")); + }); +}); From c3311498a82d52bc9b86f7b11b7bf46767f4587c Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 00:21:18 -0400 Subject: [PATCH 074/136] refactor crypto/keyless --- src/account/KeylessAccount.ts | 54 +++-- src/api/keyless.ts | 21 +- src/core/crypto/ephemeral.ts | 46 ++-- src/core/crypto/keyless.ts | 405 +++++++++++++++++++--------------- src/core/crypto/proof.ts | 16 ++ src/internal/keyless.ts | 29 +-- src/types/index.ts | 7 +- 7 files changed, 320 insertions(+), 258 deletions(-) create mode 100644 src/core/crypto/proof.ts diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 57b34f7ba..9a6d70212 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -4,18 +4,17 @@ import { JwtPayload, jwtDecode } from "jwt-decode"; import { decode } from "base-64"; import EventEmitter from "eventemitter3"; -import { HexInput, SigningScheme } from "../types"; +import { EphemeralCertificateVariant, HexInput, SigningScheme } from "../types"; import { AccountAddress } from "../core/accountAddress"; import { AnyPublicKey, AnySignature, - Groth16Zkp, KeylessPublicKey, KeylessSignature, - OpenIdSignatureOrZkProof, + EphemeralCertificate, Signature, - SignedGroth16Signature, - computeAddressSeed, + ZeroKnowledgeSig, + ZkProof, } from "../core/crypto"; import { Account } from "./Account"; @@ -26,16 +25,6 @@ import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType, generateSigningMessageForSerializable } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; -function base64UrlDecode(base64Url: string): string { - // Replace base64url-specific characters - const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - // Pad the string with '=' characters if needed - const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); - // Decode the base64 string using the base-64 library - const decodedString = decode(paddedBase64); - return decodedString; -} - export type ProofFetchSuccess = { status: "Success"; }; @@ -70,9 +59,9 @@ export class KeylessAccount extends Serializable implements Account { accountAddress: AccountAddress; - proof: SignedGroth16Signature | undefined; + proof: ZeroKnowledgeSig | undefined; - proofOrPromise: SignedGroth16Signature | Promise; + proofOrPromise: ZeroKnowledgeSig | Promise; signingScheme: SigningScheme; @@ -88,15 +77,14 @@ export class KeylessAccount extends Serializable implements Account { uidVal: string; aud: string; pepper: HexInput; - proofOrFetcher: SignedGroth16Signature | Promise; + proofOrFetcher: ZeroKnowledgeSig | Promise; proofFetchCallback?: ProofFetchCallback jwt: string; }) { super(); - const { address, ephemeralKeyPair, iss, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args; + const { address, ephemeralKeyPair, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; - const addressSeed = computeAddressSeed(args); - this.publicKey = new KeylessPublicKey(iss, addressSeed); + this.publicKey = KeylessPublicKey.create(args); this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); this.uidKey = uidKey; this.uidVal = uidVal; @@ -104,7 +92,7 @@ export class KeylessAccount extends Serializable implements Account { this.jwt = jwt; this.emitter = new EventEmitter(); this.proofOrPromise = proofOrFetcher; - if (proofOrFetcher instanceof SignedGroth16Signature) { + if (proofOrFetcher instanceof ZeroKnowledgeSig) { this.proof = proofOrFetcher; } else { if (proofFetchCallback === undefined) { @@ -126,7 +114,7 @@ export class KeylessAccount extends Serializable implements Account { this.pepper = pepperBytes; } - async init(promise: Promise) { + async init(promise: Promise) { try { this.proof = await promise; this.emitter.emit("proofFetchFinish", {status: "Success"}); @@ -155,7 +143,7 @@ export class KeylessAccount extends Serializable implements Account { const uidKey = deserializer.deserializeStr(); const pepper = deserializer.deserializeFixedBytes(31); const ephemeralKeyPair = EphemeralKeyPair.deserialize(deserializer); - const proof = SignedGroth16Signature.deserialize(deserializer); + const proof = ZeroKnowledgeSig.deserialize(deserializer); return KeylessAccount.fromJWTAndProof({ proof, pepper, @@ -225,7 +213,7 @@ export class KeylessAccount extends Serializable implements Account { return new KeylessSignature({ jwtHeader: base64UrlDecode(jwtHeader), - openIdSignatureOrZkProof: new OpenIdSignatureOrZkProof(this.proof), + ephemeralCertificate: new EphemeralCertificate(this.proof, EphemeralCertificateVariant.ZkProof), expiryDateSecs, ephemeralPublicKey, ephemeralSignature, @@ -258,7 +246,7 @@ export class KeylessAccount extends Serializable implements Account { } static fromJWTAndProof(args: { - proof: SignedGroth16Signature | Promise; + proof: ZeroKnowledgeSig | Promise; jwt: string; ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; @@ -292,9 +280,9 @@ export class KeylessAccount extends Serializable implements Account { class TransactionAndProof extends Serializable { transaction: AnyRawTransactionInstance; - proof?: Groth16Zkp; + proof?: ZkProof; - constructor(transaction: AnyRawTransactionInstance, proof?: Groth16Zkp) { + constructor(transaction: AnyRawTransactionInstance, proof?: ZkProof) { super(); this.transaction = transaction; this.proof = proof; @@ -305,3 +293,13 @@ class TransactionAndProof extends Serializable { serializer.serializeOption(this.proof); } } + +function base64UrlDecode(base64Url: string): string { + // Replace base64url-specific characters + const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); + // Pad the string with '=' characters if needed + const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); + // Decode the base64 string using the base-64 library + const decodedString = decode(paddedBase64); + return decodedString; +} diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 436654258..9a613d22d 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -7,21 +7,34 @@ import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; /** - * A class to query all `OIDB` related queries on Aptos. + * A class to query all `Keyless` related queries on Aptos. */ export class Keyless { constructor(readonly config: AptosConfig) {} /** - * TODO + * Fetches the pepper from the Aptos pepper service API. * - * @param args.jwt jwt token - * @returns The pepper + * @param args.jwt JWT token + * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token + * @returns The pepper which is a Uint8Array of length 31. */ async getPepper(args: { jwt: string; ephemeralKeyPair: EphemeralKeyPair }): Promise { return getPepper({ aptosConfig: this.config, ...args }); } + /** + * Fetches the pepper from the Aptos pepper service API. + * + * @param args.jwt JWT token + * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token + * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment + * @param args.pepper the pepper + * @param args.extraFieldKey a key in the JWT token used to reveal a value on chain + * @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done asyncronously. Once + * if finishes the callback function will be called. + * @returns A KeylessAccount that can be used to sign transactions + */ async deriveKeylessAccount(args: { jwt: string; ephemeralKeyPair: EphemeralKeyPair; diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts index 3fb97c322..12273ec1d 100644 --- a/src/core/crypto/ephemeral.ts +++ b/src/core/crypto/ephemeral.ts @@ -6,16 +6,20 @@ import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; import { Hex } from "../hex"; /** - * Represents ephemeral keys and signatures for Aptos Keyless accounts. + * Represents ephemeral public keys for Aptos Keyless accounts. * - * TODO + * These are not public keys used as a public key on an account. They are only used ephemerally on Keyless accounts. */ export class EphemeralPublicKey extends PublicKey { + /** - * Reference to the inner public key + * The public key itself */ public readonly publicKey: PublicKey; + /** + * An enum indicating the scheme of the ephemeral public key + */ public readonly variant: EphemeralPublicKeyVariant; constructor(publicKey: PublicKey) { @@ -41,19 +45,10 @@ export class EphemeralPublicKey extends PublicKey { } /** - * Get the public key as a hex string with the 0x prefix. - * - * @returns string representation of the public key - */ - toString(): string { - return this.bcsToHex().toString(); - } - - /** - * Verifies a signed data with a public key + * Verifies a signed data with a the ephemeral public key * * @param args.message message - * @param args.signature The signature + * @param args.signature The signature that was signed by the private key of the ephemeral public key * @returns true if the signature is valid */ verifySignature(args: { message: HexInput; signature: EphemeralSignature }): boolean { @@ -83,13 +78,17 @@ export class EphemeralPublicKey extends PublicKey { static isPublicKey(publicKey: PublicKey): publicKey is EphemeralPublicKey { return publicKey instanceof EphemeralPublicKey; } - - isEd25519(): this is Ed25519PublicKey { - return this.publicKey instanceof Ed25519PublicKey; - } } +/** + * Represents ephemeral signatures used in Aptos Keyless accounts. + * + * These signatures are used inside of KeylessSignature + */ export class EphemeralSignature extends Signature { + /** + * The signature signed by the private key of an EphemeralKeyPair + */ public readonly signature: Signature; constructor(signature: Signature) { @@ -110,16 +109,7 @@ export class EphemeralSignature extends Signature { * @returns Uint8Array representation of the public key */ toUint8Array(): Uint8Array { - return this.signature.toUint8Array(); - } - - /** - * Get the public key as a hex string with the 0x prefix. - * - * @returns string representation of the public key - */ - toString(): string { - return this.signature.toString(); + return this.bcsToBytes(); } static fromHex(hexInput: HexInput): EphemeralSignature { diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 4d451474f..4c48cb710 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -5,10 +5,11 @@ import { AccountPublicKey, PublicKey } from "./publicKey"; import { Signature } from "./signature"; import { Deserializer, Serializable, Serializer } from "../../bcs"; import { Hex } from "../hex"; -import { HexInput, EphemeralCertificate, AnyPublicKeyVariant, SigningScheme } from "../../types"; +import { HexInput, EphemeralCertificateVariant, AnyPublicKeyVariant, SigningScheme, ZkpVariant } from "../../types"; import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; +import { Proof } from "./proof"; export const EPK_HORIZON_SECS = 10000000; export const MAX_AUD_VAL_BYTES = 120; @@ -25,23 +26,27 @@ export const MAX_COMMITED_EPK_BYTES = 93; * KeylessPublicKey authentication key is represented in the SDK as `AnyPublicKey`. */ export class KeylessPublicKey extends AccountPublicKey { - static readonly ADDRESS_SEED_LENGTH: number = 32; + static readonly ID_COMMITMENT_LENGTH: number = 32; readonly iss: string; - readonly addressSeed: Uint8Array; + readonly idCommitment: Uint8Array; - constructor(iss: string, addressSeed: HexInput) { + constructor(iss: string, idCommitment: HexInput) { super(); - const addressSeedBytes = Hex.fromHexInput(addressSeed).toUint8Array(); - if (addressSeedBytes.length !== KeylessPublicKey.ADDRESS_SEED_LENGTH) { - throw new Error(`Address seed length in bytes should be ${KeylessPublicKey.ADDRESS_SEED_LENGTH}`); + const idcBytes = Hex.fromHexInput(idCommitment).toUint8Array(); + if (idcBytes.length !== KeylessPublicKey.ID_COMMITMENT_LENGTH) { + throw new Error(`Address seed length in bytes should be ${KeylessPublicKey.ID_COMMITMENT_LENGTH}`); } - this.iss = iss; - this.addressSeed = addressSeedBytes; + this.idCommitment = idcBytes; } + /** + * Get the authentication key for the keyless public key + * + * @returns AuthenticationKey + */ authKey(): AuthenticationKey { const serializer = new Serializer(); serializer.serializeU32AsUleb128(AnyPublicKeyVariant.Keyless); @@ -77,15 +82,14 @@ export class KeylessPublicKey extends AccountPublicKey { * @param args.signature The signature * @returns true if the signature is valid */ - // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this verifySignature(args: { message: HexInput; signature: KeylessSignature }): boolean { - // TODO - return true; + throw new Error("Not yet implemented") } serialize(serializer: Serializer): void { serializer.serializeStr(this.iss); - serializer.serializeBytes(this.addressSeed); + serializer.serializeBytes(this.idCommitment); } static deserialize(deserializer: Deserializer): KeylessPublicKey { @@ -104,6 +108,16 @@ export class KeylessPublicKey extends AccountPublicKey { return publicKey instanceof KeylessPublicKey; } + /** + * Creates a KeylessPublicKey from the JWT components plus pepper + * + * @param args.iss the iss of the identity + * @param args.uidKey the key to use to get the uidVal in the JWT token + * @param args.uidVal the value of the uidKey in the JWT token + * @param args.aud the client ID of the application + * @param args.pepper The pepper used to maintain privacy of the account + * @returns KeylessPublicKey + */ static create(args: { iss: string; uidKey: string; @@ -111,12 +125,12 @@ export class KeylessPublicKey extends AccountPublicKey { aud: string; pepper: HexInput; }): KeylessPublicKey { - computeAddressSeed(args); - return new KeylessPublicKey(args.iss, computeAddressSeed(args)); + computeIdCommitment(args); + return new KeylessPublicKey(args.iss, computeIdCommitment(args)); } } -export function computeAddressSeed(args: { +function computeIdCommitment(args: { uidKey: string; uidVal: string; aud: string; @@ -131,15 +145,21 @@ export function computeAddressSeed(args: { hashASCIIStrToField(uidKey, MAX_UID_KEY_BYTES), ]; - return bigIntToBytesLE(poseidonHash(fields), KeylessPublicKey.ADDRESS_SEED_LENGTH); + return bigIntToBytesLE(poseidonHash(fields), KeylessPublicKey.ID_COMMITMENT_LENGTH); } -export class OpenIdSignatureOrZkProof extends Signature { +export class EphemeralCertificate extends Signature { public readonly signature: Signature; - constructor(signature: Signature) { + /** + * Index of the underlying enum variant + */ + private readonly variant: EphemeralCertificateVariant; + + constructor(signature: Signature, variant: EphemeralCertificateVariant) { super(); this.signature = signature; + this.variant = variant; } /** @@ -161,35 +181,36 @@ export class OpenIdSignatureOrZkProof extends Signature { } serialize(serializer: Serializer): void { - if (this.signature instanceof OpenIdSignature) { - serializer.serializeU32AsUleb128(EphemeralCertificate.OpenIdSignature); - this.signature.serialize(serializer); - } else if (this.signature instanceof SignedGroth16Signature) { - serializer.serializeU32AsUleb128(EphemeralCertificate.ZkProof); - this.signature.serialize(serializer); - } else { - throw new Error("Not a valid OIDB signature"); - } + serializer.serializeU32AsUleb128(this.variant); + this.signature.serialize(serializer); } - static deserialize(deserializer: Deserializer): OpenIdSignatureOrZkProof { - const index = deserializer.deserializeUleb128AsU32(); - switch (index) { - case EphemeralCertificate.ZkProof: - return new OpenIdSignatureOrZkProof(SignedGroth16Signature.load(deserializer)); - case EphemeralCertificate.OpenIdSignature: - return new OpenIdSignatureOrZkProof(OpenIdSignature.load(deserializer)); + static deserialize(deserializer: Deserializer): EphemeralCertificate { + const variant = deserializer.deserializeUleb128AsU32(); + switch (variant) { + case EphemeralCertificateVariant.ZkProof: + return new EphemeralCertificate(ZeroKnowledgeSig.deserialize(deserializer), variant); default: - throw new Error(`Unknown variant index for EphemeralCertificate: ${index}`); + throw new Error(`Unknown variant index for EphemeralCertificate: ${variant}`); } } } -export class Groth16Zkp extends Serializable { +export class Groth16Zkp extends Proof { + + /** + * The bytes of proof point a + */ a: Uint8Array; + /** + * The bytes of proof point b + */ b: Uint8Array; + /** + * The bytes of proof point c + */ c: Uint8Array; constructor(args: { a: HexInput; b: HexInput; c: HexInput }) { @@ -200,23 +221,13 @@ export class Groth16Zkp extends Serializable { this.c = Hex.fromHexInput(c).toUint8Array(); } - toUint8Array(): Uint8Array { - const serializer = new Serializer(); - this.serialize(serializer); - return serializer.toUint8Array(); - } - serialize(serializer: Serializer): void { - // There's currently only one variant - serializer.serializeU32AsUleb128(0); serializer.serializeFixedBytes(this.a); serializer.serializeFixedBytes(this.b); serializer.serializeFixedBytes(this.c); } static deserialize(deserializer: Deserializer): Groth16Zkp { - // Ignored, as there's currently only one possible ZKP variant - deserializer.deserializeUleb128AsU32(); const a = deserializer.deserializeFixedBytes(32); const b = deserializer.deserializeFixedBytes(64); const c = deserializer.deserializeFixedBytes(32); @@ -224,8 +235,38 @@ export class Groth16Zkp extends Serializable { } } -export class SignedGroth16Signature extends Signature { - readonly proof: Groth16Zkp; +export class ZkProof extends Serializable { + public readonly proof: Proof; + + /** + * Index of the underlying enum variant + */ + private readonly variant: ZkpVariant; + + constructor(proof: Proof, variant: ZkpVariant) { + super(); + this.proof = proof; + this.variant = variant; + } + + serialize(serializer: Serializer): void { + serializer.serializeU32AsUleb128(this.variant); + this.proof.serialize(serializer); + } + + static deserialize(deserializer: Deserializer): ZkProof { + const variant = deserializer.deserializeUleb128AsU32(); + switch (variant) { + case ZkpVariant.Groth16: + return new ZkProof(Groth16Zkp.deserialize(deserializer), variant); + default: + throw new Error(`Unknown variant index for ZkProof: ${variant}`); + } + } +} + +export class ZeroKnowledgeSig extends Signature { + readonly proof: ZkProof; readonly expHorizonSecs: bigint; @@ -236,7 +277,7 @@ export class SignedGroth16Signature extends Signature { readonly trainingWheelsSignature?: EphemeralSignature; constructor(args: { - proof: Groth16Zkp; + proof: ZkProof; expHorizonSecs?: bigint; extraField?: string; overrideAudVal?: string; @@ -285,137 +326,34 @@ export class SignedGroth16Signature extends Signature { serializer.serializeOption(this.trainingWheelsSignature); } - static deserialize(deserializer: Deserializer): SignedGroth16Signature { - const proof = Groth16Zkp.deserialize(deserializer); + static deserialize(deserializer: Deserializer): ZeroKnowledgeSig { + const proof = ZkProof.deserialize(deserializer); const expHorizonSecs = deserializer.deserializeU64(); const hasExtraField = deserializer.deserializeUleb128AsU32(); const extraField = hasExtraField ? deserializer.deserializeStr() : undefined; const hasOverrideAudVal = deserializer.deserializeUleb128AsU32(); const overrideAudVal = hasOverrideAudVal ? deserializer.deserializeStr() : undefined; const [trainingWheelsSignature] = deserializer.deserializeVector(EphemeralSignature); - return new SignedGroth16Signature({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); + return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } - static load(deserializer: Deserializer): SignedGroth16Signature { - const proof = Groth16Zkp.deserialize(deserializer); + static load(deserializer: Deserializer): ZeroKnowledgeSig { + const proof = ZkProof.deserialize(deserializer); const expHorizonSecs = deserializer.deserializeU64(); const hasExtraField = deserializer.deserializeUleb128AsU32(); const extraField = hasExtraField ? deserializer.deserializeStr() : undefined; const hasOverrideAudVal = deserializer.deserializeUleb128AsU32(); const overrideAudVal = hasOverrideAudVal ? deserializer.deserializeStr() : undefined; const [trainingWheelsSignature] = deserializer.deserializeVector(EphemeralSignature); - return new SignedGroth16Signature({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); + return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } - - // static isSignature(signature: Signature): signature is OpenIdSignature { - // return signature instanceof OpenIdSignature; - // } } /** - * A OpenId signature which contains the private inputs to an OIDB proof. - */ -export class OpenIdSignature extends Signature { - readonly jwtSignature: string; - - readonly jwtPayloadJson: string; - - readonly uidKey: string; - - readonly epkBlinder: Uint8Array; - - readonly pepper: Uint8Array; - - readonly overrideAudValue?: string; - - /** - * Create a new Signature instance from a Uint8Array or String. - * - * @param hexInput A HexInput (string or Uint8Array) - */ - constructor(args: { - jwtSignature: string; - jwtPayloadJson: string; - uidKey?: string; - epkBlinder: Uint8Array; - pepper: Uint8Array; - overrideAudValue?: string; - }) { - super(); - const { jwtSignature, uidKey, jwtPayloadJson, epkBlinder, pepper, overrideAudValue } = args; - this.jwtSignature = jwtSignature; - this.jwtPayloadJson = jwtPayloadJson; - this.uidKey = uidKey ?? "sub"; - this.epkBlinder = epkBlinder; - this.pepper = pepper; - this.overrideAudValue = overrideAudValue; - } - - /** - * Get the signature in bytes (Uint8Array). - * - * @returns Uint8Array representation of the signature - */ - toUint8Array(): Uint8Array { - // const textEncoder = new TextEncoder(); - // const jwtSigBytes = textEncoder.encode(this.jwtSignature); - // const jwtPayloadJsonBytes = textEncoder.encode(this.jwtPayloadJson); - // const uidKeyBytes = textEncoder.encode(this.jwtSignature); - // const uidKeyBytes = textEncoder.encode(this.jwtSignature); - - return this.epkBlinder; - } - - /** - * Get the signature as a hex string with the 0x prefix. - * - * @returns string representation of the signature - */ - toString(): string { - return this.toString(); - } - - serialize(serializer: Serializer): void { - serializer.serializeStr(this.jwtSignature); - serializer.serializeStr(this.jwtPayloadJson); - serializer.serializeStr(this.uidKey); - serializer.serializeFixedBytes(this.epkBlinder); - serializer.serializeFixedBytes(this.pepper); - serializer.serializeOptionStr(this.overrideAudValue); - } - - static deserialize(deserializer: Deserializer): OpenIdSignature { - const jwtSignature = deserializer.deserializeStr(); - const jwtPayloadJson = deserializer.deserializeStr(); - const uidKey = deserializer.deserializeStr(); - const epkBlinder = deserializer.deserializeFixedBytes(31); - const pepper = deserializer.deserializeFixedBytes(31); - const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); - const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; - return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); - } - - static load(deserializer: Deserializer): OpenIdSignature { - const jwtSignature = deserializer.deserializeStr(); - const jwtPayloadJson = deserializer.deserializeStr(); - const uidKey = deserializer.deserializeStr(); - const epkBlinder = deserializer.deserializeFixedBytes(31); - const pepper = deserializer.deserializeFixedBytes(31); - const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); - const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; - return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); - } - - static isSignature(signature: Signature): signature is OpenIdSignature { - return signature instanceof OpenIdSignature; - } -} - -/** - * A signature of a message signed via OIDC that uses proofs or the jwt token to authenticate. + * A signature of a message signed via Keyless Accounnt that uses proofs or the jwt token to authenticate. */ export class KeylessSignature extends Signature { - readonly openIdSignatureOrZkProof: OpenIdSignatureOrZkProof; + readonly ephemeralCertificate: EphemeralCertificate; readonly jwtHeader: string; @@ -426,21 +364,25 @@ export class KeylessSignature extends Signature { readonly ephemeralSignature: EphemeralSignature; /** - * Create a new Signature instance from a Uint8Array or String. + * Create a new KeylessSignature * - * @param hexInput A HexInput (string or Uint8Array) - */ + * @param args.jwtHeader A HexInput (string or Uint8Array) + * @param args.ephemeralCertificate A HexInput (string or Uint8Array) + * @param args.expiryDateSecs A HexInput (string or Uint8Array) + * @param args.ephemeralPublicKey A HexInput (string or Uint8Array) + * @param args.ephemeralSignature A HexInput (string or Uint8Array) + */ constructor(args: { jwtHeader: string; - openIdSignatureOrZkProof: OpenIdSignatureOrZkProof; + ephemeralCertificate: EphemeralCertificate; expiryDateSecs: bigint | number; ephemeralPublicKey: EphemeralPublicKey; ephemeralSignature: EphemeralSignature; }) { super(); - const { jwtHeader, openIdSignatureOrZkProof, expiryDateSecs, ephemeralPublicKey, ephemeralSignature } = args; + const { jwtHeader, ephemeralCertificate, expiryDateSecs, ephemeralPublicKey, ephemeralSignature } = args; this.jwtHeader = jwtHeader; - this.openIdSignatureOrZkProof = openIdSignatureOrZkProof; + this.ephemeralCertificate = ephemeralCertificate; this.expiryDateSecs = expiryDateSecs; this.ephemeralPublicKey = ephemeralPublicKey; this.ephemeralSignature = ephemeralSignature; @@ -452,20 +394,11 @@ export class KeylessSignature extends Signature { * @returns Uint8Array representation of the signature */ toUint8Array(): Uint8Array { - return this.ephemeralSignature.toUint8Array(); - } - - /** - * Get the signature as a hex string with the 0x prefix. - * - * @returns string representation of the signature - */ - toString(): string { - return this.toString(); + return this.bcsToBytes(); } serialize(serializer: Serializer): void { - this.openIdSignatureOrZkProof.serialize(serializer); + this.ephemeralCertificate.serialize(serializer); serializer.serializeStr(this.jwtHeader); serializer.serializeU64(this.expiryDateSecs); this.ephemeralPublicKey.serialize(serializer); @@ -473,7 +406,7 @@ export class KeylessSignature extends Signature { } static deserialize(deserializer: Deserializer): KeylessSignature { - const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); + const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); const jwtHeader = deserializer.deserializeStr(); const expiryDateSecs = deserializer.deserializeU64(); const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); @@ -481,22 +414,22 @@ export class KeylessSignature extends Signature { return new KeylessSignature({ jwtHeader, expiryDateSecs, - openIdSignatureOrZkProof, + ephemeralCertificate, ephemeralPublicKey, ephemeralSignature, }); } static load(deserializer: Deserializer): KeylessSignature { + const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); const jwtHeader = deserializer.deserializeStr(); const expiryDateSecs = deserializer.deserializeU64(); - const openIdSignatureOrZkProof = OpenIdSignatureOrZkProof.deserialize(deserializer); const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); const ephemeralSignature = EphemeralSignature.deserialize(deserializer); return new KeylessSignature({ jwtHeader, expiryDateSecs, - openIdSignatureOrZkProof, + ephemeralCertificate, ephemeralPublicKey, ephemeralSignature, }); @@ -506,3 +439,111 @@ export class KeylessSignature extends Signature { return signature instanceof KeylessSignature; } } + + + + + + + + + +// /** +// * A OpenId signature which contains the private inputs to an OIDB proof. +// */ +// export class OpenIdSignature extends Signature { +// readonly jwtSignature: string; + +// readonly jwtPayloadJson: string; + +// readonly uidKey: string; + +// readonly epkBlinder: Uint8Array; + +// readonly pepper: Uint8Array; + +// readonly overrideAudValue?: string; + +// /** +// * Create a new Signature instance from a Uint8Array or String. +// * +// * @param hexInput A HexInput (string or Uint8Array) +// */ +// constructor(args: { +// jwtSignature: string; +// jwtPayloadJson: string; +// uidKey?: string; +// epkBlinder: Uint8Array; +// pepper: Uint8Array; +// overrideAudValue?: string; +// }) { +// super(); +// const { jwtSignature, uidKey, jwtPayloadJson, epkBlinder, pepper, overrideAudValue } = args; +// this.jwtSignature = jwtSignature; +// this.jwtPayloadJson = jwtPayloadJson; +// this.uidKey = uidKey ?? "sub"; +// this.epkBlinder = epkBlinder; +// this.pepper = pepper; +// this.overrideAudValue = overrideAudValue; +// } + +// /** +// * Get the signature in bytes (Uint8Array). +// * +// * @returns Uint8Array representation of the signature +// */ +// toUint8Array(): Uint8Array { +// // const textEncoder = new TextEncoder(); +// // const jwtSigBytes = textEncoder.encode(this.jwtSignature); +// // const jwtPayloadJsonBytes = textEncoder.encode(this.jwtPayloadJson); +// // const uidKeyBytes = textEncoder.encode(this.jwtSignature); +// // const uidKeyBytes = textEncoder.encode(this.jwtSignature); + +// return this.epkBlinder; +// } + +// /** +// * Get the signature as a hex string with the 0x prefix. +// * +// * @returns string representation of the signature +// */ +// toString(): string { +// return this.toString(); +// } + +// serialize(serializer: Serializer): void { +// serializer.serializeStr(this.jwtSignature); +// serializer.serializeStr(this.jwtPayloadJson); +// serializer.serializeStr(this.uidKey); +// serializer.serializeFixedBytes(this.epkBlinder); +// serializer.serializeFixedBytes(this.pepper); +// serializer.serializeOptionStr(this.overrideAudValue); +// } + +// static deserialize(deserializer: Deserializer): OpenIdSignature { +// const jwtSignature = deserializer.deserializeStr(); +// const jwtPayloadJson = deserializer.deserializeStr(); +// const uidKey = deserializer.deserializeStr(); +// const epkBlinder = deserializer.deserializeFixedBytes(31); +// const pepper = deserializer.deserializeFixedBytes(31); +// const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); +// const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; +// return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); +// } + +// static load(deserializer: Deserializer): OpenIdSignature { +// const jwtSignature = deserializer.deserializeStr(); +// const jwtPayloadJson = deserializer.deserializeStr(); +// const uidKey = deserializer.deserializeStr(); +// const epkBlinder = deserializer.deserializeFixedBytes(31); +// const pepper = deserializer.deserializeFixedBytes(31); +// const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); +// const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; +// return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); +// } + +// static isSignature(signature: Signature): signature is OpenIdSignature { +// return signature instanceof OpenIdSignature; +// } +// } + diff --git a/src/core/crypto/proof.ts b/src/core/crypto/proof.ts new file mode 100644 index 000000000..2cc6b08aa --- /dev/null +++ b/src/core/crypto/proof.ts @@ -0,0 +1,16 @@ +import { Serializable } from "../../bcs"; +import { Hex } from "../hex"; + +/** + * An abstract representation of a crypto proof. + * associated to a specific zero knowledge proof schemes e.g. Groth16, PLONK + */ +export abstract class Proof extends Serializable { + /** + * Get the proof as a hex string with a 0x prefix e.g. 0x123456... + */ + toString(): string { + const bytes = this.bcsToBytes(); + return Hex.fromHexInput(bytes).toString(); + } +} diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index c839a55ee..1b5b5a87b 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -10,8 +10,8 @@ import { jwtDecode } from "jwt-decode"; import { AptosConfig } from "../api/aptosConfig"; import { postAptosPepperService, postAptosProvingService } from "../client"; -import { EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, SignedGroth16Signature } from "../core"; -import { HexInput } from "../types"; +import { EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof } from "../core"; +import { HexInput, ZkpVariant } from "../types"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; import { PepperFetchResponse, ProverResponse } from "../types/keyless"; @@ -50,14 +50,8 @@ export async function getProof(args: { pepper: HexInput; uidKey?: string; extraFieldKey?: string; -}): Promise { +}): Promise { const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey, extraFieldKey } = args; - const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); - let extraField; - if (extraFieldKey) { - const extraFieldVal = jwtPayload[extraFieldKey]; - extraField = `"${extraFieldKey}":"${extraFieldVal}",`; - } const json = { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), @@ -78,14 +72,21 @@ export async function getProof(args: { }); const proofPoints = data.proof; - const proof = new Groth16Zkp({ + const groth16Zkp = new Groth16Zkp({ a: proofPoints.a, b: proofPoints.b, c: proofPoints.c, }); - const signedProof = new SignedGroth16Signature({ - proof, + let extraField; + if (extraFieldKey) { + const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); + const extraFieldVal = jwtPayload[extraFieldKey]; + extraField = `"${extraFieldKey}":"${extraFieldVal}",`; + } + + const signedProof = new ZeroKnowledgeSig({ + proof: new ZkProof(groth16Zkp, ZkpVariant.Groth16), extraField, trainingWheelsSignature: EphemeralSignature.fromHex(data.training_wheels_signature), }); @@ -105,8 +106,8 @@ export async function deriveKeylessAccount(args: { let { pepper } = args; if (pepper === undefined) { pepper = await getPepper(args); - } else if (Hex.fromHexInput(pepper).toUint8Array().length !== 31) { - throw new Error("Pepper needs to be 31 bytes"); + } else if (Hex.fromHexInput(pepper).toUint8Array().length !== KeylessAccount.PEPPER_LENGTH) { + throw new Error(`Pepper needs to be ${KeylessAccount.PEPPER_LENGTH} bytes`); } const proofPromise = getProof({ ...args, pepper }); diff --git a/src/types/index.ts b/src/types/index.ts index 589c9d057..1903262fd 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -125,9 +125,12 @@ export enum EphemeralSignatureVariant { Ed25519 = 0, } -export enum EphemeralCertificate { +export enum EphemeralCertificateVariant { ZkProof = 0, - OpenIdSignature = 1, +} + +export enum ZkpVariant { + Groth16 = 0, } /** From 13656d607d36b61e98d5f0316f9a7bca2e57d995 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 02:48:46 -0400 Subject: [PATCH 075/136] delete escrow example --- examples/typescript/keyless_escrow.ts | 260 -------------------------- 1 file changed, 260 deletions(-) delete mode 100644 examples/typescript/keyless_escrow.ts diff --git a/examples/typescript/keyless_escrow.ts b/examples/typescript/keyless_escrow.ts deleted file mode 100644 index 2cf442740..000000000 --- a/examples/typescript/keyless_escrow.ts +++ /dev/null @@ -1,260 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -/* eslint-disable max-len */ -/* eslint-disable no-console */ - -/** - * This example shows how to use the Aptos client to create accounts, fund them, and transfer between them. - */ - -import * as readline from "readline"; - -import { promisify } from "util"; -import { randomBytes } from "crypto"; -import { - AuthenticationKey, - AccountAddress, - computeAddressSeed, - Aptos, - AptosConfig, - Ed25519PrivateKey, - EphemeralKeyPair, - KeylessPublicKey, - MultiKey, - Network, - MultiKeyAccount, -} from "../../dist/common"; -// import { AccountAuthenticatorMultiKey, AuthenticationKey, computeAddressSeed } from "../../dist/common"; - -// TODO: There currently isn't a way to use the APTOS_COIN in the COIN_STORE due to a regex -const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; -const COIN_STORE = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; -const ALICE_INITIAL_BALANCE = 100_000_000_000; -const TRANSFER_AMOUNT = 100_000_000; -const TRANSFER_AMOUNT_WITH_FEE = TRANSFER_AMOUNT + 600; - -const TEST_JWT = - "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJhdF9oYXNoIjoiSlFCcEZQZlNIbmJVdGJUTzFiNFdjZyIsIm5vbmNlIjoiMTAxNzE4NzQyOTY2Mzc2NDAyMjM5MjUzOTc3ODY1NTM0MDMxNDIwNzkzOTEyNDgwMTQyMDkyNjU2MzM5NzUzMzY4NjM0ODQ5NzAxMzEiLCJpYXQiOjE3MTAxODI1MTAsImV4cCI6MTcxMDE4NjExMH0.dLVMdxFUqhvsXK3dR6CwWKIrWt8Z460VSxX-CXEhqwmFySskOGBSjcEGvUH23Z7Jc14UE5IKIbtrUCa_w4JRxedVTrfGo5JIlZAuDkqqCA-ogDjDK3iyQENrNShR4E_CH2b9186rK9jIANI6SbD3IzMj4lYRuCOEwdU4bw2RMbc059GzhPbzK1NCi5QeF-TQrbaDg7tfBZsojgPZ_aMVFt7LQIQRO2vjW8aPgXeg0RbQXIUYOGW382qMhQ6BoXC3GpR148EdOq9A3riViZqqAuC6QWsDK5StMwQbZiWI3m7nZISI632x9ISs09BQLJW2cTh_Y_NUk8mTKDzoDCZpKw"; - -/** - * Prints the balance of an account - * @param aptos - * @param name - * @param address - * @returns {Promise<*>} - * - */ -const balance = async (aptos: Aptos, name: string, address: AccountAddress) => { - type Coin = { coin: { value: string } }; - const resource = await aptos.getAccountResource({ - accountAddress: address, - resourceType: COIN_STORE, - }); - const amount = Number(resource.coin.value); - - console.log(`${name}'s balance is: ${amount}`); - return amount; -}; - -const example = async () => { - // Setup the client - const config = new AptosConfig({ network: Network.DEVNET }); - const aptos = new Aptos(config); - - // Create two accounts - const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryDateSecs = BigInt(1718911224); - const blinder = new Uint8Array(31); - for (let i = 0; i < blinder.length; i += 1) { - blinder[i] = 0; - } - const aliceEphem = new EphemeralKeyPair({ privateKey, expiryDateSecs, blinder }); - - console.log(); - console.log("=== Get token via the below link ==="); - console.log(); - - const link = `https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=openid%20email&access_type=offline&service=lso&o2v=2&theme=glif&flowName=GeneralOAuthFlow&nonce=${aliceEphem.nonce}`; - console.log(link); - console.log(); - - const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - }); - - const questionAsync = promisify(rl.question).bind(rl); - - // eslint-disable-next-line consistent-return - async function getUserInput(): Promise { - try { - const response = await questionAsync("Paste the JWT token (or press enter to use default test token): "); - if (response.trim() === "") { - console.log(); - console.log("No jwt token inputted. Using test jwt token"); - console.log(); - // rl.close(); - return TEST_JWT; - } - return response.trim(); - } catch (error) { - rl.close(); - console.error("Error reading user input:", error); - } - } - - // eslint-disable-next-line consistent-return - async function getUserInputBobEmail(): Promise { - try { - const response = await questionAsync("Enter the bob's email address (the recipient): "); - if (response.trim() === "") { - console.log(); - console.log("No email inputted. Using heliuchuan@gmail.com"); - console.log(); - // rl.close(); - return "heliuchuan@gmail.com"; - } - return response.trim(); - } catch (error) { - rl.close(); - console.error("Error reading user input:", error); - } - } - - const iss = "https://accounts.google.com"; - const aud = "407408718192.apps.googleusercontent.com"; - const uidKey = "email"; - - const jwt = await getUserInput(); - - const bobEmail = await getUserInputBobEmail(); - - // const bobEmail = "oliver.he@aptoslabs.com"; - - const alice = await aptos.deriveKeylessAccount({ - jwt, - ephemeralKeyPair: aliceEphem, - }); - - const uidVal = bobEmail; - const pepper = randomBytes(31); - const escrowAddressSeed = computeAddressSeed({ - uidKey, - uidVal, - aud, - pepper, - }); - const escrowPublicKey = new KeylessPublicKey(iss, escrowAddressSeed); - - const multiKey = new MultiKey({ publicKeys: [alice.publicKey, escrowPublicKey], signaturesRequired: 1 }); - const mkAddr = AuthenticationKey.fromPublicKey({ publicKey: multiKey }).derivedAddress(); - - console.log("\n=== Addresses ===\n"); - console.log(`Alice's address is: ${alice.accountAddress}`); - console.log(`Alice's ephem secret key is: ${aliceEphem.privateKey}`); - - // Fund the accounts - console.log("\n=== Funding accounts ===\n"); - - await aptos.faucet.fundAccount({ - accountAddress: alice.accountAddress, - amount: ALICE_INITIAL_BALANCE, - options: { waitForIndexer: false }, - }); - await aptos.faucet.fundAccount({ - accountAddress: mkAddr, - amount: 1, - options: { waitForIndexer: false }, - }); - - // // Show the balances - console.log("\n=== Balances ===\n"); - const aliceBalance = await balance(aptos, "Alice", alice.accountAddress); - const escrowBalance = await balance(aptos, "escrow", mkAddr); - - // Transfer between users - const transaction = await aptos.transaction.build.simple({ - sender: alice.accountAddress, - data: { - function: "0x1::coin::transfer", - typeArguments: [APTOS_COIN], - functionArguments: [mkAddr, TRANSFER_AMOUNT_WITH_FEE], - }, - }); - - console.log("\n=== Transferring ===\n"); - - const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); - - await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); - console.log(`Committed transaction: ${committedTxn.hash}`); - - console.log("\n=== Balances after transfer ===\n"); - const newAliceBalance = await balance(aptos, "Alice", alice.accountAddress); - const newEscrowBalance = await balance(aptos, "escrow", mkAddr); - - console.error("Amount transferred:", TRANSFER_AMOUNT_WITH_FEE); - console.error("Transfer fee:", aliceBalance - (newAliceBalance + TRANSFER_AMOUNT_WITH_FEE)); - console.error(""); - - const bobJWT = - "eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4YmY1YzM3NzJkZDRlN2E3MjdhMTAxYmY1MjBmNjU3NWNhYzMyNmYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTUyNjEyMTU0NTAxNDcwMjgyMTMiLCJlbWFpbCI6ImhlbGl1Y2h1YW5AZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJZSlIybkNLYV9kcUlLZjRlOGRJcmt3Iiwibm9uY2UiOiIxMDE3MTg3NDI5NjYzNzY0MDIyMzkyNTM5Nzc4NjU1MzQwMzE0MjA3OTM5MTI0ODAxNDIwOTI2NTYzMzk3NTMzNjg2MzQ4NDk3MDEzMSIsImlhdCI6MTcwOTkzMzgwMiwiZXhwIjoxNzA5OTM3NDAyfQ.iqVu6Uae_lUS7B-nJ_eVIisfgHqHFikb0cwxROuudnSwMYND5OiuG0Zlslx-ZgqEV0Dy28aRJT1zmt-xvgtqjJjiPikgf_1sncgs1M7LweUVDKw88DSifuM9UV5JkuHBFmDgiEAbAlLGdlpAJqgbNNG02yN-cxqLaluXSB13yDUzbBz3b_eHivZiHjp9f2E2x2-vw9MY6x6G6bpc1xBPjjR0Nm1GsPpaz8hyhLj_lUX-dRKwbq2xTrOciucRE0rVEqby1smVfS83AQ9P8wW1nhuo3okuFMM9qut1NsFwRQ0EiS8H4kRd8O5Rc-J2CtNrLAC-gmUfzBDzIjGeuj4VUg"; - - // const bobJWT = await getUserInput(); - - const bobTempZkIDAccount = await aptos.deriveKeylessAccount({ - jwt: bobJWT, - uidKey, - ephemeralKeyPair: aliceEphem, - pepper, - }); - - const bobZkID = await aptos.deriveKeylessAccount({ - jwt: bobJWT, - uidKey, - ephemeralKeyPair: aliceEphem, - }); - - const escrowAccount = new MultiKeyAccount({ multiKey, signers: [bobTempZkIDAccount] }); - - // Fund the accounts - console.log("\n=== Funding Bob's account ===\n"); - await aptos.faucet.fundAccount({ - accountAddress: bobZkID.accountAddress, - amount: 1, - options: { waitForIndexer: false }, - }); - - console.log("\n=== Balances ===\n"); - await balance(aptos, "Alice", alice.accountAddress); - const esc = await balance(aptos, "escrow", escrowAccount.accountAddress); - await balance(aptos, "Bob", bobZkID.accountAddress); - - const transferToBobTxn = await aptos.transaction.build.simple({ - sender: mkAddr, - data: { - function: "0x1::coin::transfer", - typeArguments: [APTOS_COIN], - functionArguments: [bobZkID.accountAddress, TRANSFER_AMOUNT], - }, - }); - - console.log("\n=== Transferring ===\n"); - - const response = await aptos.signAndSubmitTransaction({ signer: escrowAccount, transaction: transferToBobTxn }); - console.log("Transaction hash: ", response.hash); - await aptos.waitForTransaction({ - transactionHash: response.hash, - }); - - console.log("\n=== Balances after transfer ===\n"); - await balance(aptos, "Alice", alice.accountAddress); - const esc2 = await balance(aptos, "escrow", mkAddr); - await balance(aptos, "Bob", bobZkID.accountAddress); - - console.error("Amount transferred:", TRANSFER_AMOUNT); - console.error("Transfer fee:", esc - (esc2 + TRANSFER_AMOUNT)); - - rl.close(); -}; - -example(); From 601d9d0a85b50f84c361ebc9bdff546ac6447ee5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 02:49:02 -0400 Subject: [PATCH 076/136] reorder keyless account --- src/account/KeylessAccount.ts | 56 +++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 9a6d70212..243b73fe9 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -25,49 +25,32 @@ import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType, generateSigningMessageForSerializable } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; -export type ProofFetchSuccess = { - status: "Success"; -}; - -export type ProofFetchFailure = { - status: "Failed"; - error: string; -}; - -export type ProofFetchStatus = ProofFetchSuccess | ProofFetchFailure - -export type ProofFetchCallback = (status: ProofFetchStatus) => Promise; - -export interface ProofFetchEvents { - proofFetchFinish: (status: ProofFetchStatus) => void; -} - export class KeylessAccount extends Serializable implements Account { static readonly PEPPER_LENGTH: number = 31; - publicKey: KeylessPublicKey; + readonly publicKey: KeylessPublicKey; - ephemeralKeyPair: EphemeralKeyPair; + readonly ephemeralKeyPair: EphemeralKeyPair; - uidKey: string; + readonly uidKey: string; - uidVal: string; + readonly uidVal: string; - aud: string; + readonly aud: string; - pepper: Uint8Array; + readonly pepper: Uint8Array; - accountAddress: AccountAddress; + readonly accountAddress: AccountAddress; proof: ZeroKnowledgeSig | undefined; - proofOrPromise: ZeroKnowledgeSig | Promise; + readonly proofOrPromise: ZeroKnowledgeSig | Promise; - signingScheme: SigningScheme; + readonly signingScheme: SigningScheme; - jwt: string; + private jwt: string; - emitter: EventEmitter; + readonly emitter: EventEmitter; constructor(args: { address?: AccountAddress; @@ -303,3 +286,20 @@ function base64UrlDecode(base64Url: string): string { const decodedString = decode(paddedBase64); return decodedString; } + +export type ProofFetchSuccess = { + status: "Success"; +}; + +export type ProofFetchFailure = { + status: "Failed"; + error: string; +}; + +export type ProofFetchStatus = ProofFetchSuccess | ProofFetchFailure + +export type ProofFetchCallback = (status: ProofFetchStatus) => Promise; + +export interface ProofFetchEvents { + proofFetchFinish: (status: ProofFetchStatus) => void; +} From 5cf1ca76873b4f7cb2be5d68b0e98ae02ee91637 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 02:49:13 -0400 Subject: [PATCH 077/136] add deserializer opt --- src/bcs/deserializer.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/bcs/deserializer.ts b/src/bcs/deserializer.ts index 67a9781a7..a9343081a 100644 --- a/src/bcs/deserializer.ts +++ b/src/bcs/deserializer.ts @@ -56,6 +56,47 @@ export class Deserializer { return textDecoder.decode(value); } + + /** + * Deserializes a an optional string. + * + * BCS layout for Optional: 0 if none, else 1 | string_length | string_content + * @example + * ```ts + * const deserializer = new Deserializer(new Uint8Array([0x00])); + * assert(deserializer.deserializeOptionStr() === undefined); + * const deserializer = new Deserializer(new Uint8Array([1, 8, 49, 50, 51, 52, 97, 98, 99, 100])); + * assert(deserializer.deserializeOptionStr() === "1234abcd"); + * ``` + */ + deserializeOptionStr(): string | undefined { + const exists = this.deserializeUleb128AsU32(); + if (exists === 1) { + return this.deserializeStr(); + } + return undefined + } + + /** + * Deserializes a an optional string. + * + * BCS layout for Optional: 0 if none, else 1 | string_length | string_content + * @example + * ```ts + * const deserializer = new Deserializer(new Uint8Array([0x00])); + * assert(deserializer.deserializeOptionStr() === undefined); + * const deserializer = new Deserializer(new Uint8Array([1, 8, 49, 50, 51, 52, 97, 98, 99, 100])); + * assert(deserializer.deserializeOptionStr() === "1234abcd"); + * ``` + */ + deserializeOption(cls: Deserializable): T | undefined { + const exists = this.deserializeUleb128AsU32(); + if (exists === 1) { + return this.deserialize(cls); + } + return undefined + } + /** * Deserializes an array of bytes. * From 97e3578b5ba4c28e862efeb6a041c11a387a5a1f Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 02:50:11 -0400 Subject: [PATCH 078/136] refactor keyless crypto --- src/core/crypto/keyless.ts | 379 ++++++++++++++----------------------- 1 file changed, 137 insertions(+), 242 deletions(-) diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 4c48cb710..53d7d3bf7 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -44,7 +44,7 @@ export class KeylessPublicKey extends AccountPublicKey { /** * Get the authentication key for the keyless public key - * + * * @returns AuthenticationKey */ authKey(): AuthenticationKey { @@ -84,7 +84,7 @@ export class KeylessPublicKey extends AccountPublicKey { */ // eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this verifySignature(args: { message: HexInput; signature: KeylessSignature }): boolean { - throw new Error("Not yet implemented") + throw new Error("Not yet implemented"); } serialize(serializer: Serializer): void { @@ -130,12 +130,7 @@ export class KeylessPublicKey extends AccountPublicKey { } } -function computeIdCommitment(args: { - uidKey: string; - uidVal: string; - aud: string; - pepper: HexInput; -}): Uint8Array { +function computeIdCommitment(args: { uidKey: string; uidVal: string; aud: string; pepper: HexInput }): Uint8Array { const { uidKey, uidVal, aud, pepper } = args; const fields = [ @@ -148,6 +143,106 @@ function computeIdCommitment(args: { return bigIntToBytesLE(poseidonHash(fields), KeylessPublicKey.ID_COMMITMENT_LENGTH); } +/** + * A signature of a message signed via Keyless Accounnt that uses proofs or the jwt token to authenticate. + */ +export class KeylessSignature extends Signature { + /** + * The inner signature ZeroKnowledgeSigniature or OpenIdSignature + */ + readonly ephemeralCertificate: EphemeralCertificate; + + /** + * The jwt header in the token used to create the proof/signature. In json string representation. + */ + readonly jwtHeader: string; + + /** + * The expiry timestamp in seconds of the EphemeralKeyPair used to sign + */ + readonly expiryDateSecs: bigint | number; + + /** + * The ephemeral public key used to verify the signature + */ + readonly ephemeralPublicKey: EphemeralPublicKey; + + /** + * The signature resulting from signing with the private key of the EphemeralKeyPair + */ + readonly ephemeralSignature: EphemeralSignature; + + constructor(args: { + jwtHeader: string; + ephemeralCertificate: EphemeralCertificate; + expiryDateSecs: bigint | number; + ephemeralPublicKey: EphemeralPublicKey; + ephemeralSignature: EphemeralSignature; + }) { + super(); + const { jwtHeader, ephemeralCertificate, expiryDateSecs, ephemeralPublicKey, ephemeralSignature } = args; + this.jwtHeader = jwtHeader; + this.ephemeralCertificate = ephemeralCertificate; + this.expiryDateSecs = expiryDateSecs; + this.ephemeralPublicKey = ephemeralPublicKey; + this.ephemeralSignature = ephemeralSignature; + } + + /** + * Get the signature in bytes (Uint8Array). + * + * @returns Uint8Array representation of the signature + */ + toUint8Array(): Uint8Array { + return this.bcsToBytes(); + } + + serialize(serializer: Serializer): void { + this.ephemeralCertificate.serialize(serializer); + serializer.serializeStr(this.jwtHeader); + serializer.serializeU64(this.expiryDateSecs); + this.ephemeralPublicKey.serialize(serializer); + this.ephemeralSignature.serialize(serializer); + } + + static deserialize(deserializer: Deserializer): KeylessSignature { + const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); + const jwtHeader = deserializer.deserializeStr(); + const expiryDateSecs = deserializer.deserializeU64(); + const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); + const ephemeralSignature = EphemeralSignature.deserialize(deserializer); + return new KeylessSignature({ + jwtHeader, + expiryDateSecs, + ephemeralCertificate, + ephemeralPublicKey, + ephemeralSignature, + }); + } + + static load(deserializer: Deserializer): KeylessSignature { + const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); + const jwtHeader = deserializer.deserializeStr(); + const expiryDateSecs = deserializer.deserializeU64(); + const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); + const ephemeralSignature = EphemeralSignature.deserialize(deserializer); + return new KeylessSignature({ + jwtHeader, + expiryDateSecs, + ephemeralCertificate, + ephemeralPublicKey, + ephemeralSignature, + }); + } + + static isSignature(signature: Signature): signature is KeylessSignature { + return signature instanceof KeylessSignature; + } +} + +/** + * A container for a signature that is a ZeroKnowledgeSig. Can be expanded to support OpenIdSignature. + */ export class EphemeralCertificate extends Signature { public readonly signature: Signature; @@ -171,15 +266,6 @@ export class EphemeralCertificate extends Signature { return this.signature.toUint8Array(); } - /** - * Get the public key as a hex string with the 0x prefix. - * - * @returns string representation of the public key - */ - toString(): string { - return this.signature.toString(); - } - serialize(serializer: Serializer): void { serializer.serializeU32AsUleb128(this.variant); this.signature.serialize(serializer); @@ -196,20 +282,22 @@ export class EphemeralCertificate extends Signature { } } +/** + * A representation of a Groth16 proof. The points are the compressed serialization of affine reprentation of the proof. + */ export class Groth16Zkp extends Proof { - /** - * The bytes of proof point a + * The bytes of G1 proof point a */ a: Uint8Array; /** - * The bytes of proof point b + * The bytes of G2 proof point b */ b: Uint8Array; /** - * The bytes of proof point c + * The bytes of G1 proof point c */ c: Uint8Array; @@ -235,6 +323,9 @@ export class Groth16Zkp extends Proof { } } +/** + * A container for a different zero knowledge proof types + */ export class ZkProof extends Serializable { public readonly proof: Proof; @@ -265,15 +356,33 @@ export class ZkProof extends Serializable { } } +/** + * The signature representation of a proof + */ export class ZeroKnowledgeSig extends Signature { + /** + * The proof + */ readonly proof: ZkProof; + /** + * The max lifespan of the proof + */ readonly expHorizonSecs: bigint; + /** + * A key value pair on the JWT token that can be made public + */ readonly extraField?: string; + /** + * Set in the case of signing by recovery services + */ readonly overrideAudVal?: string; + /** + * The training wheels signature + */ readonly trainingWheelsSignature?: EphemeralSignature; constructor(args: { @@ -304,18 +413,7 @@ export class ZeroKnowledgeSig extends Signature { * @returns Uint8Array representation of the signature */ toUint8Array(): Uint8Array { - const serializer = new Serializer(); - this.serialize(serializer); - return serializer.toUint8Array(); - } - - /** - * Get the signature as a hex string with the 0x prefix. - * - * @returns string representation of the signature - */ - toString(): string { - return this.toString(); + return this.bcsToBytes(); } serialize(serializer: Serializer): void { @@ -329,221 +427,18 @@ export class ZeroKnowledgeSig extends Signature { static deserialize(deserializer: Deserializer): ZeroKnowledgeSig { const proof = ZkProof.deserialize(deserializer); const expHorizonSecs = deserializer.deserializeU64(); - const hasExtraField = deserializer.deserializeUleb128AsU32(); - const extraField = hasExtraField ? deserializer.deserializeStr() : undefined; - const hasOverrideAudVal = deserializer.deserializeUleb128AsU32(); - const overrideAudVal = hasOverrideAudVal ? deserializer.deserializeStr() : undefined; - const [trainingWheelsSignature] = deserializer.deserializeVector(EphemeralSignature); + const extraField = deserializer.deserializeOptionStr(); + const overrideAudVal = deserializer.deserializeOptionStr(); + const trainingWheelsSignature = deserializer.deserializeOption(EphemeralSignature); return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } static load(deserializer: Deserializer): ZeroKnowledgeSig { const proof = ZkProof.deserialize(deserializer); const expHorizonSecs = deserializer.deserializeU64(); - const hasExtraField = deserializer.deserializeUleb128AsU32(); - const extraField = hasExtraField ? deserializer.deserializeStr() : undefined; - const hasOverrideAudVal = deserializer.deserializeUleb128AsU32(); - const overrideAudVal = hasOverrideAudVal ? deserializer.deserializeStr() : undefined; - const [trainingWheelsSignature] = deserializer.deserializeVector(EphemeralSignature); + const extraField = deserializer.deserializeOptionStr(); + const overrideAudVal = deserializer.deserializeOptionStr(); + const trainingWheelsSignature = deserializer.deserializeOption(EphemeralSignature); return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } } - -/** - * A signature of a message signed via Keyless Accounnt that uses proofs or the jwt token to authenticate. - */ -export class KeylessSignature extends Signature { - readonly ephemeralCertificate: EphemeralCertificate; - - readonly jwtHeader: string; - - readonly expiryDateSecs: bigint | number; - - readonly ephemeralPublicKey: EphemeralPublicKey; - - readonly ephemeralSignature: EphemeralSignature; - - /** - * Create a new KeylessSignature - * - * @param args.jwtHeader A HexInput (string or Uint8Array) - * @param args.ephemeralCertificate A HexInput (string or Uint8Array) - * @param args.expiryDateSecs A HexInput (string or Uint8Array) - * @param args.ephemeralPublicKey A HexInput (string or Uint8Array) - * @param args.ephemeralSignature A HexInput (string or Uint8Array) - */ - constructor(args: { - jwtHeader: string; - ephemeralCertificate: EphemeralCertificate; - expiryDateSecs: bigint | number; - ephemeralPublicKey: EphemeralPublicKey; - ephemeralSignature: EphemeralSignature; - }) { - super(); - const { jwtHeader, ephemeralCertificate, expiryDateSecs, ephemeralPublicKey, ephemeralSignature } = args; - this.jwtHeader = jwtHeader; - this.ephemeralCertificate = ephemeralCertificate; - this.expiryDateSecs = expiryDateSecs; - this.ephemeralPublicKey = ephemeralPublicKey; - this.ephemeralSignature = ephemeralSignature; - } - - /** - * Get the signature in bytes (Uint8Array). - * - * @returns Uint8Array representation of the signature - */ - toUint8Array(): Uint8Array { - return this.bcsToBytes(); - } - - serialize(serializer: Serializer): void { - this.ephemeralCertificate.serialize(serializer); - serializer.serializeStr(this.jwtHeader); - serializer.serializeU64(this.expiryDateSecs); - this.ephemeralPublicKey.serialize(serializer); - this.ephemeralSignature.serialize(serializer); - } - - static deserialize(deserializer: Deserializer): KeylessSignature { - const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); - const jwtHeader = deserializer.deserializeStr(); - const expiryDateSecs = deserializer.deserializeU64(); - const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); - const ephemeralSignature = EphemeralSignature.deserialize(deserializer); - return new KeylessSignature({ - jwtHeader, - expiryDateSecs, - ephemeralCertificate, - ephemeralPublicKey, - ephemeralSignature, - }); - } - - static load(deserializer: Deserializer): KeylessSignature { - const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); - const jwtHeader = deserializer.deserializeStr(); - const expiryDateSecs = deserializer.deserializeU64(); - const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); - const ephemeralSignature = EphemeralSignature.deserialize(deserializer); - return new KeylessSignature({ - jwtHeader, - expiryDateSecs, - ephemeralCertificate, - ephemeralPublicKey, - ephemeralSignature, - }); - } - - static isSignature(signature: Signature): signature is KeylessSignature { - return signature instanceof KeylessSignature; - } -} - - - - - - - - - -// /** -// * A OpenId signature which contains the private inputs to an OIDB proof. -// */ -// export class OpenIdSignature extends Signature { -// readonly jwtSignature: string; - -// readonly jwtPayloadJson: string; - -// readonly uidKey: string; - -// readonly epkBlinder: Uint8Array; - -// readonly pepper: Uint8Array; - -// readonly overrideAudValue?: string; - -// /** -// * Create a new Signature instance from a Uint8Array or String. -// * -// * @param hexInput A HexInput (string or Uint8Array) -// */ -// constructor(args: { -// jwtSignature: string; -// jwtPayloadJson: string; -// uidKey?: string; -// epkBlinder: Uint8Array; -// pepper: Uint8Array; -// overrideAudValue?: string; -// }) { -// super(); -// const { jwtSignature, uidKey, jwtPayloadJson, epkBlinder, pepper, overrideAudValue } = args; -// this.jwtSignature = jwtSignature; -// this.jwtPayloadJson = jwtPayloadJson; -// this.uidKey = uidKey ?? "sub"; -// this.epkBlinder = epkBlinder; -// this.pepper = pepper; -// this.overrideAudValue = overrideAudValue; -// } - -// /** -// * Get the signature in bytes (Uint8Array). -// * -// * @returns Uint8Array representation of the signature -// */ -// toUint8Array(): Uint8Array { -// // const textEncoder = new TextEncoder(); -// // const jwtSigBytes = textEncoder.encode(this.jwtSignature); -// // const jwtPayloadJsonBytes = textEncoder.encode(this.jwtPayloadJson); -// // const uidKeyBytes = textEncoder.encode(this.jwtSignature); -// // const uidKeyBytes = textEncoder.encode(this.jwtSignature); - -// return this.epkBlinder; -// } - -// /** -// * Get the signature as a hex string with the 0x prefix. -// * -// * @returns string representation of the signature -// */ -// toString(): string { -// return this.toString(); -// } - -// serialize(serializer: Serializer): void { -// serializer.serializeStr(this.jwtSignature); -// serializer.serializeStr(this.jwtPayloadJson); -// serializer.serializeStr(this.uidKey); -// serializer.serializeFixedBytes(this.epkBlinder); -// serializer.serializeFixedBytes(this.pepper); -// serializer.serializeOptionStr(this.overrideAudValue); -// } - -// static deserialize(deserializer: Deserializer): OpenIdSignature { -// const jwtSignature = deserializer.deserializeStr(); -// const jwtPayloadJson = deserializer.deserializeStr(); -// const uidKey = deserializer.deserializeStr(); -// const epkBlinder = deserializer.deserializeFixedBytes(31); -// const pepper = deserializer.deserializeFixedBytes(31); -// const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); -// const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; -// return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); -// } - -// static load(deserializer: Deserializer): OpenIdSignature { -// const jwtSignature = deserializer.deserializeStr(); -// const jwtPayloadJson = deserializer.deserializeStr(); -// const uidKey = deserializer.deserializeStr(); -// const epkBlinder = deserializer.deserializeFixedBytes(31); -// const pepper = deserializer.deserializeFixedBytes(31); -// const hasOverrideAudValue = deserializer.deserializeUleb128AsU32(); -// const overrideAudValue = hasOverrideAudValue ? deserializer.deserializeStr() : undefined; -// return new OpenIdSignature({ jwtSignature, jwtPayloadJson, uidKey, epkBlinder, pepper, overrideAudValue }); -// } - -// static isSignature(signature: Signature): signature is OpenIdSignature { -// return signature instanceof OpenIdSignature; -// } -// } - From c3fa27109b83052e79879475f338711fa0a1bdbd Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 05:51:55 -0400 Subject: [PATCH 079/136] 1.14.0-zeta.1 --- examples/typescript/keyless.ts | 6 +- package.json | 5 +- pnpm-lock.yaml | 182 +++++++++++++++++++++++++- src/account/EphemeralKeyPair.ts | 9 +- src/account/KeylessAccount.ts | 65 +++++++-- src/api/keyless.ts | 2 +- src/bcs/deserializer.ts | 7 +- src/client/core.ts | 2 +- src/client/types.ts | 2 +- src/core/account/index.ts | 1 - src/core/crypto/ephemeral.ts | 1 - src/core/crypto/keyless.ts | 9 ++ src/internal/transactionSubmission.ts | 20 ++- src/types/keyless.ts | 31 +++++ tests/e2e/api/keyless.test.ts | 62 +++++++++ tests/e2e/transaction/helper.ts | 65 +++++++++ tests/unit/poseidon.test.ts | 4 +- 17 files changed, 430 insertions(+), 43 deletions(-) create mode 100644 tests/e2e/api/keyless.test.ts diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 682267945..72aa5ebff 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -64,12 +64,13 @@ const example = async () => { console.log(); function inputJwt(): string { - const jwt: string = readlineSync.question("Paste the JWT token (or press enter to use default test token): ", {hideEchoBack: false}); + const jwt: string = readlineSync.question("Paste the JWT token (or press enter to use default test token): ", { + hideEchoBack: false, + }); return jwt; } const jwt = inputJwt(); - const bob = Account.generate(); const alice = await aptos.deriveKeylessAccount({ @@ -81,6 +82,7 @@ const example = async () => { console.log("=== Addresses ===\n"); console.log(`Alice's keyless account address is: ${alice.accountAddress}`); console.log(`Alice's nonce is: ${aliceEphem.nonce}`); + console.log(`Alice's ephem pubkey is: ${aliceEphem.getPublicKey().toString()}`); console.log(`Bob's address is: ${bob.accountAddress}`); diff --git a/package.json b/package.json index 059f660be..e04c719f6 100644 --- a/package.json +++ b/package.json @@ -47,8 +47,8 @@ "update-version": "scripts/updateVersion.sh && pnpm doc" }, "dependencies": { - "@aptos-labs/aptos-client": "^0.1.0", "@aptos-labs/aptos-cli": "^0.1.2", + "@aptos-labs/aptos-client": "^0.1.0", "@noble/curves": "^1.4.0", "@noble/hashes": "^1.4.0", "@scure/bip32": "^1.4.0", @@ -57,6 +57,7 @@ "eventemitter3": "^5.0.1", "form-data": "^4.0.0", "jose": "^5.1.3", + "jwks-rsa": "^3.1.0", "jwt-decode": "^4.0.0", "poseidon-lite": "^0.2.0" }, @@ -69,6 +70,7 @@ "@graphql-codegen/typescript-operations": "^4.0.1", "@types/base-64": "^1.0.2", "@types/jest": "^29.5.11", + "@types/jsonwebtoken": "^9.0.6", "@types/node": "^20.10.4", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", @@ -81,6 +83,7 @@ "graphql": "^16.8.1", "graphql-request": "^6.1.0", "jest": "^29.7.0", + "jsonwebtoken": "^9.0.2", "prettier": "^3.1.1", "tree-kill": "^1.2.2", "ts-jest": "^29.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a1e0f7fe..daca6ac3e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,9 @@ dependencies: jose: specifier: ^5.1.3 version: 5.2.3 + jwks-rsa: + specifier: ^3.1.0 + version: 3.1.0 jwt-decode: specifier: ^4.0.0 version: 4.0.0 @@ -67,6 +70,9 @@ devDependencies: '@types/jest': specifier: ^29.5.11 version: 29.5.11 + '@types/jsonwebtoken': + specifier: ^9.0.6 + version: 9.0.6 '@types/node': specifier: ^20.10.4 version: 20.10.4 @@ -103,6 +109,9 @@ devDependencies: jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 prettier: specifier: ^3.1.1 version: 3.1.1 @@ -2464,6 +2473,13 @@ packages: resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} dev: true + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.10.4 + dev: false + /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: @@ -2473,6 +2489,12 @@ packages: '@types/responselike': 1.0.0 dev: false + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.10.4 + dev: false + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -2491,6 +2513,24 @@ packages: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true + /@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} + dependencies: + '@types/node': 20.10.4 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: false + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.0 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 + dev: false + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: @@ -2501,6 +2541,10 @@ packages: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: false + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true @@ -2540,17 +2584,34 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/jsonwebtoken@9.0.6: + resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + dependencies: + '@types/node': 20.10.4 + /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 20.10.4 dev: false + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: false + /@types/node@20.10.4: resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: undici-types: 5.26.5 + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + dev: false + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false + /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -2561,6 +2622,21 @@ packages: resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.10.4 + dev: false + + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 20.10.4 + '@types/send': 0.17.4 + dev: false + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true @@ -3288,6 +3364,10 @@ packages: node-int64: 0.4.0 dev: true + /buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -3711,7 +3791,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -3830,6 +3909,12 @@ packages: engines: {node: '>=4'} dev: true + /ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /electron-to-chromium@1.4.467: resolution: {integrity: sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg==} dev: true @@ -5549,6 +5634,10 @@ packages: hasBin: true dev: true + /jose@4.15.5: + resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} + dev: false + /jose@5.2.3: resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} @@ -5633,6 +5722,51 @@ packages: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} dev: true + /jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.2 + semver: 7.5.4 + dev: true + + /jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: true + + /jwks-rsa@3.1.0: + resolution: {integrity: sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==} + engines: {node: '>=14'} + dependencies: + '@types/express': 4.17.21 + '@types/jsonwebtoken': 9.0.6 + debug: 4.3.4 + jose: 4.15.5 + limiter: 1.1.5 + lru-memoizer: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: true + /jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} @@ -5667,6 +5801,10 @@ packages: engines: {node: '>=10'} dev: true + /limiter@1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + dev: false + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -5714,6 +5852,34 @@ packages: p-locate: 5.0.0 dev: true + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: false + + /lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: true + + /lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: true + + /lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: true + + /lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -5722,6 +5888,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: true + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true @@ -5782,7 +5952,13 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true + + /lru-memoizer@2.3.0: + resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} + dependencies: + lodash.clonedeep: 4.5.0 + lru-cache: 6.0.0 + dev: false /lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -5896,7 +6072,6 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -7476,7 +7651,6 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml-ast-parser@0.0.43: resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 4bf3f551b..5b5d05c16 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -16,7 +16,6 @@ import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; export class EphemeralKeyPair extends Serializable { - static readonly BLINDER_LENGTH: number = 31; /** @@ -26,13 +25,13 @@ export class EphemeralKeyPair extends Serializable { readonly blinder: Uint8Array; /** - * A timestamp in seconds indicating when the ephemeral key pair is expired. After expiry, a new + * A timestamp in seconds indicating when the ephemeral key pair is expired. After expiry, a new * EphemeralKeyPair must be generated and a new JWT needs to be created. */ readonly expiryDateSecs: bigint | number; /** - * The value passed to the IdP when the user authenticates. It comprises of a hash of the + * The value passed to the IdP when the user authenticates. It comprises of a hash of the * ephermeral public key, expiry date, and blinder. */ readonly nonce: string; @@ -132,13 +131,13 @@ export class EphemeralKeyPair extends Serializable { /** * Sign the given message with the private key. - * + * * @param data in HexInput format * @returns EphemeralSignature */ sign(data: HexInput): EphemeralSignature { if (this.isExpired()) { - throw new Error("EphemeralKeyPair has expired") + throw new Error("EphemeralKeyPair has expired"); } return new EphemeralSignature(this.privateKey.sign(data)); } diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 243b73fe9..0d6f1975c 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { JwtPayload, jwtDecode } from "jwt-decode"; +import { JwksClient } from "jwks-rsa"; import { decode } from "base-64"; import EventEmitter from "eventemitter3"; import { EphemeralCertificateVariant, HexInput, SigningScheme } from "../types"; @@ -22,9 +23,16 @@ import { EphemeralKeyPair } from "./EphemeralKeyPair"; import { Hex } from "../core/hex"; import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; import { Deserializer, Serializable, Serializer } from "../bcs"; -import { deriveTransactionType, generateSigningMessageForSerializable } from "../transactions/transactionBuilder/signingMessage"; +import { + deriveTransactionType, + generateSigningMessageForSerializable, +} from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; +export const IssuerToJwkEndpoint: Record = { + "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", +}; + export class KeylessAccount extends Serializable implements Account { static readonly PEPPER_LENGTH: number = 31; @@ -50,6 +58,8 @@ export class KeylessAccount extends Serializable implements Account { private jwt: string; + private isJwtValid: boolean; + readonly emitter: EventEmitter; constructor(args: { @@ -61,13 +71,13 @@ export class KeylessAccount extends Serializable implements Account { aud: string; pepper: HexInput; proofOrFetcher: ZeroKnowledgeSig | Promise; - proofFetchCallback?: ProofFetchCallback + proofFetchCallback?: ProofFetchCallback; jwt: string; }) { super(); const { address, ephemeralKeyPair, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; - this.publicKey = KeylessPublicKey.create(args); + this.publicKey = KeylessPublicKey.create(args); this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); this.uidKey = uidKey; this.uidVal = uidVal; @@ -79,7 +89,7 @@ export class KeylessAccount extends Serializable implements Account { this.proof = proofOrFetcher; } else { if (proofFetchCallback === undefined) { - throw new Error("Must provide callback for async proof fetch") + throw new Error("Must provide callback for async proof fetch"); } this.emitter.on("proofFetchFinish", async (status) => { await proofFetchCallback(status); @@ -87,25 +97,28 @@ export class KeylessAccount extends Serializable implements Account { }); this.init(proofOrFetcher); } - - this.signingScheme = SigningScheme.SingleKey; const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); if (pepperBytes.length !== KeylessAccount.PEPPER_LENGTH) { throw new Error(`Pepper length in bytes should be ${KeylessAccount.PEPPER_LENGTH}`); } this.pepper = pepperBytes; + this.isJwtValid = true; } + /** + * This initializes the asyncronous proof fetch + * @return + */ async init(promise: Promise) { try { this.proof = await promise; - this.emitter.emit("proofFetchFinish", {status: "Success"}); + this.emitter.emit("proofFetchFinish", { status: "Success" }); } catch (error) { if (error instanceof Error) { - this.emitter.emit("proofFetchFinish", {status: "Failed", error: error.toString()}); + this.emitter.emit("proofFetchFinish", { status: "Failed", error: error.toString() }); } else { - this.emitter.emit("proofFetchFinish", {status: "Failed", error: "Unknown"}); + this.emitter.emit("proofFetchFinish", { status: "Failed", error: "Unknown" }); } } } @@ -116,7 +129,7 @@ export class KeylessAccount extends Serializable implements Account { serializer.serializeFixedBytes(this.pepper); this.ephemeralKeyPair.serialize(serializer); if (this.proof === undefined) { - throw new Error("Connot serialize - proof undefined") + throw new Error("Connot serialize - proof undefined"); } this.proof.serialize(serializer); } @@ -145,6 +158,28 @@ export class KeylessAccount extends Serializable implements Account { return this.ephemeralKeyPair.isExpired(); } + /** + * Checks if the the JWK used to verify the token still exists on the issuer's JWK uri. + * Caches the result. + * @return boolean + */ + async checkJwkValidity(): Promise { + if (!this.isJwtValid) { + return false; + } + const jwtHeader = jwtDecode(this.jwt, { header: true }); + const client = new JwksClient({ + jwksUri: IssuerToJwkEndpoint[this.publicKey.iss], + }); + try { + await client.getSigningKey(jwtHeader.kid); + return true; + } catch (error) { + this.isJwtValid = false; + return false; + } + } + /** * Sign a message using Keyless. * @param message the message to sign, as binary input @@ -190,12 +225,14 @@ export class KeylessAccount extends Serializable implements Account { if (this.proof === undefined) { throw new Error("Proof not found"); } - const jwtHeader = this.jwt.split(".")[0]; + if (!this.isJwtValid) { + throw new Error("The proof has expired. Please refetch proof"); + } const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); const ephemeralSignature = this.ephemeralKeyPair.sign(data); return new KeylessSignature({ - jwtHeader: base64UrlDecode(jwtHeader), + jwtHeader: base64UrlDecode(this.jwt.split(".")[0]), ephemeralCertificate: new EphemeralCertificate(this.proof, EphemeralCertificateVariant.ZkProof), expiryDateSecs, ephemeralPublicKey, @@ -214,7 +251,7 @@ export class KeylessAccount extends Serializable implements Account { throw new Error("Proof not found"); } const raw = deriveTransactionType(transaction); - const txnAndProof = new TransactionAndProof(raw, this.proof.proof) + const txnAndProof = new TransactionAndProof(raw, this.proof.proof); const signMess = generateSigningMessageForSerializable(txnAndProof); return this.sign(signMess); } @@ -296,7 +333,7 @@ export type ProofFetchFailure = { error: string; }; -export type ProofFetchStatus = ProofFetchSuccess | ProofFetchFailure +export type ProofFetchStatus = ProofFetchSuccess | ProofFetchFailure; export type ProofFetchCallback = (status: ProofFetchStatus) => Promise; diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 9a613d22d..aae62ea3b 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -29,7 +29,7 @@ export class Keyless { * @param args.jwt JWT token * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment - * @param args.pepper the pepper + * @param args.pepper the pepper * @param args.extraFieldKey a key in the JWT token used to reveal a value on chain * @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done asyncronously. Once * if finishes the callback function will be called. diff --git a/src/bcs/deserializer.ts b/src/bcs/deserializer.ts index a9343081a..52fad4ebb 100644 --- a/src/bcs/deserializer.ts +++ b/src/bcs/deserializer.ts @@ -56,7 +56,6 @@ export class Deserializer { return textDecoder.decode(value); } - /** * Deserializes a an optional string. * @@ -74,7 +73,7 @@ export class Deserializer { if (exists === 1) { return this.deserializeStr(); } - return undefined + return undefined; } /** @@ -89,12 +88,12 @@ export class Deserializer { * assert(deserializer.deserializeOptionStr() === "1234abcd"); * ``` */ - deserializeOption(cls: Deserializable): T | undefined { + deserializeOption(cls: Deserializable): T | undefined { const exists = this.deserializeUleb128AsU32(); if (exists === 1) { return this.deserialize(cls); } - return undefined + return undefined; } /** diff --git a/src/client/core.ts b/src/client/core.ts index ed6bb3c6b..d5aa9dc45 100644 --- a/src/client/core.ts +++ b/src/client/core.ts @@ -110,7 +110,7 @@ export async function aptosRequest( throw new AptosApiError(options, result, `${response.data}`); } - if (aptosConfig.isPepperServiceRequest(url)) { + if (aptosConfig.isPepperServiceRequest(url) || aptosConfig.isProverServiceRequest(url)) { throw new AptosApiError(options, result, `${response.data}`); } diff --git a/src/client/types.ts b/src/client/types.ts index 2c6c87c35..6d8b95969 100644 --- a/src/client/types.ts +++ b/src/client/types.ts @@ -41,7 +41,7 @@ export class AptosApiError extends Error { readonly statusText: string; - readonly data: any; + readonly data: { message: string; error_code?: string; vm_error_code?: number }; readonly request: AptosRequest; diff --git a/src/core/account/index.ts b/src/core/account/index.ts index 0bff5279e..178cd64f8 100644 --- a/src/core/account/index.ts +++ b/src/core/account/index.ts @@ -1,2 +1 @@ export * from "./utils"; - diff --git a/src/core/crypto/ephemeral.ts b/src/core/crypto/ephemeral.ts index 12273ec1d..07b1ddcf1 100644 --- a/src/core/crypto/ephemeral.ts +++ b/src/core/crypto/ephemeral.ts @@ -11,7 +11,6 @@ import { Hex } from "../hex"; * These are not public keys used as a public key on an account. They are only used ephemerally on Keyless accounts. */ export class EphemeralPublicKey extends PublicKey { - /** * The public key itself */ diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 53d7d3bf7..ef8ac3ec0 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -416,6 +416,15 @@ export class ZeroKnowledgeSig extends Signature { return this.bcsToBytes(); } + /** + * Return a ZeroKnowledgeSig object from its bcs serialization in bytes. + * + * @returns ZeroKnowledgeSig + */ + static fromBytes(bytes: Uint8Array): ZeroKnowledgeSig { + return ZeroKnowledgeSig.deserialize(new Deserializer(bytes)); + } + serialize(serializer: Serializer): void { this.proof.serialize(serializer); serializer.serializeU64(this.expHorizonSecs); diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 4d149e27f..5e02a81c8 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -7,7 +7,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { MoveVector, U8 } from "../bcs"; -import { postAptosFullNode } from "../client"; +import { AptosApiError, postAptosFullNode } from "../client"; import { Account, KeylessAccount, MultiKeyAccount } from "../account"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; import { PrivateKey } from "../core/crypto"; @@ -36,6 +36,7 @@ import { UserTransactionResponse, PendingTransactionResponse, MimeType, HexInput import { TypeTagU8, TypeTagVector, generateSigningMessageForTransaction } from "../transactions"; import { SimpleTransaction } from "../transactions/instances/simpleTransaction"; import { MultiAgentTransaction } from "../transactions/instances/multiAgentTransaction"; +import { KeylessError } from "../types/keyless"; /** * We are defining function signatures, each with its specific input and output. @@ -281,11 +282,18 @@ export async function signAndSubmitTransaction(args: { await signer.waitForProofFetch(); } const authenticator = signTransaction({ signer, transaction }); - return submitTransaction({ - aptosConfig, - transaction, - senderAuthenticator: authenticator, - }); + try { + return await submitTransaction({ + aptosConfig, + transaction, + senderAuthenticator: authenticator, + }); + } catch (error) { + if (error instanceof AptosApiError && signer instanceof KeylessAccount) { + throw await KeylessError.fromAptosApiError(error, signer); + } + throw error; + } } const packagePublishAbi: EntryFunctionABI = { diff --git a/src/types/keyless.ts b/src/types/keyless.ts index 78e335247..a3f0ff827 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -1,6 +1,37 @@ +import { KeylessAccount } from "../account"; +import { AptosApiError } from "../client/types"; + export type ProverResponse = { proof: { a: string; b: string; c: string }; public_inputs_hash: string; training_wheels_signature: string; }; export type PepperFetchResponse = { signature: string; pepper: string; address: string }; + +export enum KeylessErrorType { + JWK_EXPIRED, + EPK_EXPIRED, + UNKNOWN_INVALID_SIGNATURE, + UNKNOWN, +} +export class KeylessError extends Error { + readonly type: KeylessErrorType; + + private constructor(type: KeylessErrorType) { + super(); + this.type = type; + } + + static async fromAptosApiError(error: AptosApiError, signer: KeylessAccount): Promise { + if (!error.data.message.includes("INVALID_SIGNATURE")) { + return new KeylessError(KeylessErrorType.UNKNOWN); + } + if (signer.isExpired()) { + return new KeylessError(KeylessErrorType.EPK_EXPIRED); + } + if (!(await signer.checkJwkValidity())) { + return new KeylessError(KeylessErrorType.JWK_EXPIRED); + } + return new KeylessError(KeylessErrorType.UNKNOWN_INVALID_SIGNATURE); + } +} diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts new file mode 100644 index 000000000..a10b054d0 --- /dev/null +++ b/tests/e2e/api/keyless.test.ts @@ -0,0 +1,62 @@ +// Copyright © Aptos Foundation +// SPDX-License-Identifier: Apache-2.0 + +import { Account, KeylessAccount } from "../../../src"; +import { getAptosClient } from "../helper"; +import { balance, fetchDevnetTestKeylessAccount } from "../transaction/helper"; + +describe("keyless api", () => { + const FUND_AMOUNT = 100_000_000; + const TRANSFER_AMOUNT = 500_000; + const RSA_SECRET_KEY_URL = + // eslint-disable-next-line max-len + "https://raw.githubusercontent.com/aptos-labs/aptos-core/ae9a956d2963f3eb4baef543f629cbc2fe3ece1c/types/src/jwks/rsa/insecure_test_jwk_private_key.pem"; + + // let rsaPrivateKey: string; + let keylessAccount: KeylessAccount; + // TODO: Make this work for local by spinning up a local proving service. + const { aptos } = getAptosClient(); + + beforeAll(async () => { + const response = await fetch(RSA_SECRET_KEY_URL); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + // rsaPrivateKey = await response.text(); + // keylessAccount = await fetchTestKeylessAccount(aptos, 0, rsaPrivateKey); + keylessAccount = fetchDevnetTestKeylessAccount(0); + }); + describe("keyless account", () => { + test("it submits transactions", async () => { + const recipient = Account.generate(); + await aptos.faucet.fundAccount({ + accountAddress: keylessAccount.accountAddress, + amount: FUND_AMOUNT, + options: { waitForIndexer: false }, + }); + await aptos.faucet.fundAccount({ + accountAddress: recipient.accountAddress, + amount: FUND_AMOUNT, + options: { waitForIndexer: false }, + }); + + const senderOldBalance = await balance(aptos, keylessAccount.accountAddress); + const recipientOldBalance = await balance(aptos, recipient.accountAddress); + + const transaction = await aptos.transferCoinTransaction({ + sender: keylessAccount.accountAddress, + recipient: recipient.accountAddress, + amount: TRANSFER_AMOUNT, + }); + + const committedTxn = await aptos.signAndSubmitTransaction({ signer: keylessAccount, transaction }); + await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); + + const senderNewBalance = await balance(aptos, keylessAccount.accountAddress); + const recipientNewBalance = await balance(aptos, recipient.accountAddress); + + expect(senderOldBalance - senderNewBalance).toBeGreaterThan(TRANSFER_AMOUNT); + expect(recipientNewBalance - recipientOldBalance).toEqual(TRANSFER_AMOUNT); + }); + }); +}); diff --git a/tests/e2e/transaction/helper.ts b/tests/e2e/transaction/helper.ts index ef2cdad10..bdc5a0f0c 100644 --- a/tests/e2e/transaction/helper.ts +++ b/tests/e2e/transaction/helper.ts @@ -1,6 +1,8 @@ +/* eslint-disable max-len */ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 +import { sign } from "jsonwebtoken"; import { Account, Aptos, @@ -13,6 +15,12 @@ import { MoveVector, AnyRawTransaction, isUserTransactionResponse, + KeylessAccount, + EphemeralKeyPair, + ZeroKnowledgeSig, + Hex, + Ed25519PrivateKey, + AccountAddress, } from "../../../src"; import { FUND_AMOUNT } from "../../unit/helper"; @@ -87,6 +95,63 @@ export async function fundAccounts(aptos: Aptos, accounts: Array) { return response; } +export async function balance(aptos: Aptos, address: AccountAddress): Promise { + type Coin = { coin: { value: string } }; + const resource = await aptos.getAccountResource({ + accountAddress: address, + resourceType: "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>", + }); + return Number(resource.coin.value); +} + +const fetchToken = (index: number, rsaPrivateKey: string, ephemKeyPair: EphemeralKeyPair) => { + const payload = { + iss: "test.oidc.provider", + aud: "test-keyless-dapp", + sub: `test-user-${index}`, + email: "test@aptoslabs.com", + email_verified: true, + iat: Math.floor(new Date().getTime() / 1000), + exp: 2700000000, + nonce: ephemKeyPair.nonce, + }; + return sign(payload, rsaPrivateKey, { algorithm: "RS256", keyid: "test-rsa" }); +}; + +export async function fetchTestKeylessAccount( + aptos: Aptos, + index: number, + rsaPrivateKey: string, +): Promise { + const ephemeralKeyPair = EphemeralKeyPair.generate(); + const jwt = fetchToken(index, rsaPrivateKey, ephemeralKeyPair); + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + return account; +} + +export function fetchDevnetTestKeylessAccount(index: number): KeylessAccount { + // These tokens cannot be used on the devnet prover service, but can be used to create the account. + const tokens = [ + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0wIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.Te7iIFxfMIRhFQ37pigAWgwkCP--GIE8PNnJEQyzZ8GtezA_W-jnKxlOVF4WeS6ZCt-oRQUwucv9Dq4DYQHgQztXE9CCudXSUz62xQQMRllOv9xnzlDKGcyLJiRpey_3IQdQJDNkRZFxVzsMtqtnZj28Nd9coMXAZGkgXTIgczsh5NJrAK7oKPfBwfIGFpNpcEpPoz80sWN4yJqMp25zZwPZ-sZk1xjoccxjkeV5M7AUmor7L2aAJBsjmycPqgAGZyyhXMOuszKQ4f92ewe-ChH_63fS4H5HCie3ABdlyBp849kP4YcRcpB6-wf1zVpUaz8bEcY7If_RbL_VPKlFXg", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0xIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.NPfbBL4fBwrRGxcU-Ao4oiuu0jRVnTURe9ZuQhyLcuG0UbukE002KelX_YSAP_AU6Xy9CGOxK9-bTwD50b6jXJSH7p6wfy8g2tZfNW2Mb9McCfL_sDxmk9gVYAE7N5B6vHLA3z1Fo7S3i9FY2pEvXO_kIAsTaq_cn76nc6T3hnlK4j15WReV_9SvVSGdPSKS62atucsC39RsUOUdJcE9UQP1VioSeCizR5qtRUyASJYuCRofb1dObdaWuhHxIaOzWEm-iaCzTVwPR_FpOXyag7FfO6IqoaH-l4kLvxkDF3TPMOeuwmewl4Bjq0lDtWmT6W4x2weSL_MqcftS7ubc3Q", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0yIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.xFsXE6TcYCoEDCN7mK_Lb7fpMth7D1GfPfAGjzr2wMGAgUi1yYptko7oVbyvCZi2is0MyBxUEdlAMufPDvr-457aMau7E9ptHaGtwhUYDSTANKzvrgWajdDNcFUcuH6YYzafDTxm3PkyyjcQlMN_jrPL4QFiyaoJDbQINWotBiI0yZoEkeaBb9iCCOQK7yngAdhqPDJLKe94Xv97MtzZo64udMILBBDzlYMsKSESeBcvWQVrMVWBzvXb4nFr_A3BXsIe9TbHB7Ial9F79ql_QWmGnhiB2pl1i0yp0RU1lqxtq1hCSngks26LMMj4cjqIrlOca89RmCKrYW7Dl2tOaA", + ]; + const proofs = [ + "003b5f5763814107baf0782c512918bcda4f49022051895405e126c64d444c3e0157ce75386db38fad8aade38dbe6ffe0bb7300aa611713658c6d80b82b9487c187fab9f0acbc26179e75fad8eccb9014caa8c325c079435f45ad06eccf76783092038cfb862f29ee83ca67617df3350a7bb38719b99cf7a5b21323f8eca4d0d0980969800000000000000010040e94f874cfaa83f5736dd72c7cd0f932b2a186c2255871cae84b48290fb5711a38fd8f9bfc022c326395c38c447b10418a45abfaf512ce3c1734bbe8caae9df0e", + "007006c74d69320288dd47325bb374766b9ceef3210bdc28d98f1dcea50896472363360cadee64c9680d01244a1c179666f7797148d50fb7271deeedeedbf8bf2b79ba54fb9e51dc8578c41d5b5b9c42fcffcb63d4620ecdcc9c2c6c9a5f944316293604a90aabf88c1e8b6d31b82da0c412c232ae03363e1ce1118a9283e45621809698000000000000000100400405e6ff70728ccba56115ea8df1f93423f4a3e1d31becf27239e6809c5e41910870376e3e854141f7340903f6b62f8d34399bf93593ec4d12590872b553e90b", + "009a203da89409a5224feee57f97259f6f6befdef25b5e1aae29e031b740d7d4ae89b86307badfcd59caa8e370b9a42bd2046969838d844fc9bd5de6e975a2501fd4f17cc4107ab6201d4078dcb8b94bc5d47bd540f0e51407854aa1970e27a39d3d4eaf4ad0a89bb2a300d573bcc8f659f79b7089936758ad98e42d10c0bf9c28809698000000000000000100402cd6cb29b973a17fe356101722e201e64b53b5c128c57e593cbdc6426bf58906e657b541dab1c54ca300a28700cafaf0de0aff7806a79ff23a81a021d3d21d03", + ]; + const proof = ZeroKnowledgeSig.fromBytes(Hex.fromHexInput(proofs[index]).toUint8Array()); + const token = tokens[index]; + + const ZEROS = "00000000000000000000000000000000000000000000000000000000000000"; + const ephemPrivateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); + const expiryDateSecs = 1721397501; + const ephemKeyPair = new EphemeralKeyPair({ privateKey: ephemPrivateKey, expiryDateSecs, blinder: ZEROS }); + const account = KeylessAccount.fromJWTAndProof({ proof, jwt: token, ephemeralKeyPair: ephemKeyPair, pepper: ZEROS }); + return account; +} + // Transaction builder helpers // single signer export async function rawTransactionHelper( diff --git a/tests/unit/poseidon.test.ts b/tests/unit/poseidon.test.ts index c383861fc..c4fbc3680 100644 --- a/tests/unit/poseidon.test.ts +++ b/tests/unit/poseidon.test.ts @@ -5,10 +5,10 @@ import { poseidonHash } from "../../src/core/crypto/poseidon"; describe("Poseidon", () => { it("should hash correctly", () => { - const input = [1,2] + const input = [1, 2]; let hash = poseidonHash(input); expect(hash).toEqual(BigInt("7853200120776062878684798364095072458815029376092732009249414926327459813530")); - input.pop() + input.pop(); hash = poseidonHash(input); expect(hash).toEqual(BigInt("18586133768512220936620570745912940619677854269274689475585506675881198879027")); }); From b011e893c71aee1555915b8c335301e9748319c7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 05:52:24 -0400 Subject: [PATCH 080/136] 1.14.0-zeta.2 --- package.json | 2 +- src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e04c719f6..d2d6e120e 100644 --- a/package.json +++ b/package.json @@ -93,5 +93,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.14.0-zeta.0" + "version": "1.14.0-zeta.2" } diff --git a/src/version.ts b/src/version.ts index 69ebc4f69..1cfb80413 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.14.0-zeta.0"; +export const VERSION = "1.14.0-zeta.2"; From 8f661057a3a3dd6036dbf292c7a34005ec548428 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 06:22:32 -0400 Subject: [PATCH 081/136] revert version --- package.json | 2 +- src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d2d6e120e..6b0d6dae7 100644 --- a/package.json +++ b/package.json @@ -93,5 +93,5 @@ "typedoc": "^0.25.4", "typescript": "^5.3.3" }, - "version": "1.14.0-zeta.2" + "version": "1.14.0" } diff --git a/src/version.ts b/src/version.ts index 1cfb80413..e89c8fe4f 100644 --- a/src/version.ts +++ b/src/version.ts @@ -6,4 +6,4 @@ * * hardcoded for now, we would want to have it injected dynamically */ -export const VERSION = "1.14.0-zeta.2"; +export const VERSION = "1.14.0"; From b84b49430b719fb89ad7585175029dbd14be2717 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 06:57:34 -0400 Subject: [PATCH 082/136] change base-64 libraries --- package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- src/account/KeylessAccount.ts | 3 +-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 6b0d6dae7..5329ff8e2 100644 --- a/package.json +++ b/package.json @@ -53,10 +53,10 @@ "@noble/hashes": "^1.4.0", "@scure/bip32": "^1.4.0", "@scure/bip39": "^1.3.0", - "base-64": "^1.0.0", "eventemitter3": "^5.0.1", "form-data": "^4.0.0", "jose": "^5.1.3", + "js-base64": "^3.7.7", "jwks-rsa": "^3.1.0", "jwt-decode": "^4.0.0", "poseidon-lite": "^0.2.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index daca6ac3e..9e877eff8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,9 +23,6 @@ dependencies: '@scure/bip39': specifier: ^1.3.0 version: 1.3.0 - base-64: - specifier: ^1.0.0 - version: 1.0.0 eventemitter3: specifier: ^5.0.1 version: 5.0.1 @@ -35,6 +32,9 @@ dependencies: jose: specifier: ^5.1.3 version: 5.2.3 + js-base64: + specifier: ^3.7.7 + version: 3.7.7 jwks-rsa: specifier: ^3.1.0 version: 3.1.0 @@ -3299,10 +3299,6 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base-64@1.0.0: - resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} - dev: false - /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true @@ -5646,6 +5642,10 @@ packages: engines: {node: '>=10'} dev: true + /js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 0d6f1975c..8ab154a60 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -3,7 +3,7 @@ import { JwtPayload, jwtDecode } from "jwt-decode"; import { JwksClient } from "jwks-rsa"; -import { decode } from "base-64"; +import { decode } from "js-base64"; import EventEmitter from "eventemitter3"; import { EphemeralCertificateVariant, HexInput, SigningScheme } from "../types"; import { AccountAddress } from "../core/accountAddress"; @@ -319,7 +319,6 @@ function base64UrlDecode(base64Url: string): string { const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); // Pad the string with '=' characters if needed const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); - // Decode the base64 string using the base-64 library const decodedString = decode(paddedBase64); return decodedString; } From 90684bdb411673e6c551b0c14307c4fc140788a1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 07:22:39 -0400 Subject: [PATCH 083/136] fix simulation --- .../transactionBuilder/transactionBuilder.ts | 18 ++++++++-- .../transaction/transactionBuilder.test.ts | 36 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 325478305..8a4a5a8ea 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -9,7 +9,13 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { AptosConfig } from "../../api/aptosConfig"; import { AccountAddress, AccountAddressInput, Hex, PublicKey } from "../../core"; -import { AnyPublicKey, AnySignature, Secp256k1PublicKey, Secp256k1Signature } from "../../core/crypto"; +import { + AnyPublicKey, + AnySignature, + KeylessPublicKey, + Secp256k1PublicKey, + Secp256k1Signature, +} from "../../core/crypto"; import { Ed25519PublicKey, Ed25519Signature } from "../../core/crypto/ed25519"; import { getInfo } from "../../internal/account"; import { getLedgerInfo } from "../../internal/general"; @@ -440,7 +446,12 @@ export function generateSignedTransactionForSimulation(args: InputSimulateTransa return new SignedTransaction(transaction.rawTransaction, transactionAuthenticator).bcsToBytes(); } -export function getAuthenticatorForSimulation(publicKey: PublicKey) { +export function getAuthenticatorForSimulation(pk: PublicKey) { + let publicKey = pk; + if (publicKey instanceof KeylessPublicKey || publicKey instanceof Secp256k1PublicKey) { + publicKey = new AnyPublicKey(publicKey); + } + // TODO add support for AnyMultiKey if (publicKey instanceof AnyPublicKey) { if (publicKey.publicKey instanceof Ed25519PublicKey) { @@ -449,6 +460,9 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { if (publicKey.publicKey instanceof Secp256k1PublicKey) { return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Secp256k1Signature(new Uint8Array(64)))); } + if (publicKey.publicKey instanceof KeylessPublicKey) { + return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); + } } // legacy code diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index b8346dc6d..47f3ca196 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -28,7 +28,12 @@ import { } from "../../../src"; import { FUND_AMOUNT, longTestTimeout } from "../../unit/helper"; import { getAptosClient } from "../helper"; -import { fundAccounts, multiSignerScriptBytecode, publishTransferPackage } from "./helper"; +import { + fetchDevnetTestKeylessAccount, + fundAccounts, + multiSignerScriptBytecode, + publishTransferPackage, +} from "./helper"; const { aptos, config } = getAptosClient(); @@ -374,6 +379,35 @@ describe("transaction builder", () => { const signedTransaction = SignedTransaction.deserialize(deserializer); expect(signedTransaction instanceof SignedTransaction).toBeTruthy(); }); + + test("it generates a keyless signed raw transaction for simulation", async () => { + const alice = fetchDevnetTestKeylessAccount(0); + await aptos.fundAccount({ accountAddress: alice.accountAddress, amount: FUND_AMOUNT }); + const payload = await generateTransactionPayload({ + bytecode: multiSignerScriptBytecode, + functionArguments: [ + new U64(100), + new U64(200), + Account.generate().accountAddress, + Account.generate().accountAddress, + new U64(50), + ], + }); + const transaction = await buildTransaction({ + aptosConfig: config, + sender: alice.accountAddress, + payload, + }); + + const bcsTransaction = await generateSignedTransactionForSimulation({ + transaction, + signerPublicKey: alice.publicKey, + }); + expect(bcsTransaction instanceof Uint8Array).toBeTruthy(); + const deserializer = new Deserializer(bcsTransaction); + const signedTransaction = SignedTransaction.deserialize(deserializer); + expect(signedTransaction instanceof SignedTransaction).toBeTruthy(); + }); }); describe("sign", () => { test("it signs a raw transaction", async () => { From a61e4e2c7d796adf1a6f3bc3e3298875fb2afbbe Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 10:39:15 -0400 Subject: [PATCH 084/136] update example --- examples/typescript/keyless.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 72aa5ebff..6a49a2ae3 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -76,7 +76,6 @@ const example = async () => { const alice = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair: aliceEphem, - pepper: "00000000000000000000000000000000000000000000000000000000000000", }); console.log("=== Addresses ===\n"); From 0c9902e0035feb4a51d018a88ff17fffa4dd3704 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 10:40:39 -0400 Subject: [PATCH 085/136] revert --- examples/typescript/keyless.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 6a49a2ae3..72aa5ebff 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -76,6 +76,7 @@ const example = async () => { const alice = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair: aliceEphem, + pepper: "00000000000000000000000000000000000000000000000000000000000000", }); console.log("=== Addresses ===\n"); From 57630ebc488026c0eca4eb410a2f51386ff6855a Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 17 May 2024 11:07:59 -0400 Subject: [PATCH 086/136] refactor errors, add expirytime to epk gen --- src/account/EphemeralKeyPair.ts | 5 ++-- src/account/KeylessAccount.ts | 36 ++++++++++++++++++++++++--- src/internal/transactionSubmission.ts | 3 +-- src/types/keyless.ts | 31 ----------------------- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 5b5d05c16..fbb3f3a23 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -107,9 +107,10 @@ export class EphemeralKeyPair extends Serializable { /** * Returns the public key of the key pair. * @param scheme the type of keypair to use for the EphemeralKeyPair. Only Ed25519 supported for now. + * @param expiryDateSecs the date of expiry. * @return boolean */ - static generate(args?: { scheme: EphemeralPublicKeyVariant }): EphemeralKeyPair { + static generate(args?: { scheme: EphemeralPublicKeyVariant; expiryDateSecs?: bigint | number }): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { @@ -118,7 +119,7 @@ export class EphemeralKeyPair extends Serializable { privateKey = Ed25519PrivateKey.generate(); } - return new EphemeralKeyPair({ privateKey }); + return new EphemeralKeyPair({ privateKey, expiryDateSecs: args?.expiryDateSecs }); } private generateNonce(): string { diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 8ab154a60..063af585f 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -28,11 +28,41 @@ import { generateSigningMessageForSerializable, } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; +import { AptosApiError } from "../client/types"; export const IssuerToJwkEndpoint: Record = { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", }; +export enum KeylessErrorType { + JWK_EXPIRED, + EPK_EXPIRED, + PROOF_NOT_FOUND, + UNKNOWN_INVALID_SIGNATURE, + UNKNOWN, +} +export class KeylessError extends Error { + readonly type: KeylessErrorType; + + constructor(type: KeylessErrorType) { + super(); + this.type = type; + } + + static async fromAptosApiError(error: AptosApiError, signer: KeylessAccount): Promise { + if (!error.data.message.includes("INVALID_SIGNATURE")) { + return new KeylessError(KeylessErrorType.UNKNOWN); + } + if (signer.isExpired()) { + return new KeylessError(KeylessErrorType.EPK_EXPIRED); + } + if (!(await signer.checkJwkValidity())) { + return new KeylessError(KeylessErrorType.JWK_EXPIRED); + } + return new KeylessError(KeylessErrorType.UNKNOWN_INVALID_SIGNATURE); + } +} + export class KeylessAccount extends Serializable implements Account { static readonly PEPPER_LENGTH: number = 31; @@ -220,13 +250,13 @@ export class KeylessAccount extends Serializable implements Account { sign(data: HexInput): KeylessSignature { const { expiryDateSecs } = this.ephemeralKeyPair; if (this.isExpired()) { - throw new Error("Ephemeral key pair is expired."); + throw new KeylessError(KeylessErrorType.EPK_EXPIRED); } if (this.proof === undefined) { - throw new Error("Proof not found"); + throw new KeylessError(KeylessErrorType.PROOF_NOT_FOUND); } if (!this.isJwtValid) { - throw new Error("The proof has expired. Please refetch proof"); + throw new KeylessError(KeylessErrorType.JWK_EXPIRED); } const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); const ephemeralSignature = this.ephemeralKeyPair.sign(data); diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 5e02a81c8..3a0bae8cc 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -8,7 +8,7 @@ import { AptosConfig } from "../api/aptosConfig"; import { MoveVector, U8 } from "../bcs"; import { AptosApiError, postAptosFullNode } from "../client"; -import { Account, KeylessAccount, MultiKeyAccount } from "../account"; +import { Account, KeylessAccount, KeylessError, MultiKeyAccount } from "../account"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; import { PrivateKey } from "../core/crypto"; import { AccountAuthenticator } from "../transactions/authenticator/account"; @@ -36,7 +36,6 @@ import { UserTransactionResponse, PendingTransactionResponse, MimeType, HexInput import { TypeTagU8, TypeTagVector, generateSigningMessageForTransaction } from "../transactions"; import { SimpleTransaction } from "../transactions/instances/simpleTransaction"; import { MultiAgentTransaction } from "../transactions/instances/multiAgentTransaction"; -import { KeylessError } from "../types/keyless"; /** * We are defining function signatures, each with its specific input and output. diff --git a/src/types/keyless.ts b/src/types/keyless.ts index a3f0ff827..78e335247 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -1,37 +1,6 @@ -import { KeylessAccount } from "../account"; -import { AptosApiError } from "../client/types"; - export type ProverResponse = { proof: { a: string; b: string; c: string }; public_inputs_hash: string; training_wheels_signature: string; }; export type PepperFetchResponse = { signature: string; pepper: string; address: string }; - -export enum KeylessErrorType { - JWK_EXPIRED, - EPK_EXPIRED, - UNKNOWN_INVALID_SIGNATURE, - UNKNOWN, -} -export class KeylessError extends Error { - readonly type: KeylessErrorType; - - private constructor(type: KeylessErrorType) { - super(); - this.type = type; - } - - static async fromAptosApiError(error: AptosApiError, signer: KeylessAccount): Promise { - if (!error.data.message.includes("INVALID_SIGNATURE")) { - return new KeylessError(KeylessErrorType.UNKNOWN); - } - if (signer.isExpired()) { - return new KeylessError(KeylessErrorType.EPK_EXPIRED); - } - if (!(await signer.checkJwkValidity())) { - return new KeylessError(KeylessErrorType.JWK_EXPIRED); - } - return new KeylessError(KeylessErrorType.UNKNOWN_INVALID_SIGNATURE); - } -} From d61a3a3437736ca209852d154d2e87a3a261c18c Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 15:17:33 -0400 Subject: [PATCH 087/136] remove keyless error --- src/internal/transactionSubmission.ts | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 3a0bae8cc..137a545a1 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -281,18 +281,11 @@ export async function signAndSubmitTransaction(args: { await signer.waitForProofFetch(); } const authenticator = signTransaction({ signer, transaction }); - try { - return await submitTransaction({ - aptosConfig, - transaction, - senderAuthenticator: authenticator, - }); - } catch (error) { - if (error instanceof AptosApiError && signer instanceof KeylessAccount) { - throw await KeylessError.fromAptosApiError(error, signer); - } - throw error; - } + return submitTransaction({ + aptosConfig, + transaction, + senderAuthenticator: authenticator, + }); } const packagePublishAbi: EntryFunctionABI = { From 7efa17667ad27616d368409679b33577919626cf Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 15:17:47 -0400 Subject: [PATCH 088/136] update test keyless accounts --- tests/e2e/transaction/helper.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/e2e/transaction/helper.ts b/tests/e2e/transaction/helper.ts index bdc5a0f0c..292d7fd7f 100644 --- a/tests/e2e/transaction/helper.ts +++ b/tests/e2e/transaction/helper.ts @@ -137,16 +137,16 @@ export function fetchDevnetTestKeylessAccount(index: number): KeylessAccount { "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0yIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.xFsXE6TcYCoEDCN7mK_Lb7fpMth7D1GfPfAGjzr2wMGAgUi1yYptko7oVbyvCZi2is0MyBxUEdlAMufPDvr-457aMau7E9ptHaGtwhUYDSTANKzvrgWajdDNcFUcuH6YYzafDTxm3PkyyjcQlMN_jrPL4QFiyaoJDbQINWotBiI0yZoEkeaBb9iCCOQK7yngAdhqPDJLKe94Xv97MtzZo64udMILBBDzlYMsKSESeBcvWQVrMVWBzvXb4nFr_A3BXsIe9TbHB7Ial9F79ql_QWmGnhiB2pl1i0yp0RU1lqxtq1hCSngks26LMMj4cjqIrlOca89RmCKrYW7Dl2tOaA", ]; const proofs = [ - "003b5f5763814107baf0782c512918bcda4f49022051895405e126c64d444c3e0157ce75386db38fad8aade38dbe6ffe0bb7300aa611713658c6d80b82b9487c187fab9f0acbc26179e75fad8eccb9014caa8c325c079435f45ad06eccf76783092038cfb862f29ee83ca67617df3350a7bb38719b99cf7a5b21323f8eca4d0d0980969800000000000000010040e94f874cfaa83f5736dd72c7cd0f932b2a186c2255871cae84b48290fb5711a38fd8f9bfc022c326395c38c447b10418a45abfaf512ce3c1734bbe8caae9df0e", - "007006c74d69320288dd47325bb374766b9ceef3210bdc28d98f1dcea50896472363360cadee64c9680d01244a1c179666f7797148d50fb7271deeedeedbf8bf2b79ba54fb9e51dc8578c41d5b5b9c42fcffcb63d4620ecdcc9c2c6c9a5f944316293604a90aabf88c1e8b6d31b82da0c412c232ae03363e1ce1118a9283e45621809698000000000000000100400405e6ff70728ccba56115ea8df1f93423f4a3e1d31becf27239e6809c5e41910870376e3e854141f7340903f6b62f8d34399bf93593ec4d12590872b553e90b", - "009a203da89409a5224feee57f97259f6f6befdef25b5e1aae29e031b740d7d4ae89b86307badfcd59caa8e370b9a42bd2046969838d844fc9bd5de6e975a2501fd4f17cc4107ab6201d4078dcb8b94bc5d47bd540f0e51407854aa1970e27a39d3d4eaf4ad0a89bb2a300d573bcc8f659f79b7089936758ad98e42d10c0bf9c28809698000000000000000100402cd6cb29b973a17fe356101722e201e64b53b5c128c57e593cbdc6426bf58906e657b541dab1c54ca300a28700cafaf0de0aff7806a79ff23a81a021d3d21d03", + "005073aa7bb5e1ca67c4e205180b83ebdf55afee4abc38ad9bfe1bd8c18c6b3d0e594f121ef7ba8813848c184dad732f573ba7354f21f095986f7434d07b798a2e7167ab03bb8365926ada1402f1ffccac77f9395c001709e235376cf66c4f342a8188763f9e0356323106af2a06c922d318b9befeb8461ec4da6cf35c76995a2d8096980000000000000001004095f81b48e96c97d4e83ae9aa42dd3b638932f077134daa0a9ef1d6156c956f766e26168e37c60354a53fc6d9de2a00943f184a84642218018e8ef684481cce01", + "003fe9e4ca26c672e886dcc572b94a585a02541e1817102a8be3012ed4f6610e17ed02035125e706c974e15cdba1176996c4e752fe9950dedcffcbe27d0152f028822cdbd24568fc0179d5a60a21bff098c00906da8bae1f66ef5f9b05d937c805093188dd09732a061c38813f35abf39f2d9a6bca455e37245463c56ddfca371380969800000000000000010040d3898b6a3cdda4bd51eec5ed037ad7cbb76f8a0e4fd3a9c02645a42e71c4a08b5cdb119817e67114bd08bc8c2fabca1295dec0b974410a070975b5a2702e8f01", + "004777ee9a265122db09dfbde09cc828b7ce3fb95faf95499cec89a334dd59831a4a6a0adf9ccdc0e4a185a0d9c500d9a27e83a3d2d108ab5e3f48e197843d3d0cfd1b1d4e653cfb5bbe451ff83ff2b4765ff860dc612075c5b29a5fc0b8a93e0bb6fd078478a69a48cbe96cd698de35c77989afbd9f9003f58acd7010a5cac78c8096980000000000000001004040bbf6d459df035416113a5a828b6422f24d8d5a1865c00c904a6517d9b8867295b8fa6f1d999e19cc86a637fa1a731a44aa00a99fd22a811e4cb7fba8c04700", ]; const proof = ZeroKnowledgeSig.fromBytes(Hex.fromHexInput(proofs[index]).toUint8Array()); const token = tokens[index]; const ZEROS = "00000000000000000000000000000000000000000000000000000000000000"; const ephemPrivateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryDateSecs = 1721397501; + const expiryDateSecs = 1724497501; const ephemKeyPair = new EphemeralKeyPair({ privateKey: ephemPrivateKey, expiryDateSecs, blinder: ZEROS }); const account = KeylessAccount.fromJWTAndProof({ proof, jwt: token, ephemeralKeyPair: ephemKeyPair, pepper: ZEROS }); return account; From 18c2be07235088a9ea99d37ab6e21cb5ac4e5284 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 15:40:55 -0400 Subject: [PATCH 089/136] add serialization/deserialization test --- tests/e2e/api/keyless.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index a10b054d0..b4f8f74db 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -58,5 +58,10 @@ describe("keyless api", () => { expect(senderOldBalance - senderNewBalance).toBeGreaterThan(TRANSFER_AMOUNT); expect(recipientNewBalance - recipientOldBalance).toEqual(TRANSFER_AMOUNT); }); + test("serializes and deserializes", async () => { + const bytes = keylessAccount.bcsToBytes(); + const deserializedAccount = KeylessAccount.fromBytes(bytes); + expect(bytes).toEqual(deserializedAccount.bcsToBytes()); + }); }); }); From d6b8393abd018c1c5b87c237aed66bda81ccbedb Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 16:23:04 -0400 Subject: [PATCH 090/136] fix signing message --- src/account/KeylessAccount.ts | 10 +++++++--- src/bcs/cryptoHasher.ts | 6 ++++++ src/transactions/transactionBuilder/signingMessage.ts | 8 ++++---- 3 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 src/bcs/cryptoHasher.ts diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 063af585f..bf0db902d 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -25,10 +25,11 @@ import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/acc import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType, - generateSigningMessageForSerializable, + generateSigningMessageForBcsCryptoHashable, } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; import { AptosApiError } from "../client/types"; +import { AptsoDomainSeparator, CryptoHashable } from "../bcs/cryptoHasher"; export const IssuerToJwkEndpoint: Record = { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", @@ -282,7 +283,7 @@ export class KeylessAccount extends Serializable implements Account { } const raw = deriveTransactionType(transaction); const txnAndProof = new TransactionAndProof(raw, this.proof.proof); - const signMess = generateSigningMessageForSerializable(txnAndProof); + const signMess = generateSigningMessageForBcsCryptoHashable(txnAndProof); return this.sign(signMess); } @@ -327,15 +328,18 @@ export class KeylessAccount extends Serializable implements Account { } } -class TransactionAndProof extends Serializable { +export class TransactionAndProof extends CryptoHashable { transaction: AnyRawTransactionInstance; proof?: ZkProof; + domainSeparator: AptsoDomainSeparator; + constructor(transaction: AnyRawTransactionInstance, proof?: ZkProof) { super(); this.transaction = transaction; this.proof = proof; + this.domainSeparator = "APTOS::TransactionAndProof" } serialize(serializer: Serializer): void { diff --git a/src/bcs/cryptoHasher.ts b/src/bcs/cryptoHasher.ts new file mode 100644 index 000000000..ff99574d0 --- /dev/null +++ b/src/bcs/cryptoHasher.ts @@ -0,0 +1,6 @@ +import { Serializable } from "./serializer"; + +export type AptsoDomainSeparator = `APTOS::${string}`; +export abstract class CryptoHashable extends Serializable { + abstract readonly domainSeparator: AptsoDomainSeparator; +} diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index 047af37bb..354113544 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -8,7 +8,7 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; import { FeePayerRawTransaction, MultiAgentRawTransaction } from "../instances"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; -import { Serializable } from "../../bcs"; +import { CryptoHashable } from "../../bcs/cryptoHasher"; /** * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction @@ -64,12 +64,12 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of * its constructor as the domain separator. * - * @param serializable An object that has a bcs serialized form + * @param hashable An object that has a bcs serialized form * * @returns The Uint8Array of the signing message */ -export function generateSigningMessageForSerializable(serializable: Serializable): Uint8Array { - return generateSigningMessage(serializable.bcsToBytes(), `APTOS::${serializable.constructor.name}`); +export function generateSigningMessageForBcsCryptoHashable(hashable: CryptoHashable): Uint8Array { + return generateSigningMessage(hashable.bcsToBytes(), hashable.domainSeparator); } /** From 40d27146705a4450aaeddf3ef78896cb7631bc51 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 16:23:18 -0400 Subject: [PATCH 091/136] remove turning off waitforindexer --- tests/e2e/api/keyless.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index b4f8f74db..c1d425f7e 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -32,12 +32,10 @@ describe("keyless api", () => { await aptos.faucet.fundAccount({ accountAddress: keylessAccount.accountAddress, amount: FUND_AMOUNT, - options: { waitForIndexer: false }, }); await aptos.faucet.fundAccount({ accountAddress: recipient.accountAddress, amount: FUND_AMOUNT, - options: { waitForIndexer: false }, }); const senderOldBalance = await balance(aptos, keylessAccount.accountAddress); From 109a48b9b7552b43485b615cbd850148966763f7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 16:28:53 -0400 Subject: [PATCH 092/136] fix signing message test --- tests/unit/signingMessage.test.ts | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index 44839652a..34d1bda72 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -4,9 +4,12 @@ import { Account, Ed25519PrivateKey, - generateSigningMessageForSerializable, + Serializer, + TransactionAndProof, + generateSigningMessageForBcsCryptoHashable, generateSigningMessageForTransaction, } from "../../src"; +import { AptsoDomainSeparator, CryptoHashable } from "../../src/bcs/cryptoHasher"; import { getAptosClient } from "../e2e/helper"; import { ed25519 } from "./helper"; @@ -74,12 +77,27 @@ describe("generateSigningMessage ", () => { }); test("generates the proper message for serializable", async () => { - const signingMessage = generateSigningMessageForSerializable(alice.publicKey); + class TestClass extends CryptoHashable { + domainSeparator: AptsoDomainSeparator; + + data: string; + + constructor() { + super(); + this.data = "test"; + this.domainSeparator = "APTOS::TestClass"; + } + + serialize(serializer: Serializer): void { + serializer.serializeStr(this.data); + } + } + + const signingMessage = generateSigningMessageForBcsCryptoHashable(new TestClass()); expect(signingMessage).toEqual( new Uint8Array([ - 35, 174, 146, 91, 32, 167, 212, 247, 186, 43, 31, 208, 55, 67, 229, 235, 208, 187, 199, 127, 107, 22, 147, 72, - 128, 135, 179, 154, 150, 76, 73, 93, 32, 222, 25, 229, 209, 136, 12, 172, 135, 213, 116, 132, 206, 158, 210, - 232, 76, 240, 249, 89, 159, 18, 231, 204, 58, 82, 228, 231, 101, 122, 118, 63, 44, + 134, 234, 208, 191, 5, 202, 254, 220, 58, 89, 147, 141, 29, 129, 67, 235, 85, 247, 253, 242, 60, 51, 32, 219, + 33, 228, 237, 43, 170, 195, 204, 116, 4, 116, 101, 115, 116, ]), ); }); From f949e21dd0492740cdf80243d29dac00f356bcc4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 16:43:16 -0400 Subject: [PATCH 093/136] tidy up the example --- examples/typescript/keyless.ts | 39 +++++++++++++--------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 72aa5ebff..e9d65b548 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -10,13 +10,11 @@ import { AccountAddress, Aptos, AptosConfig, - Ed25519PrivateKey, EphemeralKeyPair, Network, } from "@aptos-labs/ts-sdk"; import * as readlineSync from "readline-sync"; -const APTOS_COIN = "0x1::aptos_coin::AptosCoin"; const COIN_STORE = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; const ALICE_INITIAL_BALANCE = 100_000_000; const BOB_INITIAL_BALANCE = 100; @@ -47,36 +45,31 @@ const example = async () => { const config = new AptosConfig({ network: Network.DEVNET }); const aptos = new Aptos(config); - const privateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryDateSecs = BigInt(1721397501); - const blinder = new Uint8Array(31); - for (let i = 0; i < blinder.length; i += 1) { - blinder[i] = 0; - } - const aliceEphem = new EphemeralKeyPair({ privateKey, expiryDateSecs, blinder }); + // Generate the ephemeral (temporary) key pair that will be used to sign transactions. + const aliceEphem = EphemeralKeyPair.generate(); - console.log(); - console.log("=== Get token via the below link ==="); - console.log(); + console.log("\n=== Keyless Account Example ===\n"); const link = `https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=openid&access_type=offline&service=lso&o2v=2&theme=glif&flowName=GeneralOAuthFlow&nonce=${aliceEphem.nonce}`; - console.log(link); - console.log(); + console.log(`${link}\n`); + + console.log("1. Open the link above"); + console.log("2. Log in with your Google account"); + console.log("3. Click 'Exchange authorization code for tokens"); + console.log("4. Copy the 'id_token' - (toggling 'Wrap lines' option at the bottom makes this easier)\n"); function inputJwt(): string { - const jwt: string = readlineSync.question("Paste the JWT token (or press enter to use default test token): ", { + const jwt: string = readlineSync.question("Paste the JWT (id_token) token here and press enter: ", { hideEchoBack: false, }); return jwt; } const jwt = inputJwt(); - const bob = Account.generate(); - + // Derive the Keyless Account from the JWT and ephemeral key pair. const alice = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair: aliceEphem, - pepper: "00000000000000000000000000000000000000000000000000000000000000", }); console.log("=== Addresses ===\n"); @@ -84,6 +77,7 @@ const example = async () => { console.log(`Alice's nonce is: ${aliceEphem.nonce}`); console.log(`Alice's ephem pubkey is: ${aliceEphem.getPublicKey().toString()}`); + const bob = Account.generate(); console.log(`Bob's address is: ${bob.accountAddress}`); // Fund the accounts @@ -106,13 +100,10 @@ const example = async () => { const bobBalance = await balance(aptos, "Bob", bob.accountAddress); // Transfer between users - const transaction = await aptos.transaction.build.simple({ + const transaction = await aptos.transferCoinTransaction({ sender: alice.accountAddress, - data: { - function: "0x1::coin::transfer", - typeArguments: [APTOS_COIN], - functionArguments: [bob.accountAddress, TRANSFER_AMOUNT], - }, + recipient: bob.accountAddress, + amount: TRANSFER_AMOUNT, }); const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); From 7c6ec597c73556a62612368502e4bd5b3353a39c Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 17:09:00 -0400 Subject: [PATCH 094/136] resolve a bunch of comments --- src/account/EphemeralKeyPair.ts | 31 +++++++++++++------------------ src/account/KeylessAccount.ts | 11 +---------- src/account/MultiKeyAccount.ts | 3 ++- src/utils/helpers.ts | 25 +++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 29 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index fbb3f3a23..3e78da996 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -12,8 +12,9 @@ import { } from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; -import { EphemeralPublicKeyVariant, HexInput } from "../types"; +import { AnyNumber, EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; +import { currentTimeInSeconds, floorToWholeHour } from "../utils/helpers"; export class EphemeralKeyPair extends Serializable { static readonly BLINDER_LENGTH: number = 31; @@ -38,17 +39,17 @@ export class EphemeralKeyPair extends Serializable { /** * A private key used to sign transactions. This private key is not tied to any account on the chain as it - * is ephemeral in nature. + * is ephemeral (not permanent) in nature. */ private privateKey: PrivateKey; /** * A public key used to verify transactions. This public key is not tied to any account on the chain as it - * is ephemeral in nature. + * is ephemeral (not permanent) in nature. */ private publicKey: EphemeralPublicKey; - constructor(args: { privateKey: PrivateKey; expiryDateSecs?: bigint | number; blinder?: HexInput }) { + constructor(args: { privateKey: PrivateKey; expiryDateSecs?: AnyNumber; blinder?: HexInput }) { super(); const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; @@ -122,6 +123,10 @@ export class EphemeralKeyPair extends Serializable { return new EphemeralKeyPair({ privateKey, expiryDateSecs: args?.expiryDateSecs }); } + /** + * From the ephemeral public key, expiry timestamp, and blinder, calculate the nonce to be used at authentication via OIDC. + * @returns string + */ private generateNonce(): string { const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); fields.push(BigInt(this.expiryDateSecs)); @@ -132,7 +137,6 @@ export class EphemeralKeyPair extends Serializable { /** * Sign the given message with the private key. - * * @param data in HexInput format * @returns EphemeralSignature */ @@ -144,19 +148,10 @@ export class EphemeralKeyPair extends Serializable { } } +/** + * Generates a random byte array of length EphemeralKeyPair.BLINDER_LENGTH + * @returns Uint8Array + */ function generateBlinder(): Uint8Array { return randomBytes(EphemeralKeyPair.BLINDER_LENGTH); } - -function currentTimeInSeconds(): number { - return Math.floor(new Date().getTime() / 1000); -} - -function floorToWholeHour(timestampInSeconds: number): number { - const date = new Date(timestampInSeconds * 1000); - // Reset minutes and seconds to zero - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - return Math.floor(date.getTime() / 1000); -} diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index bf0db902d..0489a3d23 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -3,7 +3,6 @@ import { JwtPayload, jwtDecode } from "jwt-decode"; import { JwksClient } from "jwks-rsa"; -import { decode } from "js-base64"; import EventEmitter from "eventemitter3"; import { EphemeralCertificateVariant, HexInput, SigningScheme } from "../types"; import { AccountAddress } from "../core/accountAddress"; @@ -30,6 +29,7 @@ import { import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; import { AptosApiError } from "../client/types"; import { AptsoDomainSeparator, CryptoHashable } from "../bcs/cryptoHasher"; +import { base64UrlDecode } from "../utils/helpers"; export const IssuerToJwkEndpoint: Record = { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", @@ -348,15 +348,6 @@ export class TransactionAndProof extends CryptoHashable { } } -function base64UrlDecode(base64Url: string): string { - // Replace base64url-specific characters - const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - // Pad the string with '=' characters if needed - const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); - const decodedString = decode(paddedBase64); - return decodedString; -} - export type ProofFetchSuccess = { status: "Success"; }; diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 25eea2e7f..702bc6757 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -125,7 +125,8 @@ export class MultiKeyAccount implements Account { } /** - * Waits for any proofs to be fetched + * Waits for any proofs on any KeylessAccount signers to be fetched. If the proof is fetched a syncronously, call this + * to ensure signing with the KeylessAccount does not fail as the proof must be ready. * @return */ async waitForProofFetch() { diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index d732befaa..7df3b5284 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,6 +1,8 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 +import { decode } from "js-base64"; + /** * Sleep the current thread for the given amount of time * @param timeMs time in milliseconds to sleep @@ -10,3 +12,26 @@ export async function sleep(timeMs: number): Promise { setTimeout(resolve, timeMs); }); } + + +export function currentTimeInSeconds(): number { + return Math.floor(new Date().getTime() / 1000); +} + +export function floorToWholeHour(timestampInSeconds: number): number { + const date = new Date(timestampInSeconds * 1000); + // Reset minutes and seconds to zero + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + return Math.floor(date.getTime() / 1000); +} + +export function base64UrlDecode(base64Url: string): string { + // Replace base64url-specific characters + const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); + // Pad the string with '=' characters if needed + const paddedBase64 = base64 + "==".substring(0, (3 - (base64.length % 3)) % 3); + const decodedString = decode(paddedBase64); + return decodedString; +} From 8bfe4a58185a3f1eb817443e25c020af45c9f1c6 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 18:53:53 -0400 Subject: [PATCH 095/136] resolve a bunch of comments --- src/core/crypto/poseidon.ts | 1 - src/internal/keyless.ts | 10 ---------- src/utils/apiEndpoints.ts | 8 ++++---- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/core/crypto/poseidon.ts b/src/core/crypto/poseidon.ts index 9583838bf..2ae9bc6aa 100644 --- a/src/core/crypto/poseidon.ts +++ b/src/core/crypto/poseidon.ts @@ -104,7 +104,6 @@ export function bigIntToBytesLE(value: bigint, length: number): Uint8Array { return bytes; } -// From chatGPT function padUint8ArrayWithZeros(inputArray: Uint8Array, paddedSize: number): Uint8Array { if (paddedSize < inputArray.length) { throw new Error("Padded size must be greater than or equal to the input array size."); diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 1b5b5a87b..f83e161be 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -7,7 +7,6 @@ * other namespaces and processes can access these methods without depending on the entire * faucet namespace and without having a dependency cycle error. */ -import { jwtDecode } from "jwt-decode"; import { AptosConfig } from "../api/aptosConfig"; import { postAptosPepperService, postAptosProvingService } from "../client"; import { EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof } from "../core"; @@ -21,7 +20,6 @@ export async function getPepper(args: { ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; derivationPath?: string; - verify?: boolean; }): Promise { const { aptosConfig, jwt, ephemeralKeyPair, uidKey, derivationPath } = args; @@ -78,16 +76,8 @@ export async function getProof(args: { c: proofPoints.c, }); - let extraField; - if (extraFieldKey) { - const jwtPayload = jwtDecode<{ [key: string]: string }>(jwt); - const extraFieldVal = jwtPayload[extraFieldKey]; - extraField = `"${extraFieldKey}":"${extraFieldVal}",`; - } - const signedProof = new ZeroKnowledgeSig({ proof: new ZkProof(groth16Zkp, ZkpVariant.Groth16), - extraField, trainingWheelsSignature: EphemeralSignature.fromHex(data.training_wheels_signature), }); return signedProof; diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index d33df85ce..df56f6a24 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -23,15 +23,15 @@ export const NetworkToFaucetAPI: Record = { }; export const NetworkToPepperAPI: Record = { - mainnet: "https://pepper.keyless.mainnet.aptoslabs.com/v0", - testnet: "https://pepper.keyless.testnet.aptoslabs.com/v0", + mainnet: "https://api.mainnet.aptoslabs.com/keyless/pepper/v0", + testnet: "https://api.testnet.aptoslabs.com/keyless/pepper/v0", devnet: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", local: "http://127.0.0.1:8000/v0", }; export const NetworkToProverAPI: Record = { - mainnet: "https://prover.keyless.mainnet.aptoslabs.com/v0", - testnet: "https://prover.keyless.testnet.aptoslabs.com/v0", + mainnet: "https://api.mainnet.aptoslabs.com/keyless/prover/v0", + testnet: "https://api.testnet.aptoslabs.com/keyless/prover/v0", devnet: "https://api.devnet.aptoslabs.com/keyless/prover/v0", local: "http://127.0.0.1:8083/v0", }; From a8a2f3a8c2e04909933612209eb01b3d2df80abf Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 23 May 2024 19:13:05 -0400 Subject: [PATCH 096/136] update lockfile --- examples/typescript/pnpm-lock.yaml | 548 ++--- pnpm-lock.yaml | 3471 +++++++++++++--------------- 2 files changed, 1848 insertions(+), 2171 deletions(-) diff --git a/examples/typescript/pnpm-lock.yaml b/examples/typescript/pnpm-lock.yaml index 7acc0a82c..f9ef022f5 100644 --- a/examples/typescript/pnpm-lock.yaml +++ b/examples/typescript/pnpm-lock.yaml @@ -16,7 +16,7 @@ dependencies: version: 1.4.8 dotenv: specifier: ^16.3.1 - version: 16.4.5 + version: 16.3.1 npm-run-all: specifier: latest version: 4.1.5 @@ -47,8 +47,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true @@ -59,7 +59,7 @@ packages: /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true @@ -74,8 +74,8 @@ packages: engines: {node: '>= 16'} dev: false - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true /@tsconfig/node12@1.0.11: @@ -96,22 +96,17 @@ packages: undici-types: 5.26.5 dev: true -<<<<<<< HEAD /@types/readline-sync@1.4.8: resolution: {integrity: sha512-BL7xOf0yKLA6baAX6MMOnYkoflUyj/c7y3pqMRfU0va7XlwHAOTOIo4x55P/qLfMsuaYdJJKubToLqRVmRtRZA==} dev: false /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} -======= - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} ->>>>>>> main engines: {node: '>=0.4.0'} dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -127,26 +122,24 @@ packages: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bind: 1.0.5 + is-array-buffer: 3.0.2 dev: false - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: false /asap@2.0.6: @@ -157,11 +150,9 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 dev: false /balanced-match@1.0.2: @@ -175,15 +166,12 @@ packages: concat-map: 0.0.1 dev: false - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + get-intrinsic: 1.2.1 + set-function-length: 1.1.1 dev: false /chalk@2.4.2: @@ -212,8 +200,8 @@ packages: delayed-stream: 1.0.0 dev: false - /component-emitter@1.3.1: - resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + /component-emitter@1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: false /concat-map@0.0.1: @@ -239,33 +227,6 @@ packages: which: 1.3.1 dev: false - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: false - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: false - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: false - /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -278,21 +239,21 @@ packages: ms: 2.1.2 dev: false - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 + get-intrinsic: 1.2.1 gopd: 1.0.1 + has-property-descriptors: 1.0.0 dev: false /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: false @@ -313,8 +274,8 @@ packages: engines: {node: '>=0.3.1'} dev: true - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: false @@ -324,84 +285,58 @@ packages: is-arrayish: 0.2.1 dev: false - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 + is-negative-zero: 2.0.2 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 + is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.13 + is-typed-array: 1.1.12 is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.13 dev: false - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.4 - dev: false - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: false - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - dev: false - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: false /es-to-primitive@1.2.1: @@ -443,7 +378,7 @@ packages: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.12.1 + qs: 6.11.2 dev: false /function-bind@1.1.2: @@ -454,9 +389,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: false @@ -464,38 +399,43 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: false - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: - es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.3 + has: 1.0.4 + has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 dev: false - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: false + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: false - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - gopd: 1.0.1 dev: false /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.1 dev: false /graceful-fs@4.2.11: @@ -511,14 +451,14 @@ packages: engines: {node: '>=4'} dev: false - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - es-define-property: 1.0.0 + get-intrinsic: 1.2.1 dev: false - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: false @@ -527,15 +467,20 @@ packages: engines: {node: '>= 0.4'} dev: false - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: false - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -550,21 +495,21 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: false - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 dev: false - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: false /is-arrayish@0.2.1: @@ -581,8 +526,8 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: false /is-callable@1.2.7: @@ -593,25 +538,18 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.2 - dev: false - - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 + hasown: 2.0.0 dev: false /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: false - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: false @@ -619,29 +557,28 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: false /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.5 + has-tostringtag: 1.0.0 dev: false - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 dev: false /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: false /is-symbol@1.0.4: @@ -651,17 +588,17 @@ packages: has-symbols: 1.0.3 dev: false - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.13 dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 dev: false /isarray@2.0.5: @@ -686,6 +623,13 @@ packages: strip-bom: 3.0.0 dev: false + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -754,7 +698,7 @@ packages: pidtree: 0.3.1 read-pkg: 3.0.0 shell-quote: 1.8.1 - string.prototype.padend: 3.1.6 + string.prototype.padend: 3.1.5 dev: false /object-inspect@1.13.1: @@ -766,11 +710,11 @@ packages: engines: {node: '>= 0.4'} dev: false - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -817,16 +761,11 @@ packages: engines: {node: '>=4'} dev: false - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: false - - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.6 + side-channel: 1.0.4 dev: false /read-pkg@3.0.0: @@ -838,7 +777,6 @@ packages: path-type: 3.0.0 dev: false -<<<<<<< HEAD /readline-sync@1.4.10: resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} engines: {node: '>= 0.8.0'} @@ -846,16 +784,11 @@ packages: /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} -======= - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} ->>>>>>> main engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + set-function-name: 2.0.1 dev: false /resolve@1.22.8: @@ -867,22 +800,21 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: false - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 dev: false - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: false @@ -891,32 +823,31 @@ packages: hasBin: true dev: false - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true + dependencies: + lru-cache: 6.0.0 dev: false - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 + define-data-property: 1.1.1 + get-intrinsic: 1.2.1 gopd: 1.0.1 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.0 dev: false - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 + define-data-property: 1.1.1 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.0 dev: false /shebang-command@1.2.0: @@ -935,13 +866,11 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: false - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 object-inspect: 1.13.1 dev: false @@ -949,59 +878,56 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.16 dev: false - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: false /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 dev: false - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: false - /string.prototype.padend@3.1.6: - resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + /string.prototype.padend@3.1.5: + resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: false - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: false - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: false - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.22.3 dev: false /strip-bom@3.0.0: @@ -1012,9 +938,8 @@ packages: /superagent@8.1.2: resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net dependencies: - component-emitter: 1.3.1 + component-emitter: 1.3.0 cookiejar: 2.1.4 debug: 4.3.4 fast-safe-stringify: 2.1.1 @@ -1022,8 +947,8 @@ packages: formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.12.1 - semver: 7.6.2 + qs: 6.11.2 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: false @@ -1055,18 +980,13 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.12.12 -<<<<<<< HEAD acorn: 8.10.0 acorn-walk: 8.2.0 -======= - acorn: 8.11.3 - acorn-walk: 8.3.2 ->>>>>>> main arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -1076,48 +996,42 @@ packages: yn: 3.1.1 dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: false - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: false - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: false - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + is-typed-array: 1.1.12 dev: false /typescript@5.4.5: @@ -1129,7 +1043,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -1160,15 +1074,15 @@ packages: is-symbol: 1.0.4 dev: false - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: false /which@1.3.1: @@ -1182,6 +1096,10 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: false + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f7a0c7f1..9e877eff8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@aptos-labs/aptos-cli': - specifier: ^0.1.8 - version: 0.1.8 + specifier: ^0.1.2 + version: 0.1.2 '@aptos-labs/aptos-client': specifier: ^0.1.0 version: 0.1.0 @@ -48,22 +48,21 @@ dependencies: devDependencies: '@babel/traverse': specifier: ^7.23.6 - version: 7.24.5 + version: 7.23.6 '@graphql-codegen/cli': specifier: ^5.0.0 - version: 5.0.2(@types/node@20.12.12)(graphql@16.8.1)(typescript@5.4.5) + version: 5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3) '@graphql-codegen/import-types-preset': specifier: ^3.0.0 version: 3.0.0(graphql@16.8.1) '@graphql-codegen/typescript': specifier: ^4.0.1 - version: 4.0.7(graphql@16.8.1) + version: 4.0.1(graphql@16.8.1) '@graphql-codegen/typescript-graphql-request': specifier: ^6.0.1 - version: 6.2.0(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1) + version: 6.0.1(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1) '@graphql-codegen/typescript-operations': specifier: ^4.0.1 -<<<<<<< HEAD version: 4.0.1(graphql@16.8.1) '@types/base-64': specifier: ^1.0.2 @@ -74,39 +73,33 @@ devDependencies: '@types/jsonwebtoken': specifier: ^9.0.6 version: 9.0.6 -======= - version: 4.2.1(graphql@16.8.1) - '@types/jest': - specifier: ^29.5.11 - version: 29.5.12 ->>>>>>> main '@types/node': specifier: ^20.10.4 - version: 20.12.12 + version: 20.10.4 '@typescript-eslint/eslint-plugin': specifier: ^6.14.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.14.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.4.5) + version: 6.14.0(eslint@8.55.0)(typescript@5.3.3) dotenv: specifier: ^16.3.1 - version: 16.4.5 + version: 16.3.1 eslint: specifier: ^8.55.0 - version: 8.57.0 + version: 8.55.0 eslint-config-airbnb-base: specifier: ^15.0.0 - version: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0) eslint-config-airbnb-typescript: specifier: ^17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@6.21.0)(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 17.1.0(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.0)(eslint@8.55.0) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.55.0) eslint-plugin-import: specifier: ^2.29.0 - version: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + version: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) graphql: specifier: ^16.8.1 version: 16.8.1 @@ -115,51 +108,52 @@ devDependencies: version: 6.1.0(graphql@16.8.1) jest: specifier: ^29.7.0 -<<<<<<< HEAD version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 -======= - version: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) ->>>>>>> main prettier: specifier: ^3.1.1 - version: 3.2.5 + version: 3.1.1 tree-kill: specifier: ^1.2.2 version: 1.2.2 ts-jest: specifier: ^29.1.1 - version: 29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.1(@babel/core@7.22.5)(esbuild@0.19.9)(jest@29.7.0)(typescript@5.3.3) ts-loader: specifier: ^9.5.1 - version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) + version: 9.5.1(typescript@5.3.3)(webpack@5.88.2) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) + version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) tsup: specifier: ^8.0.1 - version: 8.0.2(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.1(ts-node@10.9.2)(typescript@5.3.3) typedoc: specifier: ^0.25.4 - version: 0.25.13(typescript@5.4.5) + version: 0.25.4(typescript@5.3.3) typescript: specifier: ^5.3.3 - version: 5.4.5 + version: 5.3.3 packages: - /@ampproject/remapping@2.3.0: - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true - /@aptos-labs/aptos-cli@0.1.8: - resolution: {integrity: sha512-xSWDchqoDR4aR74xNoJZgOzIFtn+EKFGGFLG0vOb+6Ce8Jgg1Ui0Pqhvwbx6Z36dDxfKv0F4M7bnurvWpwAjXA==} + /@aptos-labs/aptos-cli@0.1.2: + resolution: {integrity: sha512-MCi+9xPDG/Fx6c6b9ACqyQBYJLHqKJQKB8lay/1sUNJ2mNBB2OU1Lkmd5pmjUG1JbZ5cg2Fmgid5iMKdTnphhA==} hasBin: true dev: false @@ -179,13 +173,13 @@ packages: peerDependencies: graphql: '*' dependencies: - '@babel/core': 7.24.5 - '@babel/generator': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/runtime': 7.24.5 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - babel-preset-fbjs: 3.4.0(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/runtime': 7.23.1 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.22.5) chalk: 4.1.2 fb-watchman: 2.0.2 fbjs: 3.0.5 @@ -211,33 +205,71 @@ packages: - encoding dev: true - /@babel/code-frame@7.24.2: - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.0.1 + '@babel/highlight': 7.22.20 + chalk: 2.4.2 dev: true - /@babel/compat-data@7.24.4: - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 dev: true - /@babel/core@7.24.5: - resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.22.5: + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.5) + '@babel/helpers': 7.22.5 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.0 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/core@7.23.2: + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -247,13 +279,33 @@ packages: - supports-color dev: true - /@babel/generator@7.24.5: - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + /@babel/generator@7.22.5: + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 dev: true @@ -261,35 +313,35 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.24.5 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true @@ -302,570 +354,651 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 dev: true - /@babel/helper-member-expression-to-functions@7.24.5: - resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + /@babel/helper-module-transforms@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.23.2 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 dev: true /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true - /@babel/helper-plugin-utils@7.24.5: - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.5): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.24.5 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 dev: true - /@babel/helper-simple-access@7.24.5: - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true - /@babel/helper-split-export-declaration@7.24.5: - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} dev: true - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.24.5: - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + /@babel/helpers@7.22.5: + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helpers@7.24.5: - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + /@babel/helpers@7.23.2: + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.24.5: - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 dev: true - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.6 dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.5): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.5): + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.5) dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} + /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} + /@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} + /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} + /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5): - resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} + /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.23.0 dev: true - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/runtime@7.23.1: + resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 dev: true - /@babel/runtime@7.24.5: - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.1 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.23.0 dev: true - /@babel/traverse@7.24.5: - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true @@ -880,17 +1013,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + /@esbuild/android-arm64@0.19.9: + resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -898,8 +1022,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + /@esbuild/android-arm@0.19.9: + resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -907,8 +1031,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + /@esbuild/android-x64@0.19.9: + resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -916,8 +1040,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + /@esbuild/darwin-arm64@0.19.9: + resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -925,8 +1049,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + /@esbuild/darwin-x64@0.19.9: + resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -934,8 +1058,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + /@esbuild/freebsd-arm64@0.19.9: + resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -943,8 +1067,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + /@esbuild/freebsd-x64@0.19.9: + resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -952,8 +1076,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + /@esbuild/linux-arm64@0.19.9: + resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -961,8 +1085,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + /@esbuild/linux-arm@0.19.9: + resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -970,8 +1094,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + /@esbuild/linux-ia32@0.19.9: + resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -979,8 +1103,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + /@esbuild/linux-loong64@0.19.9: + resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -988,8 +1112,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + /@esbuild/linux-mips64el@0.19.9: + resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -997,8 +1121,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + /@esbuild/linux-ppc64@0.19.9: + resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1006,8 +1130,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + /@esbuild/linux-riscv64@0.19.9: + resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1015,8 +1139,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + /@esbuild/linux-s390x@0.19.9: + resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1024,8 +1148,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + /@esbuild/linux-x64@0.19.9: + resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1033,8 +1157,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + /@esbuild/netbsd-x64@0.19.9: + resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1042,8 +1166,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + /@esbuild/openbsd-x64@0.19.9: + resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1051,8 +1175,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + /@esbuild/sunos-x64@0.19.9: + resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1060,8 +1184,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + /@esbuild/win32-arm64@0.19.9: + resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1069,8 +1193,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + /@esbuild/win32-ia32@0.19.9: + resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1078,8 +1202,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + /@esbuild/win32-x64@0.19.9: + resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1087,13 +1211,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.0 + eslint: 8.55.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1109,8 +1233,8 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 + globals: 13.20.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1119,8 +1243,8 @@ packages: - supports-color dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1134,18 +1258,8 @@ packages: tslib: 2.4.1 dev: true - /@graphql-codegen/add@5.0.2(graphql@16.8.1): - resolution: {integrity: sha512-ouBkSvMFUhda5VoKumo/ZvsZM9P5ZTyDsI8LW18VxSNWOjrTeLXBWHG8Gfaai0HwhflPtCYVABbriEcOmrRShQ==} - 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 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.6.2 - dev: true - - /@graphql-codegen/cli@5.0.2(@types/node@20.12.12)(graphql@16.8.1)(typescript@5.4.5): - resolution: {integrity: sha512-MBIaFqDiLKuO4ojN6xxG9/xL9wmfD3ZjZ7RsPjwQnSHBCUXnEkdKvX+JVpx87Pq29Ycn8wTJUguXnTZ7Di0Mlw==} + /@graphql-codegen/cli@5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3): + resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} hasBin: true peerDependencies: '@parcel/watcher': ^2.1.0 @@ -1154,29 +1268,28 @@ packages: '@parcel/watcher': optional: true dependencies: - '@babel/generator': 7.24.5 - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - '@graphql-codegen/client-preset': 4.2.6(graphql@16.8.1) - '@graphql-codegen/core': 4.0.2(graphql@16.8.1) - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-tools/apollo-engine-loader': 8.0.1(graphql@16.8.1) - '@graphql-tools/code-file-loader': 8.1.2(graphql@16.8.1) - '@graphql-tools/git-loader': 8.0.6(graphql@16.8.1) - '@graphql-tools/github-loader': 8.0.1(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/graphql-file-loader': 8.0.1(graphql@16.8.1) - '@graphql-tools/json-file-loader': 8.0.1(graphql@16.8.1) - '@graphql-tools/load': 8.0.2(graphql@16.8.1) - '@graphql-tools/prisma-loader': 8.0.4(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@babel/generator': 7.22.5 + '@babel/template': 7.22.5 + '@babel/types': 7.23.0 + '@graphql-codegen/core': 4.0.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/code-file-loader': 8.0.3(graphql@16.8.1) + '@graphql-tools/git-loader': 8.0.3(graphql@16.8.1) + '@graphql-tools/github-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/load': 8.0.0(graphql@16.8.1) + '@graphql-tools/prisma-loader': 8.0.2(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) '@whatwg-node/fetch': 0.8.8 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.3.3) debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.8.1 - graphql-config: 5.0.3(@types/node@20.12.12)(graphql@16.8.1)(typescript@5.4.5) + graphql-config: 5.0.3(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.0 @@ -1188,7 +1301,7 @@ packages: string-env-interpolation: 1.0.1 ts-log: 2.2.5 tslib: 2.6.2 - yaml: 2.4.2 + yaml: 2.3.4 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -1201,56 +1314,16 @@ packages: - utf-8-validate dev: true - /@graphql-codegen/client-preset@4.2.6(graphql@16.8.1): - resolution: {integrity: sha512-e7SzPb+nxNJfsD0uG+NSyzIeTtCXTouX5VThmcCoqGMDLgF5Lo7932B3HtZCvzmzqcXxRjJ81CmkA2LhlqIbCw==} + /@graphql-codegen/core@4.0.0(graphql@16.8.1): + resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} 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 dependencies: - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 - '@graphql-codegen/add': 5.0.2(graphql@16.8.1) - '@graphql-codegen/gql-tag-operations': 4.0.7(graphql@16.8.1) - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-codegen/typed-document-node': 5.0.7(graphql@16.8.1) - '@graphql-codegen/typescript': 4.0.7(graphql@16.8.1) - '@graphql-codegen/typescript-operations': 4.2.1(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) - '@graphql-tools/documents': 1.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-codegen/core@4.0.2(graphql@16.8.1): - resolution: {integrity: sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==} - 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 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-tools/schema': 10.0.3(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.6.2 - dev: true - - /@graphql-codegen/gql-tag-operations@4.0.7(graphql@16.8.1): - resolution: {integrity: sha512-2I69+IDC8pqAohH6cgKse/vPfJ/4TRTJX96PkAKz8S4RD54PUHtBmzCdBInIFEP/vQuH5mFUAaIKXXjznmGOsg==} - 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 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - auto-bind: 4.0.0 - graphql: 16.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - encoding - - supports-color + tslib: 2.5.3 dev: true /@graphql-codegen/import-types-preset@3.0.0(graphql@16.8.1): @@ -1297,49 +1370,33 @@ packages: tslib: 2.4.1 dev: true - /@graphql-codegen/plugin-helpers@5.0.4(graphql@16.8.1): - resolution: {integrity: sha512-MOIuHFNWUnFnqVmiXtrI+4UziMTYrcquljaI5f/T/Bc7oO7sXcfkAvgkNWEEi9xWreYwvuer3VHCuPI/lAFWbw==} + /@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.1): + resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} 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 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.8.1 import-from: 4.0.0 lodash: 4.17.21 - tslib: 2.6.2 + tslib: 2.5.3 dev: true - /@graphql-codegen/schema-ast@4.0.2(graphql@16.8.1): - resolution: {integrity: sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==} + /@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1): + resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} 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 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 - tslib: 2.6.2 + tslib: 2.5.3 dev: true - /@graphql-codegen/typed-document-node@5.0.7(graphql@16.8.1): - resolution: {integrity: sha512-rgFh96hAbNwPUxLVlRcNhGaw2+y7ZGx7giuETtdO8XzPasTQGWGRkZ3wXQ5UUiTX4X3eLmjnuoXYKT7HoxSznQ==} - 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 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) - auto-bind: 4.0.0 - change-case-all: 1.0.15 - graphql: 16.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-codegen/typescript-graphql-request@6.2.0(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1): - resolution: {integrity: sha512-nkp5tr4PrC/+2QkQqi+IB+bc7AavUnUvXPW8MC93HZRvwfMGy6m2Oo7b9JCPZ3vhNpqT2VDWOn/zIZXKz6zJAw==} + /@graphql-codegen/typescript-graphql-request@6.0.1(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1): + resolution: {integrity: sha512-aScw7ICyscW7bYLh2HyjQU3geCAjvFy6sRIlzgdkeFvcKBdjCil69upkyZAyntnSno2C4ZoUv7sHOpyQ9hQmFQ==} engines: {node: '>= 16.0.0'} 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 @@ -1358,33 +1415,33 @@ packages: - supports-color dev: true - /@graphql-codegen/typescript-operations@4.2.1(graphql@16.8.1): - resolution: {integrity: sha512-LhEPsaP+AI65zfK2j6CBAL4RT0bJL/rR9oRWlvwtHLX0t7YQr4CP4BXgvvej9brYdedAxHGPWeV1tPHy5/z9KQ==} + /@graphql-codegen/typescript-operations@4.0.1(graphql@16.8.1): + resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} 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 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-codegen/typescript': 4.0.7(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 - tslib: 2.6.2 + tslib: 2.5.3 transitivePeerDependencies: - encoding - supports-color dev: true - /@graphql-codegen/typescript@4.0.7(graphql@16.8.1): - resolution: {integrity: sha512-Gn+JNvQBJhBqH7s83piAJ6UeU/MTj9GXWFO9bdbl8PMLCAM1uFAtg04iHfkGCtDKXcUg5a3Dt/SZG85uk5KuhA==} + /@graphql-codegen/typescript@4.0.1(graphql@16.8.1): + resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) - '@graphql-codegen/schema-ast': 4.0.2(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-codegen/schema-ast': 4.0.0(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 - tslib: 2.6.2 + tslib: 2.5.3 transitivePeerDependencies: - encoding - supports-color @@ -1411,63 +1468,63 @@ packages: - supports-color dev: true - /@graphql-codegen/visitor-plugin-common@5.2.0(graphql@16.8.1): - resolution: {integrity: sha512-0p8AwmARaZCAlDFfQu6Sz+JV6SjbPDx3y2nNM7WAAf0au7Im/GpJ7Ke3xaIYBc1b2rTZ+DqSTJI/zomENGD9NA==} + /@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.1): + resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} 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 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/optimize': 2.0.0(graphql@16.8.1) - '@graphql-tools/relay-operation-optimizer': 7.0.1(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 graphql: 16.8.1 graphql-tag: 2.12.6(graphql@16.8.1) parse-filepath: 1.0.2 - tslib: 2.6.2 + tslib: 2.5.3 transitivePeerDependencies: - encoding - supports-color dev: true - /@graphql-tools/apollo-engine-loader@8.0.1(graphql@16.8.1): - resolution: {integrity: sha512-NaPeVjtrfbPXcl+MLQCJLWtqe2/E4bbAqcauEOQ+3sizw1Fc2CNmhHRF8a6W4D0ekvTRRXAMptXYgA2uConbrA==} + /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1): + resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@whatwg-node/fetch': 0.9.17 + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.14 graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: - encoding dev: true - /@graphql-tools/batch-execute@9.0.4(graphql@16.8.1): - resolution: {integrity: sha512-kkebDLXgDrep5Y0gK1RN3DMUlLqNhg60OAz0lTCqrYeja6DshxLtLkj+zV4mVbBA4mQOEoBmw6g1LZs3dA84/w==} + /@graphql-tools/batch-execute@9.0.2(graphql@16.8.1): + resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true - /@graphql-tools/code-file-loader@8.1.2(graphql@16.8.1): - resolution: {integrity: sha512-GrLzwl1QV2PT4X4TEEfuTmZYzIZHLqoTGBjczdUzSqgCCcqwWzLB3qrJxFQfI8e5s1qZ1bhpsO9NoMn7tvpmyA==} + /@graphql-tools/code-file-loader@8.0.3(graphql@16.8.1): + resolution: {integrity: sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.1(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 @@ -1476,107 +1533,96 @@ packages: - supports-color dev: true - /@graphql-tools/delegate@10.0.10(graphql@16.8.1): - resolution: {integrity: sha512-OOqsPRfGatQG0qMKG3sxtxHiRg7cA6OWMTuETDvwZCoOuxqCc17K+nt8GvaqptNJi2/wBgeH7pi7wA5QzgiG1g==} + /@graphql-tools/delegate@10.0.3(graphql@16.8.1): + resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/batch-execute': 9.0.4(graphql@16.8.1) - '@graphql-tools/executor': 1.2.6(graphql@16.8.1) - '@graphql-tools/schema': 10.0.3(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/batch-execute': 9.0.2(graphql@16.8.1) + '@graphql-tools/executor': 1.2.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 dev: true - /@graphql-tools/documents@1.0.0(graphql@16.8.1): - resolution: {integrity: sha512-rHGjX1vg/nZ2DKqRGfDPNC55CWZBMldEVcH+91BThRa6JeT80NqXknffLLEZLRUxyikCfkwMsk6xR3UNMqG0Rg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - graphql: 16.8.1 - lodash.sortby: 4.7.0 - tslib: 2.6.2 - dev: true - - /@graphql-tools/executor-graphql-ws@1.1.2(graphql@16.8.1): - resolution: {integrity: sha512-+9ZK0rychTH1LUv4iZqJ4ESbmULJMTsv3XlFooPUngpxZkk00q6LqHKJRrsLErmQrVaC7cwQCaRBJa0teK17Lg==} + /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1): + resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@types/ws': 8.5.10 + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@types/ws': 8.5.6 graphql: 16.8.1 - graphql-ws: 5.16.0(graphql@16.8.1) - isomorphic-ws: 5.0.0(ws@8.17.0) + graphql-ws: 5.14.2(graphql@16.8.1) + isomorphic-ws: 5.0.0(ws@8.14.2) tslib: 2.6.2 - ws: 8.17.0 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@graphql-tools/executor-http@1.0.9(@types/node@20.12.12)(graphql@16.8.1): - resolution: {integrity: sha512-+NXaZd2MWbbrWHqU4EhXcrDbogeiCDmEbrAN+rMn4Nu2okDjn2MTFDbTIab87oEubQCH4Te1wDkWPKrzXup7+Q==} + /@graphql-tools/executor-http@1.0.3(@types/node@20.10.4)(graphql@16.8.1): + resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/fetch': 0.9.17 + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/fetch': 0.9.14 extract-files: 11.0.0 graphql: 16.8.1 - meros: 1.3.0(@types/node@20.12.12) + meros: 1.3.0(@types/node@20.10.4) tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' dev: true - /@graphql-tools/executor-legacy-ws@1.0.6(graphql@16.8.1): - resolution: {integrity: sha512-lDSxz9VyyquOrvSuCCnld3256Hmd+QI2lkmkEv7d4mdzkxkK4ddAWW1geQiWrQvWmdsmcnGGlZ7gDGbhEExwqg==} + /@graphql-tools/executor-legacy-ws@1.0.4(graphql@16.8.1): + resolution: {integrity: sha512-b7aGuRekZDS+m3af3BIvMKxu15bmVPMt5eGQVuP2v5pxmbaPTh+iv5mx9b3Plt32z5Ke5tycBnNm5urSFtW8ng==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@types/ws': 8.5.10 + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@types/ws': 8.5.6 graphql: 16.8.1 - isomorphic-ws: 5.0.0(ws@8.17.0) + isomorphic-ws: 5.0.0(ws@8.14.2) tslib: 2.6.2 - ws: 8.17.0 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@graphql-tools/executor@1.2.6(graphql@16.8.1): - resolution: {integrity: sha512-+1kjfqzM5T2R+dCw7F4vdJ3CqG+fY/LYJyhNiWEFtq0ToLwYzR/KKyD8YuzTirEjSxWTVlcBh7endkx5n5F6ew==} + /@graphql-tools/executor@1.2.0(graphql@16.8.1): + resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) - '@repeaterjs/repeater': 3.0.6 + '@repeaterjs/repeater': 3.0.4 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true - /@graphql-tools/git-loader@8.0.6(graphql@16.8.1): - resolution: {integrity: sha512-FQFO4H5wHAmHVyuUQrjvPE8re3qJXt50TWHuzrK3dEaief7JosmlnkLMDMbMBwtwITz9u1Wpl6doPhT2GwKtlw==} + /@graphql-tools/git-loader@8.0.3(graphql@16.8.1): + resolution: {integrity: sha512-Iz9KbRUAkuOe8JGTS0qssyJ+D5Snle17W+z9anwWrLFrkBhHrRFUy5AdjZqgJuhls0x30QkZBnnCtnHDBdQ4nA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.1(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 is-glob: 4.0.3 micromatch: 4.0.5 @@ -1586,17 +1632,17 @@ packages: - supports-color dev: true - /@graphql-tools/github-loader@8.0.1(@types/node@20.12.12)(graphql@16.8.1): - resolution: {integrity: sha512-W4dFLQJ5GtKGltvh/u1apWRFKBQOsDzFxO9cJkOYZj1VzHCpRF43uLST4VbCfWve+AwBqOuKr7YgkHoxpRMkcg==} + /@graphql-tools/github-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1): + resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 1.0.9(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/graphql-tag-pluck': 8.3.1(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@whatwg-node/fetch': 0.9.17 + '@graphql-tools/executor-http': 1.0.3(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.14 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 @@ -1606,83 +1652,83 @@ packages: - supports-color dev: true - /@graphql-tools/graphql-file-loader@8.0.1(graphql@16.8.1): - resolution: {integrity: sha512-7gswMqWBabTSmqbaNyWSmRRpStWlcCkBc73E6NZNlh4YNuiyKOwbvSkOUYFOqFMfEL+cFsXgAvr87Vz4XrYSbA==} + /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.1): + resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 7.0.1(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/import': 7.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 dev: true - /@graphql-tools/graphql-tag-pluck@8.3.1(graphql@16.8.1): - resolution: {integrity: sha512-ujits9tMqtWQQq4FI4+qnVPpJvSEn7ogKtyN/gfNT+ErIn6z1e4gyVGQpTK5sgAUXq1lW4gU/5fkFFC5/sL2rQ==} + /@graphql-tools/graphql-tag-pluck@8.1.0(graphql@16.8.1): + resolution: {integrity: sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@babel/core': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.0 + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: true - /@graphql-tools/import@7.0.1(graphql@16.8.1): - resolution: {integrity: sha512-935uAjAS8UAeXThqHfYVr4HEAp6nHJ2sximZKO1RzUTq5WoALMAhhGARl0+ecm6X+cqNUwIChJbjtaa6P/ML0w==} + /@graphql-tools/import@7.0.0(graphql@16.8.1): + resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 resolve-from: 5.0.0 tslib: 2.6.2 dev: true - /@graphql-tools/json-file-loader@8.0.1(graphql@16.8.1): - resolution: {integrity: sha512-lAy2VqxDAHjVyqeJonCP6TUemrpYdDuKt25a10X6zY2Yn3iFYGnuIDQ64cv3ytyGY6KPyPB+Kp+ZfOkNDG3FQA==} + /@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1): + resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 dev: true - /@graphql-tools/load@8.0.2(graphql@16.8.1): - resolution: {integrity: sha512-S+E/cmyVmJ3CuCNfDuNF2EyovTwdWfQScXv/2gmvJOti2rGD8jTt9GYVzXaxhblLivQR9sBUCNZu/w7j7aXUCA==} + /@graphql-tools/load@8.0.0(graphql@16.8.1): + resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 10.0.3(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 p-limit: 3.1.0 tslib: 2.6.2 dev: true - /@graphql-tools/merge@9.0.4(graphql@16.8.1): - resolution: {integrity: sha512-MivbDLUQ+4Q8G/Hp/9V72hbn810IJDEZQ57F01sHnlrrijyadibfVhaQfW/pNH+9T/l8ySZpaR/DpL5i+ruZ+g==} + /@graphql-tools/merge@9.0.0(graphql@16.8.1): + resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 dev: true @@ -1706,31 +1752,27 @@ packages: tslib: 2.6.2 dev: true - /@graphql-tools/prisma-loader@8.0.4(@types/node@20.12.12)(graphql@16.8.1): - resolution: {integrity: sha512-hqKPlw8bOu/GRqtYr0+dINAI13HinTVYBDqhwGAPIFmLr5s+qKskzgCiwbsckdrb5LWVFmVZc+UXn80OGiyBzg==} + /@graphql-tools/prisma-loader@8.0.2(@types/node@20.10.4)(graphql@16.8.1): + resolution: {integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@types/js-yaml': 4.0.9 - '@whatwg-node/fetch': 0.9.17 + '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@types/js-yaml': 4.0.6 + '@types/json-stable-stringify': 1.0.34 + '@whatwg-node/fetch': 0.9.14 chalk: 4.1.2 debug: 4.3.4 - dotenv: 16.4.5 + dotenv: 16.3.1 graphql: 16.8.1 graphql-request: 6.1.0(graphql@16.8.1) -<<<<<<< HEAD http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 jose: 5.2.3 -======= - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - jose: 5.3.0 ->>>>>>> main js-yaml: 4.1.0 + json-stable-stringify: 1.0.2 lodash: 4.17.21 scuid: 1.1.0 tslib: 2.6.2 @@ -1757,14 +1799,14 @@ packages: - supports-color dev: true - /@graphql-tools/relay-operation-optimizer@7.0.1(graphql@16.8.1): - resolution: {integrity: sha512-y0ZrQ/iyqWZlsS/xrJfSir3TbVYJTYmMOu4TaSz6F4FRDTQ3ie43BlKkhf04rC28pnUOS4BO9pDcAo1D30l5+A==} + /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1): + resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: @@ -1772,39 +1814,39 @@ packages: - supports-color dev: true - /@graphql-tools/schema@10.0.3(graphql@16.8.1): - resolution: {integrity: sha512-p28Oh9EcOna6i0yLaCFOnkcBDQECVf3SCexT6ktb86QNj9idnkhI+tCxnwZDh58Qvjd2nURdkbevvoZkvxzCog==} + /@graphql-tools/schema@10.0.0(graphql@16.8.1): + resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 9.0.4(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true - /@graphql-tools/url-loader@8.0.2(@types/node@20.12.12)(graphql@16.8.1): - resolution: {integrity: sha512-1dKp2K8UuFn7DFo1qX5c1cyazQv2h2ICwA9esHblEqCYrgf69Nk8N7SODmsfWg94OEaI74IqMoM12t7eIGwFzQ==} + /@graphql-tools/url-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1): + resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - '@graphql-tools/executor-graphql-ws': 1.1.2(graphql@16.8.1) - '@graphql-tools/executor-http': 1.0.9(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/executor-legacy-ws': 1.0.6(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - '@graphql-tools/wrap': 10.0.5(graphql@16.8.1) - '@types/ws': 8.5.10 - '@whatwg-node/fetch': 0.9.17 + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.3(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 1.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + '@types/ws': 8.5.6 + '@whatwg-node/fetch': 0.9.14 graphql: 16.8.1 - isomorphic-ws: 5.0.0(ws@8.17.0) + isomorphic-ws: 5.0.0(ws@8.14.2) tslib: 2.6.2 value-or-promise: 1.0.12 - ws: 8.17.0 + ws: 8.14.2 transitivePeerDependencies: - '@types/node' - bufferutil @@ -1812,15 +1854,15 @@ packages: - utf-8-validate dev: true - /@graphql-tools/utils@10.2.0(graphql@16.8.1): - resolution: {integrity: sha512-HYV7dO6pNA2nGKawygaBpk8y+vXOUjjzzO43W/Kb7EPRmXUEQKjHxPYRvQbiF72u1N3XxwGK5jnnFk9WVhUwYw==} + /@graphql-tools/utils@10.0.8(graphql@16.8.1): + resolution: {integrity: sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) cross-inspect: 1.0.0 - dset: 3.1.3 + dset: 3.1.2 graphql: 16.8.1 tslib: 2.6.2 dev: true @@ -1844,15 +1886,15 @@ packages: tslib: 2.6.2 dev: true - /@graphql-tools/wrap@10.0.5(graphql@16.8.1): - resolution: {integrity: sha512-Cbr5aYjr3HkwdPvetZp1cpDWTGdD1Owgsb3z/ClzhmrboiK86EnQDxDvOJiQkDCPWE9lNBwj8Y4HfxroY0D9DQ==} + /@graphql-tools/wrap@10.0.1(graphql@16.8.1): + resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/delegate': 10.0.10(graphql@16.8.1) - '@graphql-tools/schema': 10.0.3(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 @@ -1866,11 +1908,11 @@ packages: graphql: 16.8.1 dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.3 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1882,20 +1924,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - dev: true - - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@istanbuljs/load-nyc-config@1.1.0: @@ -1919,7 +1949,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1940,14 +1970,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1975,7 +2005,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 jest-mock: 29.7.0 dev: true @@ -2002,7 +2032,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.12 + '@types/node': 20.10.4 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -2034,25 +2064,25 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.12 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 20.10.4 chalk: 4.1.2 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 - istanbul-lib-report: 3.0.1 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 6.0.1 + istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.1.5 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color dev: true @@ -2068,7 +2098,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -2079,8 +2109,8 @@ packages: dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 dev: true /@jest/test-sequencer@29.7.0: @@ -2097,9 +2127,9 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -2109,7 +2139,7 @@ packages: jest-regex-util: 29.6.3 jest-util: 29.7.0 micromatch: 4.0.5 - pirates: 4.0.6 + pirates: 4.0.5 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: @@ -2121,61 +2151,66 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.12 - '@types/yargs': 17.0.32 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 20.10.4 + '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.2.1 + '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@kamilkisiela/fast-url-parser@1.1.4: - resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==} - dev: true - /@noble/curves@1.4.0: resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} dependencies: @@ -2205,11 +2240,11 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.15.0 dev: true - /@peculiar/asn1-schema@2.3.8: - resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} + /@peculiar/asn1-schema@2.3.6: + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} dependencies: asn1js: 3.0.5 pvtsutils: 1.3.5 @@ -2223,150 +2258,119 @@ packages: tslib: 2.6.2 dev: true - /@peculiar/webcrypto@1.4.6: - resolution: {integrity: sha512-YBcMfqNSwn3SujUJvAaySy5tlYbYm6tVt9SKoXu8BaTdKGROiJDgPR3TXpZdAKUfklzm3lRapJEAltiMQtBgZg==} + /@peculiar/webcrypto@1.4.3: + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} engines: {node: '>=10.12.0'} dependencies: - '@peculiar/asn1-schema': 2.3.8 + '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.5 tslib: 2.6.2 - webcrypto-core: 1.7.9 + webcrypto-core: 1.7.7 dev: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - - /@repeaterjs/repeater@3.0.6: - resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + /@repeaterjs/repeater@3.0.4: + resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} dev: true - /@rollup/rollup-android-arm-eabi@4.17.2: - resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + /@rollup/rollup-android-arm-eabi@4.8.0: + resolution: {integrity: sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.17.2: - resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + /@rollup/rollup-android-arm64@4.8.0: + resolution: {integrity: sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.17.2: - resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + /@rollup/rollup-darwin-arm64@4.8.0: + resolution: {integrity: sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.17.2: - resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + /@rollup/rollup-darwin-x64@4.8.0: + resolution: {integrity: sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.17.2: - resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-musleabihf@4.17.2: - resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + /@rollup/rollup-linux-arm-gnueabihf@4.8.0: + resolution: {integrity: sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.17.2: - resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + /@rollup/rollup-linux-arm64-gnu@4.8.0: + resolution: {integrity: sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.17.2: - resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + /@rollup/rollup-linux-arm64-musl@4.8.0: + resolution: {integrity: sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: - resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-riscv64-gnu@4.17.2: - resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + /@rollup/rollup-linux-riscv64-gnu@4.8.0: + resolution: {integrity: sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.17.2: - resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-gnu@4.17.2: - resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + /@rollup/rollup-linux-x64-gnu@4.8.0: + resolution: {integrity: sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.17.2: - resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + /@rollup/rollup-linux-x64-musl@4.8.0: + resolution: {integrity: sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.17.2: - resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + /@rollup/rollup-win32-arm64-msvc@4.8.0: + resolution: {integrity: sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.17.2: - resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + /@rollup/rollup-win32-ia32-msvc@4.8.0: + resolution: {integrity: sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.17.2: - resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + /@rollup/rollup-win32-x64-msvc@4.8.0: + resolution: {integrity: sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==} cpu: [x64] os: [win32] requiresBuild: true @@ -2401,8 +2405,8 @@ packages: engines: {node: '>=10'} dev: false - /@sinonjs/commons@3.0.1: - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: type-detect: 4.0.8 dev: true @@ -2410,7 +2414,7 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.1 + '@sinonjs/commons': 3.0.0 dev: true /@szmarczak/http-timer@4.0.6: @@ -2420,8 +2424,8 @@ packages: defer-to-connect: 2.0.1 dev: false - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true /@tsconfig/node12@1.0.11: @@ -2436,33 +2440,33 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + /@types/babel__generator@7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + /@types/babel__template@7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 dev: true - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + /@types/babel__traverse@7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.23.0 dev: true /@types/base-64@1.0.2: @@ -2479,13 +2483,12 @@ packages: /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: - '@types/http-cache-semantics': 4.0.4 + '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 20.12.12 - '@types/responselike': 1.0.3 + '@types/node': 20.10.4 + '@types/responselike': 1.0.0 dev: false -<<<<<<< HEAD /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: @@ -2494,27 +2497,22 @@ packages: /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} -======= - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} ->>>>>>> main dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 + '@types/eslint': 8.44.1 + '@types/estree': 1.0.1 dev: true - /@types/eslint@8.56.10: - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + /@types/eslint@8.44.1: + resolution: {integrity: sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==} dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true -<<<<<<< HEAD /@types/express-serve-static-core@4.19.0: resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: @@ -2535,56 +2533,51 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} -======= - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} ->>>>>>> main dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 dev: true - /@types/http-cache-semantics@4.0.4: - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + /@types/http-cache-semantics@4.0.1: + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: false -<<<<<<< HEAD /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} dev: false /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} -======= - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} ->>>>>>> main dev: true - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + /@types/istanbul-lib-report@3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: - '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-lib-coverage': 2.0.4 dev: true - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + /@types/istanbul-reports@3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: - '@types/istanbul-lib-report': 3.0.3 + '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + /@types/jest@29.5.11: + resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 dev: true - /@types/js-yaml@4.0.9: - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + /@types/js-yaml@4.0.6: + resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==} + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + /@types/json-stable-stringify@1.0.34: + resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} dev: true /@types/json5@0.0.29: @@ -2599,10 +2592,9 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 dev: false -<<<<<<< HEAD /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: false @@ -2622,24 +2614,14 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} -======= - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} dependencies: - undici-types: 5.26.5 - - /@types/responselike@1.0.3: - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} ->>>>>>> main - dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 dev: false - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true -<<<<<<< HEAD /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: @@ -2657,30 +2639,26 @@ packages: /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} -======= - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} ->>>>>>> main dev: true - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + /@types/ws@8.5.6: + resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 dev: true - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + /@types/yargs-parser@21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + /@types/yargs@17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: - '@types/yargs-parser': 21.0.3 + '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2691,25 +2669,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 8.55.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.2.4 natural-compare: 1.4.0 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2718,27 +2696,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.5 + eslint: 8.55.0 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2747,23 +2725,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + eslint: 8.55.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2771,43 +2749,42 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.2 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.55.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2815,8 +2792,8 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@webassemblyjs/ast@1.12.1: - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 @@ -2830,8 +2807,8 @@ packages: resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} dev: true - /@webassemblyjs/helper-buffer@1.12.1: - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} dev: true /@webassemblyjs/helper-numbers@1.11.6: @@ -2846,13 +2823,13 @@ packages: resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} dev: true - /@webassemblyjs/helper-wasm-section@1.12.1: - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-gen': 1.11.6 dev: true /@webassemblyjs/ieee754@1.11.6: @@ -2871,42 +2848,42 @@ packages: resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} dev: true - /@webassemblyjs/wasm-edit@1.12.1: - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 dev: true - /@webassemblyjs/wasm-gen@1.12.1: - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt@1.12.1: - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 dev: true - /@webassemblyjs/wasm-parser@1.12.1: - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 @@ -2914,10 +2891,10 @@ packages: '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wast-printer@1.12.1: - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 dev: true @@ -2933,19 +2910,19 @@ packages: /@whatwg-node/fetch@0.8.8: resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} dependencies: - '@peculiar/webcrypto': 1.4.6 + '@peculiar/webcrypto': 1.4.3 '@whatwg-node/node-fetch': 0.3.6 busboy: 1.6.0 urlpattern-polyfill: 8.0.2 - web-streams-polyfill: 3.3.3 + web-streams-polyfill: 3.2.1 dev: true - /@whatwg-node/fetch@0.9.17: - resolution: {integrity: sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==} + /@whatwg-node/fetch@0.9.14: + resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==} engines: {node: '>=16.0.0'} dependencies: - '@whatwg-node/node-fetch': 0.5.11 - urlpattern-polyfill: 10.0.0 + '@whatwg-node/node-fetch': 0.5.0 + urlpattern-polyfill: 9.0.0 dev: true /@whatwg-node/node-fetch@0.3.6: @@ -2958,14 +2935,14 @@ packages: tslib: 2.6.2 dev: true - /@whatwg-node/node-fetch@0.5.11: - resolution: {integrity: sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==} + /@whatwg-node/node-fetch@0.5.0: + resolution: {integrity: sha512-q76lDAafvHNGWedNAVHrz/EyYTS8qwRLcwne8SJQdRN5P3HydxU6XROFvJfTML6KZXQX2FDdGY4/SnaNyd7M0Q==} engines: {node: '>=16.0.0'} dependencies: - '@kamilkisiela/fast-url-parser': 1.1.4 '@whatwg-node/events': 0.1.1 busboy: 1.6.0 fast-querystring: 1.1.2 + fast-url-parser: 1.1.3 tslib: 2.6.2 dev: true @@ -2977,35 +2954,35 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /acorn-import-assertions@1.9.0(acorn@8.11.3): + /acorn-import-assertions@1.9.0(acorn@8.10.0): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.11.3 + acorn: 8.10.0 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.10.0 dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: debug: 4.3.4 @@ -3050,13 +3027,8 @@ packages: engines: {node: '>=8'} dev: true - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - - /ansi-sequence-parser@1.1.1: - resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + /ansi-sequence-parser@1.1.0: + resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} dev: true /ansi-styles@3.2.1: @@ -3078,11 +3050,6 @@ packages: engines: {node: '>=10'} dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true - /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true @@ -3109,23 +3076,21 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bind: 1.0.2 + is-array-buffer: 3.0.2 dev: true - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -3134,50 +3099,47 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 dev: true /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true /asap@2.0.6: @@ -3207,11 +3169,9 @@ packages: engines: {node: '>=8'} dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 dev: true /axios@1.6.2: @@ -3224,17 +3184,17 @@ packages: - debug dev: false - /babel-jest@29.7.0(@babel/core@7.24.5): + /babel-jest@29.7.0(@babel/core@7.22.5): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.5) + babel-preset-jest: 29.6.3(@babel/core@7.22.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3246,7 +3206,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -3259,80 +3219,80 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.1 dev: true /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.5): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) - dev: true - - /babel-preset-fbjs@3.4.0(@babel/core@7.24.5): + '@babel/core': 7.22.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + dev: true + + /babel-preset-fbjs@3.4.0(@babel/core@7.22.5): resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 dev: true - /babel-preset-jest@29.6.3(@babel/core@7.24.5): + /babel-preset-jest@29.6.3(@babel/core@7.22.5): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true /balanced-match@1.0.2: @@ -3343,8 +3303,8 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true @@ -3376,15 +3336,15 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001620 - electron-to-chromium: 1.4.773 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) + caniuse-lite: 1.0.30001517 + electron-to-chromium: 1.4.467 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.9) dev: true /bs-logger@0.2.6: @@ -3415,13 +3375,13 @@ packages: ieee754: 1.2.1 dev: true - /bundle-require@4.1.0(esbuild@0.19.12): - resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==} + /bundle-require@4.0.2(esbuild@0.19.9): + resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' dependencies: - esbuild: 0.19.12 + esbuild: 0.19.9 load-tsconfig: 0.2.5 dev: true @@ -3449,21 +3409,17 @@ packages: clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.1 - keyv: 4.5.4 + keyv: 4.5.3 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 dev: false - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + function-bind: 1.1.1 + get-intrinsic: 1.2.1 dev: true /callsites@3.1.0: @@ -3488,8 +3444,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001620: - resolution: {integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==} + /caniuse-lite@1.0.30001517: + resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} dev: true /capital-case@1.0.4: @@ -3573,8 +3529,8 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 @@ -3585,7 +3541,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.3 + fsevents: 2.3.2 dev: true /chrome-trace-event@1.0.3: @@ -3593,13 +3549,13 @@ packages: engines: {node: '>=6.0'} dev: true - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.3.1: - resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + /cjs-module-lexer@1.2.2: + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true /clean-stack@2.2.0: @@ -3614,8 +3570,8 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} engines: {node: '>=6'} dev: true @@ -3665,8 +3621,8 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + /collect-v8-coverage@1.0.1: + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true /color-convert@1.9.3: @@ -3731,11 +3687,15 @@ packages: upper-case: 2.0.2 dev: true + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cosmiconfig@8.3.6(typescript@5.4.5): + /cosmiconfig@8.3.6(typescript@5.3.3): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3748,10 +3708,10 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.4.5 + typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3760,7 +3720,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3798,33 +3758,6 @@ packages: which: 2.0.2 dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - /dataloader@2.2.2: resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} dev: true @@ -3841,7 +3774,7 @@ packages: supports-color: optional: true dependencies: - ms: 2.1.3 + ms: 2.1.2 dev: true /debug@4.3.4: @@ -3867,8 +3800,8 @@ packages: mimic-response: 3.1.0 dev: false - /dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -3896,21 +3829,11 @@ packages: engines: {node: '>=10'} dev: false - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 + has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: true @@ -3972,17 +3895,16 @@ packages: tslib: 2.6.2 dev: true - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: true - /dset@3.1.3: - resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} + /dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} engines: {node: '>=4'} dev: true -<<<<<<< HEAD /ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: @@ -3991,14 +3913,6 @@ packages: /electron-to-chromium@1.4.467: resolution: {integrity: sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg==} -======= - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true - - /electron-to-chromium@1.4.773: - resolution: {integrity: sha512-87eHF+h3PlCRwbxVEAw9KtK3v7lWfc/sUDr0W76955AdYTG4bV/k0zrl585Qnj/skRMH2qOSiE+kqMeOQ+LOpw==} ->>>>>>> main dev: true /emittery@0.13.1: @@ -4010,18 +3924,14 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true - /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: false - /enhanced-resolve@5.16.1: - resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -4034,94 +3944,68 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 + is-negative-zero: 2.0.2 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 + is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.13 + is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.12.3 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - dev: true - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + which-typed-array: 1.1.11 dev: true - /es-module-lexer@1.5.2: - resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} + /es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - es-errors: 1.3.0 + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + /es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: - hasown: 2.0.2 + has: 1.0.3 dev: true /es-to-primitive@1.2.1: @@ -4133,39 +4017,38 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + /esbuild@0.19.9: + resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + '@esbuild/android-arm': 0.19.9 + '@esbuild/android-arm64': 0.19.9 + '@esbuild/android-x64': 0.19.9 + '@esbuild/darwin-arm64': 0.19.9 + '@esbuild/darwin-x64': 0.19.9 + '@esbuild/freebsd-arm64': 0.19.9 + '@esbuild/freebsd-x64': 0.19.9 + '@esbuild/linux-arm': 0.19.9 + '@esbuild/linux-arm64': 0.19.9 + '@esbuild/linux-ia32': 0.19.9 + '@esbuild/linux-loong64': 0.19.9 + '@esbuild/linux-mips64el': 0.19.9 + '@esbuild/linux-ppc64': 0.19.9 + '@esbuild/linux-riscv64': 0.19.9 + '@esbuild/linux-s390x': 0.19.9 + '@esbuild/linux-x64': 0.19.9 + '@esbuild/netbsd-x64': 0.19.9 + '@esbuild/openbsd-x64': 0.19.9 + '@esbuild/sunos-x64': 0.19.9 + '@esbuild/win32-arm64': 0.19.9 + '@esbuild/win32-ia32': 0.19.9 + '@esbuild/win32-x64': 0.19.9 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true @@ -4184,7 +4067,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0): resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -4192,14 +4075,14 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) - object.assign: 4.1.5 - object.entries: 1.1.8 + eslint: 8.55.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) + object.assign: 4.1.4 + object.entries: 1.1.6 semver: 6.3.1 dev: true - /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.21.0)(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.0)(eslint@8.55.0): resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 @@ -4207,20 +4090,20 @@ packages: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + eslint: 8.55.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@8.55.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.55.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -4233,8 +4116,8 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4254,16 +4137,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.57.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4272,25 +4155,25 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.2 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 semver: 6.3.1 - tsconfig-paths: 3.15.0 + tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4318,16 +4201,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.55.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -4346,9 +4229,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 + globals: 13.20.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.2.4 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4358,7 +4241,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.4 + optionator: 0.9.3 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -4369,8 +4252,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 dev: true @@ -4471,8 +4354,8 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + /fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4502,8 +4385,8 @@ packages: punycode: 1.4.1 dev: true - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true @@ -4527,7 +4410,7 @@ packages: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.37 + ua-parser-js: 1.0.36 transitivePeerDependencies: - encoding dev: true @@ -4543,7 +4426,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.2.0 + flat-cache: 3.0.4 dev: true /fill-range@7.0.1: @@ -4569,17 +4452,16 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.3.1 - keyv: 4.5.4 + flatted: 3.2.7 rimraf: 3.0.2 dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true /follow-redirects@1.15.6: @@ -4598,14 +4480,6 @@ packages: is-callable: 1.2.7 dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - dev: true - /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -4619,25 +4493,29 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true dev: true optional: true + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 functions-have-names: 1.2.3 dev: true @@ -4655,15 +4533,13 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.2 dev: true /get-package-type@0.1.0: @@ -4683,13 +4559,12 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 dev: true /glob-parent@5.1.2: @@ -4710,16 +4585,15 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.15: - resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} - engines: {node: '>=16 || 14 >=14.18'} - hasBin: true + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.1.1 - path-scurry: 1.11.1 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 dev: true /glob@7.2.3: @@ -4738,19 +4612,18 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 + define-properties: 1.2.0 dev: true /globby@11.1.0: @@ -4759,8 +4632,8 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 + fast-glob: 3.2.12 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -4768,7 +4641,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.1 dev: true /got@11.8.6: @@ -4778,7 +4651,7 @@ packages: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 + '@types/responselike': 1.0.0 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -4796,7 +4669,7 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql-config@5.0.3(@types/node@20.12.12)(graphql@16.8.1)(typescript@5.4.5): + /graphql-config@5.0.3(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3): resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} engines: {node: '>= 16.0.0'} peerDependencies: @@ -4806,13 +4679,13 @@ packages: cosmiconfig-toml-loader: optional: true dependencies: - '@graphql-tools/graphql-file-loader': 8.0.1(graphql@16.8.1) - '@graphql-tools/json-file-loader': 8.0.1(graphql@16.8.1) - '@graphql-tools/load': 8.0.2(graphql@16.8.1) - '@graphql-tools/merge': 9.0.4(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.12)(graphql@16.8.1) - '@graphql-tools/utils': 10.2.0(graphql@16.8.1) - cosmiconfig: 8.3.6(typescript@5.4.5) + '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/load': 8.0.0(graphql@16.8.1) + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + cosmiconfig: 8.3.6(typescript@5.3.3) graphql: 16.8.1 jiti: 1.21.0 minimatch: 4.2.3 @@ -4848,8 +4721,8 @@ packages: tslib: 2.6.2 dev: true - /graphql-ws@5.16.0(graphql@16.8.1): - resolution: {integrity: sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==} + /graphql-ws@5.14.2(graphql@16.8.1): + resolution: {integrity: sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==} engines: {node: '>=10'} peerDependencies: graphql: '>=0.11 <=16' @@ -4876,14 +4749,14 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - es-define-property: 1.0.0 + get-intrinsic: 1.2.1 dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true @@ -4892,15 +4765,22 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -4921,11 +4801,11 @@ packages: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: false - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.1 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -4939,11 +4819,11 @@ packages: resolve-alpn: 1.2.1 dev: false - /https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.1 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -4965,8 +4845,8 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true @@ -5039,13 +4919,13 @@ packages: wrap-ansi: 6.2.0 dev: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 dev: true /invariant@2.2.4: @@ -5062,12 +4942,12 @@ packages: is-windows: 1.0.2 dev: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 dev: true /is-arrayish@0.2.1: @@ -5084,15 +4964,15 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.3.0 + binary-extensions: 2.2.0 dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-callable@1.2.7: @@ -5100,24 +4980,23 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: - hasown: 2.0.2 + has: 1.0.3 dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - is-typed-array: 1.1.13 + hasown: 2.0.0 dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-extglob@2.1.1: @@ -5153,8 +5032,8 @@ packages: tslib: 2.6.2 dev: true - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true @@ -5162,7 +5041,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-number@7.0.0: @@ -5179,8 +5058,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-relative@1.0.0: @@ -5190,11 +5069,10 @@ packages: is-unc-path: 1.0.0 dev: true - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 dev: true /is-stream@2.0.1: @@ -5206,7 +5084,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-symbol@1.0.4: @@ -5216,11 +5094,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.11 dev: true /is-unc-path@1.0.0: @@ -5244,7 +5122,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 dev: true /is-windows@1.0.2: @@ -5260,16 +5138,16 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-ws@5.0.0(ws@8.17.0): + /isomorphic-ws@5.0.0(ws@8.14.2): resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: ws: '*' dependencies: - ws: 8.17.0 + ws: 8.14.2 dev: true - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + /istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true @@ -5277,34 +5155,34 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/core': 7.22.5 + '@babel/parser': 7.23.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/core': 7.22.5 + '@babel/parser': 7.23.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.2 + istanbul-lib-coverage: 3.2.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + /istanbul-lib-report@3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 supports-color: 7.2.0 dev: true @@ -5313,27 +5191,18 @@ packages: engines: {node: '>=10'} dependencies: debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 + istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + /istanbul-reports@3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + istanbul-lib-report: 3.0.0 dev: true /jest-changed-files@29.7.0: @@ -5353,10 +5222,10 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.3 + dedent: 1.5.1 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -5366,7 +5235,7 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.1.0 + pure-rand: 6.0.4 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -5374,7 +5243,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.12.12)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5388,10 +5257,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5402,7 +5271,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.12.12)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5414,13 +5283,13 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 - babel-jest: 29.7.0(@babel/core@7.24.5) + '@types/node': 20.10.4 + babel-jest: 29.7.0(@babel/core@7.22.5) chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -5437,7 +5306,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5478,7 +5347,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -5493,8 +5362,8 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.12 + '@types/graceful-fs': 4.1.6 + '@types/node': 20.10.4 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5504,7 +5373,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.3 + fsevents: 2.3.2 dev: true /jest-leak-detector@29.7.0: @@ -5529,9 +5398,9 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.22.13 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 + '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 @@ -5545,7 +5414,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 jest-util: 29.7.0 dev: true @@ -5586,7 +5455,7 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.8 + resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 dev: true @@ -5600,7 +5469,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -5631,10 +5500,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 chalk: 4.1.2 - cjs-module-lexer: 1.3.1 - collect-v8-coverage: 1.0.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 @@ -5654,15 +5523,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.5 - '@babel/generator': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/core': 7.22.5 + '@babel/generator': 7.23.0 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.23.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -5673,7 +5542,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.2 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -5683,9 +5552,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -5708,7 +5577,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.12 + '@types/node': 20.10.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5720,7 +5589,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -5729,13 +5598,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.12.12)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5748,7 +5617,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5761,18 +5630,12 @@ packages: hasBin: true dev: true -<<<<<<< HEAD /jose@4.15.5: resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} dev: false /jose@5.2.3: resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} -======= - /jose@5.3.0: - resolution: {integrity: sha512-IChe9AtAE79ru084ow8jzkN2lNrG3Ntfiv65Cvj9uOCE2m5LNsdHG+9EbxWxAoWRF9TgDOqLN5jm08++owDVRg==} - dev: true ->>>>>>> main /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} @@ -5810,6 +5673,7 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5823,6 +5687,12 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /json-stable-stringify@1.0.2: + resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} + dependencies: + jsonify: 0.0.1 + dev: true + /json-to-pretty-yaml@1.2.2: resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} engines: {node: '>= 0.2.0'} @@ -5844,11 +5714,10 @@ packages: hasBin: true dev: true - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true -<<<<<<< HEAD /jsonify@0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} dev: true @@ -5905,12 +5774,9 @@ packages: /keyv@4.5.3: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} -======= - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} ->>>>>>> main dependencies: json-buffer: 3.0.1 + dev: false /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} @@ -5930,9 +5796,9 @@ packages: type-check: 0.4.0 dev: true - /lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} - engines: {node: '>=14'} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} dev: true /limiter@1.1.5: @@ -5956,7 +5822,7 @@ packages: colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.1 + rfdc: 1.3.0 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -6054,7 +5920,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 dev: true @@ -6076,18 +5941,12 @@ packages: engines: {node: '>=8'} dev: false - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} - dev: true - /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true -<<<<<<< HEAD /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -6101,17 +5960,15 @@ packages: lru-cache: 6.0.0 dev: false -======= ->>>>>>> main /lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: - semver: 7.6.2 + semver: 6.3.1 dev: true /make-error@1.3.6: @@ -6144,7 +6001,7 @@ packages: engines: {node: '>= 8'} dev: true - /meros@1.3.0(@types/node@20.12.12): + /meros@1.3.0(@types/node@20.10.4): resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} engines: {node: '>=13'} peerDependencies: @@ -6153,7 +6010,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.12.12 + '@types/node': 20.10.4 dev: true /micromatch@4.0.5: @@ -6209,29 +6066,13 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@7.1.1: - resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true @@ -6275,8 +6116,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} dev: true /normalize-path@2.1.1: @@ -6312,8 +6153,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true /object-keys@1.1.1: @@ -6321,51 +6162,50 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 + call-bind: 1.0.2 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + /object.entries@1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /once@1.4.0: @@ -6380,16 +6220,16 @@ packages: mimic-fn: 2.1.0 dev: true - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.5 dev: true /ora@5.4.1: @@ -6399,7 +6239,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.2 + cli-spinners: 2.9.1 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -6484,7 +6324,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6535,21 +6375,13 @@ packages: path-root-regex: 0.1.2 dev: true - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - dependencies: - lru-cache: 10.2.2 - minipass: 7.1.1 - dev: true - /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true /picomatch@2.3.1: @@ -6557,8 +6389,8 @@ packages: engines: {node: '>=8.6'} dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + /pirates@4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true @@ -6569,22 +6401,12 @@ packages: find-up: 4.1.0 dev: true -<<<<<<< HEAD /poseidon-lite@0.2.0: resolution: {integrity: sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==} dev: false /postcss-load-config@4.0.1(ts-node@10.9.2): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} -======= - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true - - /postcss-load-config@4.0.2(ts-node@10.9.2): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} ->>>>>>> main engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' @@ -6595,9 +6417,9 @@ packages: ts-node: optional: true dependencies: - lilconfig: 3.1.1 - ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) - yaml: 2.4.2 + lilconfig: 2.1.0 + ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + yaml: 2.3.4 dev: true /prelude-ls@1.2.1: @@ -6605,8 +6427,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} hasBin: true dev: true @@ -6617,7 +6439,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.3.1 + react-is: 18.2.0 dev: true /promise@7.3.1: @@ -6649,13 +6471,13 @@ packages: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + /pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true /pvtsutils@1.3.5: @@ -6684,8 +6506,8 @@ packages: safe-buffer: 5.2.1 dev: true - /react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true /readable-stream@3.6.2: @@ -6704,24 +6526,23 @@ packages: picomatch: 2.3.1 dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} dev: true - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 dev: true /relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.23.1 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: @@ -6775,6 +6596,15 @@ packages: engines: {node: '>=10'} dev: true + /resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -6803,8 +6633,8 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + /rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} dev: true /rimraf@3.0.2: @@ -6814,30 +6644,25 @@ packages: glob: 7.2.3 dev: true - /rollup@4.17.2: - resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + /rollup@4.8.0: + resolution: {integrity: sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - dependencies: - '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.17.2 - '@rollup/rollup-android-arm64': 4.17.2 - '@rollup/rollup-darwin-arm64': 4.17.2 - '@rollup/rollup-darwin-x64': 4.17.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 - '@rollup/rollup-linux-arm-musleabihf': 4.17.2 - '@rollup/rollup-linux-arm64-gnu': 4.17.2 - '@rollup/rollup-linux-arm64-musl': 4.17.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 - '@rollup/rollup-linux-riscv64-gnu': 4.17.2 - '@rollup/rollup-linux-s390x-gnu': 4.17.2 - '@rollup/rollup-linux-x64-gnu': 4.17.2 - '@rollup/rollup-linux-x64-musl': 4.17.2 - '@rollup/rollup-win32-arm64-msvc': 4.17.2 - '@rollup/rollup-win32-ia32-msvc': 4.17.2 - '@rollup/rollup-win32-x64-msvc': 4.17.2 - fsevents: 2.3.3 + '@rollup/rollup-android-arm-eabi': 4.8.0 + '@rollup/rollup-android-arm64': 4.8.0 + '@rollup/rollup-darwin-arm64': 4.8.0 + '@rollup/rollup-darwin-x64': 4.8.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.8.0 + '@rollup/rollup-linux-arm64-gnu': 4.8.0 + '@rollup/rollup-linux-arm64-musl': 4.8.0 + '@rollup/rollup-linux-riscv64-gnu': 4.8.0 + '@rollup/rollup-linux-x64-gnu': 4.8.0 + '@rollup/rollup-linux-x64-musl': 4.8.0 + '@rollup/rollup-win32-arm64-msvc': 4.8.0 + '@rollup/rollup-win32-ia32-msvc': 4.8.0 + '@rollup/rollup-win32-x64-msvc': 4.8.0 + fsevents: 2.3.2 dev: true /run-async@2.4.1: @@ -6857,12 +6682,12 @@ packages: tslib: 2.6.2 dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -6871,12 +6696,11 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true @@ -6888,7 +6712,7 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.15 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true @@ -6902,10 +6726,12 @@ packages: hasBin: true dev: true - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true + dependencies: + lru-cache: 6.0.0 dev: true /sentence-case@3.0.4: @@ -6916,8 +6742,8 @@ packages: upper-case-first: 2.0.2 dev: true - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true @@ -6926,28 +6752,6 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - dev: true - - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true - /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true @@ -6968,34 +6772,27 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /shiki@0.14.7: - resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} + /shiki@0.14.3: + resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} dependencies: - ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.2.1 + ansi-sequence-parser: 1.1.0 + jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 dev: true - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - /signedsource@1.0.0: resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} dev: true @@ -7108,40 +6905,29 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - dev: true - - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /string_decoder@1.3.0: @@ -7157,13 +6943,6 @@ packages: ansi-regex: 5.0.1 dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -7184,17 +6963,17 @@ packages: engines: {node: '>=8'} dev: true - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} + /sucrase@3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + engines: {node: '>=8'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 - glob: 10.3.15 + glob: 7.1.6 lines-and-columns: 1.2.4 mz: 2.7.0 - pirates: 4.0.6 + pirates: 4.0.5 ts-interface-checker: 0.1.13 dev: true @@ -7235,8 +7014,8 @@ packages: engines: {node: '>=6'} dev: true - /terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.91.0): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + /terser-webpack-plugin@5.3.9(esbuild@0.19.9)(webpack@5.88.2): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -7251,22 +7030,22 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.19.12 + '@jridgewell/trace-mapping': 0.3.18 + esbuild: 0.19.9 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.31.0 - webpack: 5.91.0(esbuild@0.19.12) + serialize-javascript: 6.0.1 + terser: 5.19.2 + webpack: 5.88.2(esbuild@0.19.9) dev: true - /terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + /terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -7337,7 +7116,7 @@ packages: /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: - punycode: 2.3.1 + punycode: 2.3.0 dev: true /tree-kill@1.2.2: @@ -7345,22 +7124,22 @@ packages: hasBin: true dev: true - /ts-api-utils@1.3.0(typescript@5.4.5): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} + /ts-api-utils@1.0.3(typescript@5.3.3): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.3.3 dev: true /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + /ts-jest@29.1.1(@babel/core@7.22.5)(esbuild@0.19.9)(jest@29.7.0)(typescript@5.3.3): + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -7379,21 +7158,21 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.22.5 bs-logger: 0.2.6 - esbuild: 0.19.12 + esbuild: 0.19.9 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.12.12)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.2 - typescript: 5.4.5 + semver: 7.5.4 + typescript: 5.3.3 yargs-parser: 21.1.1 dev: true - /ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0): + /ts-loader@9.5.1(typescript@5.3.3)(webpack@5.88.2): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -7401,19 +7180,19 @@ packages: webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.16.1 + enhanced-resolve: 5.15.0 micromatch: 4.0.5 - semver: 7.6.2 + semver: 7.5.4 source-map: 0.7.4 - typescript: 5.4.5 - webpack: 5.91.0(esbuild@0.19.12) + typescript: 5.3.3 + webpack: 5.88.2(esbuild@0.19.9) dev: true /ts-log@2.2.5: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} dev: true - /ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5): + /ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -7428,24 +7207,24 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.12 - acorn: 8.11.3 - acorn-walk: 8.3.2 + '@types/node': 20.10.4 + acorn: 8.10.0 + acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 @@ -7457,12 +7236,16 @@ packages: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: true + /tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + dev: true + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsup@8.0.2(ts-node@10.9.2)(typescript@5.4.5): - resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} + /tsup@8.0.1(ts-node@10.9.2)(typescript@5.3.3): + resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -7480,21 +7263,21 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.1.0(esbuild@0.19.12) + bundle-require: 4.0.2(esbuild@0.19.9) cac: 6.7.14 - chokidar: 3.6.0 + chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.19.12 + esbuild: 0.19.9 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(ts-node@10.9.2) + postcss-load-config: 4.0.1(ts-node@10.9.2) resolve-from: 5.0.0 - rollup: 4.17.2 + rollup: 4.8.0 source-map: 0.8.0-beta.0 - sucrase: 3.35.0 + sucrase: 3.32.0 tree-kill: 1.2.2 - typescript: 5.4.5 + typescript: 5.3.3 transitivePeerDependencies: - supports-color - ts-node @@ -7522,78 +7305,72 @@ packages: engines: {node: '>=10'} dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + has-proto: 1.0.1 + is-typed-array: 1.1.12 dev: true - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + is-typed-array: 1.1.12 dev: true - /typedoc@0.25.13(typescript@5.4.5): - resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + /typedoc@0.25.4(typescript@5.3.3): + resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.4 - shiki: 0.14.7 - typescript: 5.4.5 + minimatch: 9.0.3 + shiki: 0.14.3 + typescript: 5.3.3 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true dev: true - /ua-parser-js@1.0.37: - resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} + /ua-parser-js@1.0.36: + resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} dev: true /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -7614,15 +7391,15 @@ packages: normalize-path: 2.1.1 dev: true - /update-browserslist-db@1.0.16(browserslist@4.23.0): - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 dev: true /upper-case-first@2.0.2: @@ -7640,17 +7417,17 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.1 - dev: true - - /urlpattern-polyfill@10.0.0: - resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + punycode: 2.3.0 dev: true /urlpattern-polyfill@8.0.2: resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} dev: true + /urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true @@ -7659,13 +7436,13 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + /v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 + '@jridgewell/trace-mapping': 0.3.18 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 dev: true /value-or-promise@1.0.12: @@ -7687,8 +7464,8 @@ packages: makeerror: 1.0.12 dev: true - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -7701,15 +7478,15 @@ packages: defaults: 1.0.4 dev: true - /web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: true - /webcrypto-core@1.7.9: - resolution: {integrity: sha512-FE+a4PPkOmBbgNDIyRmcHhgXn+2ClRl3JzJdDu/P4+B8y81LqKe6RAsI9b3lAOHe1T1BMkSjsRHTYRikImZnVA==} + /webcrypto-core@1.7.7: + resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} dependencies: - '@peculiar/asn1-schema': 2.3.8 + '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 @@ -7729,8 +7506,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.91.0(esbuild@0.19.12): - resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + /webpack@5.88.2(esbuild@0.19.9): + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -7739,17 +7516,17 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.9 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.1 - es-module-lexer: 1.5.2 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -7760,8 +7537,8 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.91.0) - watchpack: 2.4.1 + terser-webpack-plugin: 5.3.9(esbuild@0.19.9)(webpack@5.88.2) + watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -7798,15 +7575,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /which@2.0.2: @@ -7817,11 +7594,6 @@ packages: isexe: 2.0.0 dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true - /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -7840,15 +7612,6 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -7860,8 +7623,8 @@ packages: signal-exit: 3.0.7 dev: true - /ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7886,20 +7649,16 @@ packages: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true -<<<<<<< HEAD /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} -======= ->>>>>>> main /yaml-ast-parser@0.0.43: resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} dev: true - /yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} - hasBin: true dev: true /yargs-parser@18.1.3: @@ -7937,7 +7696,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From 3be143f2f576d53cb7d10b9274bc4c2bfa3f9d46 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 02:19:45 -0400 Subject: [PATCH 097/136] address comments --- src/account/EphemeralKeyPair.ts | 12 ++--- src/account/KeylessAccount.ts | 54 ++++++++++++++++++- src/internal/keyless.ts | 6 +-- .../transactionBuilder/transactionBuilder.ts | 4 +- 4 files changed, 64 insertions(+), 12 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 3e78da996..54160ebcc 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -12,7 +12,7 @@ import { } from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; -import { AnyNumber, EphemeralPublicKeyVariant, HexInput } from "../types"; +import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; import { currentTimeInSeconds, floorToWholeHour } from "../utils/helpers"; @@ -29,7 +29,7 @@ export class EphemeralKeyPair extends Serializable { * A timestamp in seconds indicating when the ephemeral key pair is expired. After expiry, a new * EphemeralKeyPair must be generated and a new JWT needs to be created. */ - readonly expiryDateSecs: bigint | number; + readonly expiryDateSecs: number; /** * The value passed to the IdP when the user authenticates. It comprises of a hash of the @@ -49,13 +49,13 @@ export class EphemeralKeyPair extends Serializable { */ private publicKey: EphemeralPublicKey; - constructor(args: { privateKey: PrivateKey; expiryDateSecs?: AnyNumber; blinder?: HexInput }) { + constructor(args: { privateKey: PrivateKey; expiryDateSecs?: number; blinder?: HexInput }) { super(); const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); // We set the expiry date to be the nearest floored hour - this.expiryDateSecs = expiryDateSecs || BigInt(floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS)); + this.expiryDateSecs = expiryDateSecs || floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS); // Generate the blinder if not provided this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); // Calculate the nonce @@ -98,7 +98,7 @@ export class EphemeralKeyPair extends Serializable { } const expiryDateSecs = deserializer.deserializeU64(); const blinder = deserializer.deserializeFixedBytes(31); - return new EphemeralKeyPair({ privateKey, expiryDateSecs, blinder }); + return new EphemeralKeyPair({ privateKey, expiryDateSecs: Number(expiryDateSecs), blinder }); } static fromBytes(bytes: Uint8Array): EphemeralKeyPair { @@ -111,7 +111,7 @@ export class EphemeralKeyPair extends Serializable { * @param expiryDateSecs the date of expiry. * @return boolean */ - static generate(args?: { scheme: EphemeralPublicKeyVariant; expiryDateSecs?: bigint | number }): EphemeralKeyPair { + static generate(args?: { scheme: EphemeralPublicKeyVariant; expiryDateSecs?: number }): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 0489a3d23..8171c4c1f 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -64,34 +64,86 @@ export class KeylessError extends Error { } } +/** + * Account implementation for the Keyless authentication scheme. + * + * Used to represent a Keyless based account and sign transactions with it. + * + * Use KeylessAccount.fromJWTAndProof to instantiate a KeylessAccount with a JWT, proof and EphemeralKeyPair. + * + * When the proof expires or the JWT becomes invalid, the KeylessAccount must be instantiated again with a new JWT, + * EphemeralKeyPair, and corresponding proof. + */ export class KeylessAccount extends Serializable implements Account { static readonly PEPPER_LENGTH: number = 31; + /** + * The KeylessPublicKey associated with the account + */ readonly publicKey: KeylessPublicKey; + /** + * The EphemeralKeyPair used to generate sign. + */ readonly ephemeralKeyPair: EphemeralKeyPair; + /** + * The claim on the JWT to identify a user. This is typically 'sub' or 'email'. + */ readonly uidKey: string; + /** + * The value of the uidKey claim on the JWT. This intended to be a stable user identifier. + */ readonly uidVal: string; + /** + * The value of the 'aud' claim on the JWT, also known as client ID. This is the identifier for the dApp's + * OIDC registration with the identity provider. + */ readonly aud: string; + /** + * A value contains 31 bytes of entropy that preserves privacy of the account. Typically fetched from a pepper provider. + */ readonly pepper: Uint8Array; + /** + * Account address associated with the account + */ readonly accountAddress: AccountAddress; + /** + * The zero knowledge signature (if ready) which contains the proof used to validate the EphemeralKeyPair. + */ proof: ZeroKnowledgeSig | undefined; + /** + * The proof of the EphemeralKeyPair or a promise that provides the proof. This is used to allow for awaiting on + * fetching the proof. + */ readonly proofOrPromise: ZeroKnowledgeSig | Promise; + /** + * Signing scheme used to sign transactions + */ readonly signingScheme: SigningScheme; + /** + * The JWT token used to derive the account + */ private jwt: string; + /** + * A value that caches the JWT's validity. A JWT becomes invalid when it's corresponding JWK is rotated from the + * identity provider's JWK keyset. + */ private isJwtValid: boolean; - readonly emitter: EventEmitter; + /** + * An event emitter used to assist in handling asycronous proof fetching. + */ + private readonly emitter: EventEmitter; constructor(args: { address?: AccountAddress; diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index f83e161be..fdf57adc2 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -26,9 +26,9 @@ export async function getPepper(args: { const body = { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), - exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), + exp_date_secs: ephemeralKeyPair.expiryDateSecs, epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), - uid_key: uidKey, + uid_key: uidKey || "sub", derivation_path: derivationPath, }; const { data } = await postAptosPepperService({ @@ -54,7 +54,7 @@ export async function getProof(args: { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), - exp_date_secs: Number(ephemeralKeyPair.expiryDateSecs), + exp_date_secs: ephemeralKeyPair.expiryDateSecs, exp_horizon_secs: EPK_HORIZON_SECS, pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), extra_field: extraFieldKey, diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 25f8abf37..9ed78fcf4 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -450,9 +450,9 @@ export function generateSignedTransactionForSimulation(args: InputSimulateTransa return new SignedTransaction(transaction.rawTransaction, transactionAuthenticator).bcsToBytes(); } -export function getAuthenticatorForSimulation(pk: PublicKey) { - let publicKey = pk; +export function getAuthenticatorForSimulation(publicKey: PublicKey) { if (publicKey instanceof KeylessPublicKey || publicKey instanceof Secp256k1PublicKey) { + // eslint-disable-next-line no-param-reassign publicKey = new AnyPublicKey(publicKey); } From 2017860245b4ffcb6969cbabbdf047337a83e6b1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 08:11:01 -0400 Subject: [PATCH 098/136] address comments --- src/account/KeylessAccount.ts | 18 ++++++++++--- src/api/keyless.ts | 2 -- src/core/crypto/cryptoHasher.ts | 16 +++++++++++ src/core/crypto/keyless.ts | 27 ++++++++++++++++--- src/internal/keyless.ts | 5 +--- .../transactionBuilder/signingMessage.ts | 13 --------- .../transactionBuilder/transactionBuilder.ts | 1 + 7 files changed, 56 insertions(+), 26 deletions(-) create mode 100644 src/core/crypto/cryptoHasher.ts diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 8171c4c1f..63b631b56 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -24,11 +24,10 @@ import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/acc import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType, - generateSigningMessageForBcsCryptoHashable, } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; import { AptosApiError } from "../client/types"; -import { AptsoDomainSeparator, CryptoHashable } from "../bcs/cryptoHasher"; +import { AptsoDomainSeparator, CryptoHashable } from "../core/crypto/cryptoHasher"; import { base64UrlDecode } from "../utils/helpers"; export const IssuerToJwkEndpoint: Record = { @@ -335,7 +334,7 @@ export class KeylessAccount extends Serializable implements Account { } const raw = deriveTransactionType(transaction); const txnAndProof = new TransactionAndProof(raw, this.proof.proof); - const signMess = generateSigningMessageForBcsCryptoHashable(txnAndProof); + const signMess = txnAndProof.hash(); return this.sign(signMess); } @@ -380,11 +379,24 @@ export class KeylessAccount extends Serializable implements Account { } } +/** + * A container class to hold a transaction and a proof. It implements CryptoHashable which is used to create + * the signing message for Keyless transactions. We sign over the proof to ensure non-malleability. + */ export class TransactionAndProof extends CryptoHashable { + /** + * The transaction to sign. + */ transaction: AnyRawTransactionInstance; + /** + * The zero knowledge proof used in signing the transaction. + */ proof?: ZkProof; + /** + * The domain separator prefix used when hashing. + */ domainSeparator: AptsoDomainSeparator; constructor(transaction: AnyRawTransactionInstance, proof?: ZkProof) { diff --git a/src/api/keyless.ts b/src/api/keyless.ts index aae62ea3b..37299f96b 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -30,7 +30,6 @@ export class Keyless { * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment * @param args.pepper the pepper - * @param args.extraFieldKey a key in the JWT token used to reveal a value on chain * @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done asyncronously. Once * if finishes the callback function will be called. * @returns A KeylessAccount that can be used to sign transactions @@ -40,7 +39,6 @@ export class Keyless { ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; pepper?: HexInput; - extraFieldKey?: string; proofFetchCallback?: ProofFetchCallback; }): Promise { return deriveKeylessAccount({ aptosConfig: this.config, ...args }); diff --git a/src/core/crypto/cryptoHasher.ts b/src/core/crypto/cryptoHasher.ts new file mode 100644 index 000000000..7525d4f85 --- /dev/null +++ b/src/core/crypto/cryptoHasher.ts @@ -0,0 +1,16 @@ +import { generateSigningMessage } from "../../transactions/transactionBuilder/signingMessage"; +import { Serializable } from "../../bcs/serializer"; + +export type AptsoDomainSeparator = `APTOS::${string}`; +export abstract class CryptoHashable extends Serializable { + abstract readonly domainSeparator: AptsoDomainSeparator; + + /** + * Hashes the bcs serialized from of the class. This is the typescript corollary to the BCSCryptoHash macro in aptos-core. + * + * @returns Uint8Array + */ + hash(): Uint8Array { + return generateSigningMessage(this.bcsToBytes(), this.domainSeparator); + } +} diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index ef8ac3ec0..bd05348e0 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -10,6 +10,7 @@ import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; import { Proof } from "./proof"; +import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; export const EPK_HORIZON_SECS = 10000000; export const MAX_AUD_VAL_BYTES = 120; @@ -160,7 +161,7 @@ export class KeylessSignature extends Signature { /** * The expiry timestamp in seconds of the EphemeralKeyPair used to sign */ - readonly expiryDateSecs: bigint | number; + readonly expiryDateSecs: number; /** * The ephemeral public key used to verify the signature @@ -175,7 +176,7 @@ export class KeylessSignature extends Signature { constructor(args: { jwtHeader: string; ephemeralCertificate: EphemeralCertificate; - expiryDateSecs: bigint | number; + expiryDateSecs: number; ephemeralPublicKey: EphemeralPublicKey; ephemeralSignature: EphemeralSignature; }) { @@ -213,7 +214,7 @@ export class KeylessSignature extends Signature { const ephemeralSignature = EphemeralSignature.deserialize(deserializer); return new KeylessSignature({ jwtHeader, - expiryDateSecs, + expiryDateSecs: Number(expiryDateSecs), ephemeralCertificate, ephemeralPublicKey, ephemeralSignature, @@ -228,13 +229,31 @@ export class KeylessSignature extends Signature { const ephemeralSignature = EphemeralSignature.deserialize(deserializer); return new KeylessSignature({ jwtHeader, - expiryDateSecs, + expiryDateSecs: Number(expiryDateSecs), ephemeralCertificate, ephemeralPublicKey, ephemeralSignature, }); } + static getSimulationSignature(): KeylessSignature { + return new KeylessSignature({ + jwtHeader: "{}", + ephemeralCertificate: new EphemeralCertificate( + new ZeroKnowledgeSig({ + proof: new ZkProof( + new Groth16Zkp({ a: new Uint8Array(32), b: new Uint8Array(64), c: new Uint8Array(32) }), + ZkpVariant.Groth16, + ), + }), + EphemeralCertificateVariant.ZkProof, + ), + expiryDateSecs: 0, + ephemeralPublicKey: new EphemeralPublicKey(new Ed25519PublicKey(new Uint8Array(32))), + ephemeralSignature: new EphemeralSignature(new Ed25519Signature(new Uint8Array(64))), + }); + } + static isSignature(signature: Signature): signature is KeylessSignature { return signature instanceof KeylessSignature; } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index fdf57adc2..fd7124afd 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -47,9 +47,8 @@ export async function getProof(args: { ephemeralKeyPair: EphemeralKeyPair; pepper: HexInput; uidKey?: string; - extraFieldKey?: string; }): Promise { - const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey, extraFieldKey } = args; + const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey } = args; const json = { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), @@ -57,7 +56,6 @@ export async function getProof(args: { exp_date_secs: ephemeralKeyPair.expiryDateSecs, exp_horizon_secs: EPK_HORIZON_SECS, pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), - extra_field: extraFieldKey, uid_key: uidKey || "sub", }; @@ -89,7 +87,6 @@ export async function deriveKeylessAccount(args: { ephemeralKeyPair: EphemeralKeyPair; uidKey?: string; pepper?: HexInput; - extraFieldKey?: string; proofFetchCallback?: ProofFetchCallback; }): Promise { const { proofFetchCallback } = args; diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index 354113544..5e77e92cb 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -8,7 +8,6 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; import { FeePayerRawTransaction, MultiAgentRawTransaction } from "../instances"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; -import { CryptoHashable } from "../../bcs/cryptoHasher"; /** * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction @@ -60,18 +59,6 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin return mergedArray; } -/** - * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of - * its constructor as the domain separator. - * - * @param hashable An object that has a bcs serialized form - * - * @returns The Uint8Array of the signing message - */ -export function generateSigningMessageForBcsCryptoHashable(hashable: CryptoHashable): Uint8Array { - return generateSigningMessage(hashable.bcsToBytes(), hashable.domainSeparator); -} - /** * Generates the 'signing message' form of a transaction. It derives the type of transaction and * applies the appropriate domain separator based on if there is extra data such as a fee payer or diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 9ed78fcf4..c58167461 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -465,6 +465,7 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Secp256k1Signature(new Uint8Array(64)))); } if (publicKey.publicKey instanceof KeylessPublicKey) { + // return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(KeylessSignature.getSimulationSignature())); return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); } } From 924a73fa8e3cd302932aeb2f5b0da1805dae6669 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 09:32:47 -0400 Subject: [PATCH 099/136] update balance and poseidon tests --- src/bcs/cryptoHasher.ts | 6 ------ tests/e2e/transaction/helper.ts | 6 ++---- tests/unit/poseidon.test.ts | 14 ++++++++------ 3 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 src/bcs/cryptoHasher.ts diff --git a/src/bcs/cryptoHasher.ts b/src/bcs/cryptoHasher.ts deleted file mode 100644 index ff99574d0..000000000 --- a/src/bcs/cryptoHasher.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Serializable } from "./serializer"; - -export type AptsoDomainSeparator = `APTOS::${string}`; -export abstract class CryptoHashable extends Serializable { - abstract readonly domainSeparator: AptsoDomainSeparator; -} diff --git a/tests/e2e/transaction/helper.ts b/tests/e2e/transaction/helper.ts index fbfab744b..a18fa67ca 100644 --- a/tests/e2e/transaction/helper.ts +++ b/tests/e2e/transaction/helper.ts @@ -96,12 +96,10 @@ export async function fundAccounts(aptos: Aptos, accounts: Array) { } export async function balance(aptos: Aptos, address: AccountAddress): Promise { - type Coin = { coin: { value: string } }; - const resource = await aptos.getAccountResource({ + const amount = await aptos.getAccountAPTAmount({ accountAddress: address, - resourceType: "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>", }); - return Number(resource.coin.value); + return amount; } const fetchToken = (index: number, rsaPrivateKey: string, ephemKeyPair: EphemeralKeyPair) => { diff --git a/tests/unit/poseidon.test.ts b/tests/unit/poseidon.test.ts index c4fbc3680..3b1e41cdf 100644 --- a/tests/unit/poseidon.test.ts +++ b/tests/unit/poseidon.test.ts @@ -5,11 +5,13 @@ import { poseidonHash } from "../../src/core/crypto/poseidon"; describe("Poseidon", () => { it("should hash correctly", () => { - const input = [1, 2]; - let hash = poseidonHash(input); - expect(hash).toEqual(BigInt("7853200120776062878684798364095072458815029376092732009249414926327459813530")); - input.pop(); - hash = poseidonHash(input); - expect(hash).toEqual(BigInt("18586133768512220936620570745912940619677854269274689475585506675881198879027")); + const input = [[1, 2], [1]]; + const expected = [ + BigInt("7853200120776062878684798364095072458815029376092732009249414926327459813530"), + BigInt("18586133768512220936620570745912940619677854269274689475585506675881198879027"), + ]; + for (let i = 0; i < input.length; i += 1) { + expect(poseidonHash(input[i])).toEqual(expected[i]); + } }); }); From ddc8ffb829beb31649b2fd5b71c96448ea0861dc Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 10:01:01 -0400 Subject: [PATCH 100/136] address comments --- src/api/keyless.ts | 17 ++++++- src/core/crypto/keyless.ts | 76 ++++++++++++++++++++++++------- src/core/crypto/poseidon.ts | 23 +++++++--- src/internal/keyless.ts | 42 +++++++++++++---- src/types/keyless.ts | 28 ++++++++++++ tests/e2e/api/keyless.test.ts | 28 ++++++------ tests/e2e/transaction/helper.ts | 8 ---- tests/unit/signingMessage.test.ts | 6 +-- 8 files changed, 167 insertions(+), 61 deletions(-) diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 37299f96b..6a7cd42a9 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { deriveKeylessAccount, getPepper } from "../internal/keyless"; -import { HexInput } from "../types"; +import { deriveKeylessAccount, getKeylessConfig, getPepper } from "../internal/keyless"; +import { HexInput, LedgerVersionArg } from "../types"; +import { KeylessConfiguration } from "../types/keyless"; import { AptosConfig } from "./aptosConfig"; /** @@ -12,6 +13,18 @@ import { AptosConfig } from "./aptosConfig"; export class Keyless { constructor(readonly config: AptosConfig) {} + /** + * Gets the parameters of how Keyless Accounts are configured on chain. + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns KeylessConfiguration + */ + async getKeylessConfig( + options?: LedgerVersionArg + ): Promise { + return getKeylessConfig({ aptosConfig: this.config, options }); + } + /** * Fetches the pepper from the Aptos pepper service API. * diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index bd05348e0..7e6ba7d2b 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -7,7 +7,7 @@ import { Deserializer, Serializable, Serializer } from "../../bcs"; import { Hex } from "../hex"; import { HexInput, EphemeralCertificateVariant, AnyPublicKeyVariant, SigningScheme, ZkpVariant } from "../../types"; import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; -import { bigIntToBytesLE, bytesToBigIntLE, hashASCIIStrToField, poseidonHash } from "./poseidon"; +import { bigIntToBytesLE, bytesToBigIntLE, hashStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; import { Proof } from "./proof"; import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; @@ -37,7 +37,7 @@ export class KeylessPublicKey extends AccountPublicKey { super(); const idcBytes = Hex.fromHexInput(idCommitment).toUint8Array(); if (idcBytes.length !== KeylessPublicKey.ID_COMMITMENT_LENGTH) { - throw new Error(`Address seed length in bytes should be ${KeylessPublicKey.ID_COMMITMENT_LENGTH}`); + throw new Error(`Id Commitment length in bytes should be ${KeylessPublicKey.ID_COMMITMENT_LENGTH}`); } this.iss = iss; this.idCommitment = idcBytes; @@ -136,9 +136,9 @@ function computeIdCommitment(args: { uidKey: string; uidVal: string; aud: string const fields = [ bytesToBigIntLE(Hex.fromHexInput(pepper).toUint8Array()), - hashASCIIStrToField(aud, MAX_AUD_VAL_BYTES), - hashASCIIStrToField(uidVal, MAX_UID_VAL_BYTES), - hashASCIIStrToField(uidKey, MAX_UID_KEY_BYTES), + hashStrToField(aud, MAX_AUD_VAL_BYTES), + hashStrToField(uidVal, MAX_UID_VAL_BYTES), + hashStrToField(uidKey, MAX_UID_KEY_BYTES), ]; return bigIntToBytesLE(poseidonHash(fields), KeylessPublicKey.ID_COMMITMENT_LENGTH); @@ -301,6 +301,48 @@ export class EphemeralCertificate extends Signature { } } +class G1ProofPoint extends Serializable { + data: Uint8Array; + + constructor(data: HexInput) { + super(); + this.data = Hex.fromHexInput(data).toUint8Array(); + if (this.data.length !== 32) { + throw new Error("Pepper needs to be 32 bytes"); + } + } + + serialize(serializer: Serializer): void { + serializer.serializeFixedBytes(this.data); + } + + static deserialize(deserializer: Deserializer): G1ProofPoint { + const bytes = deserializer.deserializeFixedBytes(32); + return new G1ProofPoint(bytes); + } +} + +class G2ProofPoint extends Serializable { + data: Uint8Array; + + constructor(data: HexInput) { + super(); + this.data = Hex.fromHexInput(data).toUint8Array(); + if (this.data.length !== 64) { + throw new Error("Pepper needs to be 64 bytes"); + } + } + + serialize(serializer: Serializer): void { + serializer.serializeFixedBytes(this.data); + } + + static deserialize(deserializer: Deserializer): G1ProofPoint { + const bytes = deserializer.deserializeFixedBytes(64); + return new G1ProofPoint(bytes); + } +} + /** * A representation of a Groth16 proof. The points are the compressed serialization of affine reprentation of the proof. */ @@ -308,36 +350,36 @@ export class Groth16Zkp extends Proof { /** * The bytes of G1 proof point a */ - a: Uint8Array; + a: G1ProofPoint; /** * The bytes of G2 proof point b */ - b: Uint8Array; + b: G2ProofPoint; /** * The bytes of G1 proof point c */ - c: Uint8Array; + c: G1ProofPoint; constructor(args: { a: HexInput; b: HexInput; c: HexInput }) { super(); const { a, b, c } = args; - this.a = Hex.fromHexInput(a).toUint8Array(); - this.b = Hex.fromHexInput(b).toUint8Array(); - this.c = Hex.fromHexInput(c).toUint8Array(); + this.a = new G1ProofPoint(a) + this.b = new G2ProofPoint(b) + this.c = new G1ProofPoint(c) } serialize(serializer: Serializer): void { - serializer.serializeFixedBytes(this.a); - serializer.serializeFixedBytes(this.b); - serializer.serializeFixedBytes(this.c); + this.a.serialize(serializer); + this.b.serialize(serializer); + this.c.serialize(serializer); } static deserialize(deserializer: Deserializer): Groth16Zkp { - const a = deserializer.deserializeFixedBytes(32); - const b = deserializer.deserializeFixedBytes(64); - const c = deserializer.deserializeFixedBytes(32); + const a = G1ProofPoint.deserialize(deserializer).bcsToBytes(); + const b = G1ProofPoint.deserialize(deserializer).bcsToBytes(); + const c = G1ProofPoint.deserialize(deserializer).bcsToBytes(); return new Groth16Zkp({ a, b, c }); } } diff --git a/src/core/crypto/poseidon.ts b/src/core/crypto/poseidon.ts index 2ae9bc6aa..891418a12 100644 --- a/src/core/crypto/poseidon.ts +++ b/src/core/crypto/poseidon.ts @@ -41,8 +41,12 @@ const BYTES_PACKED_PER_SCALAR = 31; const MAX_NUM_INPUT_SCALARS = 16; const MAX_NUM_INPUT_BYTES = (MAX_NUM_INPUT_SCALARS - 1) * BYTES_PACKED_PER_SCALAR; -// hashes an ASCII string to a field element -export function hashASCIIStrToField(str: string, maxSizeBytes: number) { +/** + * Hashes a string to a field element via poseidon + * + * @returns bigint result of the hash + */ +export function hashStrToField(str: string, maxSizeBytes: number): bigint { const textEncoder = new TextEncoder(); const strBytes = textEncoder.encode(str); return hashBytesWithLen(strBytes, maxSizeBytes); @@ -123,11 +127,16 @@ function padUint8ArrayWithZeros(inputArray: Uint8Array, paddedSize: number): Uin return paddedArray; } +/** + * Hashes up to 16 scalar elements via the poseidon hashing algorithm. + * + * Each element must be scalar fields of the BN254 elliptic curve group. + * + * @returns bigint result of the hash + */ export function poseidonHash(inputs: (number | bigint | string)[]): bigint { - const poseidonFixedHash = numInputsToPoseidonFunc[inputs.length - 1]; - - if (poseidonFixedHash) { - return poseidonFixedHash(inputs); + if (inputs.length > numInputsToPoseidonFunc.length) { + throw new Error(`Unable to hash input of length ${inputs.length}. Max input length is ${numInputsToPoseidonFunc.length}`); } - throw new Error(`Unable to hash input of length ${inputs.length}`); + return numInputsToPoseidonFunc[inputs.length - 1](inputs); } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index fd7124afd..ab104d31d 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -5,14 +5,36 @@ * This file contains the underlying implementations for exposed API surface in * the {@link api/keyless}. By moving the methods out into a separate file, * other namespaces and processes can access these methods without depending on the entire - * faucet namespace and without having a dependency cycle error. + * keyless namespace and without having a dependency cycle error. */ import { AptosConfig } from "../api/aptosConfig"; -import { postAptosPepperService, postAptosProvingService } from "../client"; -import { EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof } from "../core"; -import { HexInput, ZkpVariant } from "../types"; +import { getAptosFullNode, postAptosPepperService, postAptosProvingService } from "../client"; +import { AccountAddress, EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof } from "../core"; +import { HexInput, LedgerVersionArg, MoveResource, ZkpVariant } from "../types"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { PepperFetchResponse, ProverResponse } from "../types/keyless"; +import { KeylessConfiguration, PepperFetchRequest, PepperFetchResponse, ProverRequest, ProverResponse } from "../types/keyless"; +import { memoizeAsync } from "../utils/memoize"; + +export async function getKeylessConfig(args: { + aptosConfig: AptosConfig; + options?: LedgerVersionArg; +}): Promise { + const { aptosConfig, options } = args; + const resourceType = "0x1::keyless_account::Configuration" + return memoizeAsync( + async () => { + const { data } = await getAptosFullNode<{}, MoveResource>({ + aptosConfig, + originMethod: "getKeylessConfig", + path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, + params: { ledger_version: options?.ledgerVersion }, + }); + return data.data as KeylessConfiguration; + }, + `keyless-configuration-${aptosConfig.network}`, + 1000 * 60 * 10, // 10 minutes + )(); +} export async function getPepper(args: { aptosConfig: AptosConfig; @@ -31,7 +53,7 @@ export async function getPepper(args: { uid_key: uidKey || "sub", derivation_path: derivationPath, }; - const { data } = await postAptosPepperService({ + const { data } = await postAptosPepperService({ aptosConfig, path: "fetch", body, @@ -59,7 +81,7 @@ export async function getProof(args: { uid_key: uidKey || "sub", }; - const { data } = await postAptosProvingService({ + const { data } = await postAptosProvingService({ aptosConfig, path: "prove", body: json, @@ -93,7 +115,11 @@ export async function deriveKeylessAccount(args: { let { pepper } = args; if (pepper === undefined) { pepper = await getPepper(args); - } else if (Hex.fromHexInput(pepper).toUint8Array().length !== KeylessAccount.PEPPER_LENGTH) { + } else { + pepper = Hex.fromHexInput(pepper).toUint8Array(); + } + + if (pepper.length !== KeylessAccount.PEPPER_LENGTH) { throw new Error(`Pepper needs to be ${KeylessAccount.PEPPER_LENGTH} bytes`); } diff --git a/src/types/keyless.ts b/src/types/keyless.ts index 78e335247..92d9ae086 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -1,6 +1,34 @@ +export type ProverRequest = { + jwt_b64: string, + epk: string, + exp_date_secs: number, + exp_horizon_secs: number, + epk_blinder: string, + uid_key: string, + pepper: string, +}; export type ProverResponse = { proof: { a: string; b: string; c: string }; public_inputs_hash: string; training_wheels_signature: string; }; +export type PepperFetchRequest = { + jwt_b64: number, + epk: string, + exp_date_secs: number, + epk_blinder: string, + uid_key: string, + derivation_path: string, +}; export type PepperFetchResponse = { signature: string; pepper: string; address: string }; + +export type KeylessConfiguration = { + max_commited_epk_bytes: number, + max_exp_horizon_secs: string, + max_extra_field_bytes: number, + max_iss_val_bytes: number, + max_jwt_header_b64_bytes: number, + max_signatures_per_txn: number, + override_aud_vals: string[], + training_wheels_pubkey: { vec: string[] } +} \ No newline at end of file diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index c1d425f7e..fe006067f 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -3,27 +3,17 @@ import { Account, KeylessAccount } from "../../../src"; import { getAptosClient } from "../helper"; -import { balance, fetchDevnetTestKeylessAccount } from "../transaction/helper"; +import { fetchDevnetTestKeylessAccount } from "../transaction/helper"; describe("keyless api", () => { const FUND_AMOUNT = 100_000_000; const TRANSFER_AMOUNT = 500_000; - const RSA_SECRET_KEY_URL = - // eslint-disable-next-line max-len - "https://raw.githubusercontent.com/aptos-labs/aptos-core/ae9a956d2963f3eb4baef543f629cbc2fe3ece1c/types/src/jwks/rsa/insecure_test_jwk_private_key.pem"; - // let rsaPrivateKey: string; let keylessAccount: KeylessAccount; // TODO: Make this work for local by spinning up a local proving service. const { aptos } = getAptosClient(); beforeAll(async () => { - const response = await fetch(RSA_SECRET_KEY_URL); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - // rsaPrivateKey = await response.text(); - // keylessAccount = await fetchTestKeylessAccount(aptos, 0, rsaPrivateKey); keylessAccount = fetchDevnetTestKeylessAccount(0); }); describe("keyless account", () => { @@ -38,8 +28,12 @@ describe("keyless api", () => { amount: FUND_AMOUNT, }); - const senderOldBalance = await balance(aptos, keylessAccount.accountAddress); - const recipientOldBalance = await balance(aptos, recipient.accountAddress); + const senderOldBalance = await aptos.getAccountAPTAmount({ + accountAddress: keylessAccount.accountAddress, + }); + const recipientOldBalance = await aptos.getAccountAPTAmount({ + accountAddress: recipient.accountAddress, + }); const transaction = await aptos.transferCoinTransaction({ sender: keylessAccount.accountAddress, @@ -50,8 +44,12 @@ describe("keyless api", () => { const committedTxn = await aptos.signAndSubmitTransaction({ signer: keylessAccount, transaction }); await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); - const senderNewBalance = await balance(aptos, keylessAccount.accountAddress); - const recipientNewBalance = await balance(aptos, recipient.accountAddress); + const senderNewBalance = await aptos.getAccountAPTAmount({ + accountAddress: keylessAccount.accountAddress, + }); + const recipientNewBalance = await aptos.getAccountAPTAmount({ + accountAddress: recipient.accountAddress, + }); expect(senderOldBalance - senderNewBalance).toBeGreaterThan(TRANSFER_AMOUNT); expect(recipientNewBalance - recipientOldBalance).toEqual(TRANSFER_AMOUNT); diff --git a/tests/e2e/transaction/helper.ts b/tests/e2e/transaction/helper.ts index a18fa67ca..7b5b586fb 100644 --- a/tests/e2e/transaction/helper.ts +++ b/tests/e2e/transaction/helper.ts @@ -20,7 +20,6 @@ import { ZeroKnowledgeSig, Hex, Ed25519PrivateKey, - AccountAddress, } from "../../../src"; import { FUND_AMOUNT } from "../../unit/helper"; @@ -95,13 +94,6 @@ export async function fundAccounts(aptos: Aptos, accounts: Array) { return response; } -export async function balance(aptos: Aptos, address: AccountAddress): Promise { - const amount = await aptos.getAccountAPTAmount({ - accountAddress: address, - }); - return amount; -} - const fetchToken = (index: number, rsaPrivateKey: string, ephemKeyPair: EphemeralKeyPair) => { const payload = { iss: "test.oidc.provider", diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index 34d1bda72..73e16f512 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -5,11 +5,9 @@ import { Account, Ed25519PrivateKey, Serializer, - TransactionAndProof, - generateSigningMessageForBcsCryptoHashable, generateSigningMessageForTransaction, } from "../../src"; -import { AptsoDomainSeparator, CryptoHashable } from "../../src/bcs/cryptoHasher"; +import { AptsoDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHasher"; import { getAptosClient } from "../e2e/helper"; import { ed25519 } from "./helper"; @@ -93,7 +91,7 @@ describe("generateSigningMessage ", () => { } } - const signingMessage = generateSigningMessageForBcsCryptoHashable(new TestClass()); + const signingMessage = new TestClass().hash(); expect(signingMessage).toEqual( new Uint8Array([ 134, 234, 208, 191, 5, 202, 254, 220, 58, 89, 147, 141, 29, 129, 67, 235, 85, 247, 253, 242, 60, 51, 32, 219, From dd4fe87de3be2c75ee3a8687345ac8b7b5399cbf Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 10:08:49 -0400 Subject: [PATCH 101/136] add docs --- src/client/get.ts | 6 ++++++ src/client/post.ts | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/client/get.ts b/src/client/get.ts index ec4aa0cb7..1df7be60e 100644 --- a/src/client/get.ts +++ b/src/client/get.ts @@ -89,6 +89,12 @@ export async function getAptosFullNode( }); } +/** + * Makes a get request to the pepper service + * + * @param options GetAptosRequestOptions + * @returns AptosResponse + */ export async function getAptosPepperService( options: GetAptosRequestOptions, ): Promise> { diff --git a/src/client/post.ts b/src/client/post.ts index 6749a2013..871f50432 100644 --- a/src/client/post.ts +++ b/src/client/post.ts @@ -136,6 +136,12 @@ export async function postAptosFaucet( }); } +/** + * Makes a post request to the pepper service + * + * @param options GetAptosRequestOptions + * @returns AptosResponse + */ export async function postAptosPepperService( options: PostAptosRequestOptions, ): Promise> { From 3370e7dcfdb972d7b627f6c7adb210d8a6b9629a Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 10:31:58 -0400 Subject: [PATCH 102/136] update deserializeOption doc --- src/bcs/deserializer.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/bcs/deserializer.ts b/src/bcs/deserializer.ts index 52fad4ebb..8feec22a4 100644 --- a/src/bcs/deserializer.ts +++ b/src/bcs/deserializer.ts @@ -77,16 +77,22 @@ export class Deserializer { } /** - * Deserializes a an optional string. + * Deserializes a an optional deserializable class. * - * BCS layout for Optional: 0 if none, else 1 | string_length | string_content - * @example - * ```ts - * const deserializer = new Deserializer(new Uint8Array([0x00])); - * assert(deserializer.deserializeOptionStr() === undefined); - * const deserializer = new Deserializer(new Uint8Array([1, 8, 49, 50, 51, 52, 97, 98, 99, 100])); - * assert(deserializer.deserializeOptionStr() === "1234abcd"); - * ``` + * BCS layout for Optional: 0 if none, else 1 | bcs representation of class + * + * @example + * const deserializer = new Deserializer(new Uint8Array([1, 2, 3])); + * const value = deserializer.deserializeOption(MyClass); // where MyClass has a `deserialize` function + * // value is now an instance of MyClass + * + * const deserializer = new Deserializer(new Uint8Array([0])); + * const value = deserializer.deserializeOption(MyClass); // where MyClass has a `deserialize` function + * // value is undefined + * + * @param cls The BCS-deserializable class to deserialize the buffered bytes into. + * + * @returns the deserialized value of class type T */ deserializeOption(cls: Deserializable): T | undefined { const exists = this.deserializeUleb128AsU32(); From fed84ca6d2c721f2696fa0a82c5ada5372c9b2f5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 11:11:29 -0400 Subject: [PATCH 103/136] update serializer docs --- src/bcs/serializer.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/bcs/serializer.ts b/src/bcs/serializer.ts index aeb03c1ff..fc52622ff 100644 --- a/src/bcs/serializer.ts +++ b/src/bcs/serializer.ts @@ -317,6 +317,24 @@ export class Serializer { }); } + /** + * Serializes a BCS Serializable values into a serializer instance or undefined. + * Note that this does not return anything. The bytes are added to the serializer instance's byte buffer. + * + * @param values The array of BCS Serializable values + * + * @example + * ```ts + * const serializer = new Serializer(); + * serializer.serializeOption(new AccountAddress(...)); + * const serializedBytes = serializer.toUint8Array(); + * // serializedBytes is now the BCS-serialized byte representation of AccountAddress + * + * const serializer = new Serializer(); + * serializer.serializeOption(undefined); + * assert(serializer.toUint8Array() === new Uint8Array([0x00])); + * ``` + */ serializeOption(value?: T): void { if (value === undefined) { this.serializeU32AsUleb128(0); @@ -326,6 +344,28 @@ export class Serializer { } } + /** + * Serializes an optional string. UTF8 string is supported. + * + * The existence of the string is encoded first, 0 if undefined and 1 if it exists. + * Them the number of bytes in the string content is serialized, as a uleb128-encoded u32 integer. + * Then the string content is serialized as UTF8 encoded bytes. + * + * BCS layout for optional "string": 1 | string_length | string_content + * where string_length is a u32 integer encoded as a uleb128 integer, equal to the number of bytes in string_content. + * + * BCS layout for undefined: 0 + * @example + * ```ts + * const serializer = new Serializer(); + * serializer.serializeOptionStr("1234abcd"); + * assert(serializer.toUint8Array() === new Uint8Array([1, 8, 49, 50, 51, 52, 97, 98, 99, 100])); + * + * const serializer = new Serializer(); + * serializer.serializeOptionStr(undefined); + * assert(serializer.toUint8Array() === new Uint8Array([0])); + * ``` + */ serializeOptionStr(value?: string): void { if (value === undefined) { this.serializeU32AsUleb128(0); From af411877d1ea3e4f51eca999f8cf0e87d9deaa01 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 11:37:37 -0400 Subject: [PATCH 104/136] updates --- src/core/crypto/keyless.ts | 13 +++++++++++-- src/core/crypto/poseidon.ts | 2 +- .../transactionBuilder/transactionBuilder.ts | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 7e6ba7d2b..aa99b27c5 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -29,8 +29,16 @@ export const MAX_COMMITED_EPK_BYTES = 93; export class KeylessPublicKey extends AccountPublicKey { static readonly ID_COMMITMENT_LENGTH: number = 32; + /** + * The value of the 'iss' claim on the JWT which identifies the OIDC provider. + */ readonly iss: string; + /** + * A value representing a cryptographic commitment to a user identity. + * + * It is calculated from the aud, uidKey, uidVal, pepper. + */ readonly idCommitment: Uint8Array; constructor(iss: string, idCommitment: HexInput) { @@ -432,12 +440,13 @@ export class ZeroKnowledgeSig extends Signature { readonly expHorizonSecs: bigint; /** - * A key value pair on the JWT token that can be made public + * A key value pair on the JWT token that can be specified on the signature which would reveal the value on chain. + * Can be used to assert identity or other attributes. */ readonly extraField?: string; /** - * Set in the case of signing by recovery services + * The 'aud' value of the recovery service which is set when recovering an account. */ readonly overrideAudVal?: string; diff --git a/src/core/crypto/poseidon.ts b/src/core/crypto/poseidon.ts index 891418a12..8e1d5bdd3 100644 --- a/src/core/crypto/poseidon.ts +++ b/src/core/crypto/poseidon.ts @@ -52,7 +52,7 @@ export function hashStrToField(str: string, maxSizeBytes: number): bigint { return hashBytesWithLen(strBytes, maxSizeBytes); } -function hashBytesWithLen(bytes: Uint8Array, maxSizeBytes: number) { +function hashBytesWithLen(bytes: Uint8Array, maxSizeBytes: number): bigint { if (bytes.length > maxSizeBytes) { throw new Error(`Inputted bytes of length ${bytes} is longer than ${maxSizeBytes}`); } diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index c58167461..bbcfbc953 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -465,6 +465,7 @@ export function getAuthenticatorForSimulation(publicKey: PublicKey) { return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Secp256k1Signature(new Uint8Array(64)))); } if (publicKey.publicKey instanceof KeylessPublicKey) { + // TODO: Replace with the line below one simulation works properly for Keyless // return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(KeylessSignature.getSimulationSignature())); return new AccountAuthenticatorSingleKey(publicKey, new AnySignature(new Ed25519Signature(new Uint8Array(64)))); } From a15b143e3b9017cadde68634fff98dd378e7dfc4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 28 May 2024 12:28:12 -0400 Subject: [PATCH 105/136] fix g2 point --- src/core/crypto/keyless.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index aa99b27c5..0513c45f4 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -316,7 +316,7 @@ class G1ProofPoint extends Serializable { super(); this.data = Hex.fromHexInput(data).toUint8Array(); if (this.data.length !== 32) { - throw new Error("Pepper needs to be 32 bytes"); + throw new Error("Input needs to be 32 bytes"); } } @@ -337,7 +337,7 @@ class G2ProofPoint extends Serializable { super(); this.data = Hex.fromHexInput(data).toUint8Array(); if (this.data.length !== 64) { - throw new Error("Pepper needs to be 64 bytes"); + throw new Error("Input needs to be 64 bytes"); } } @@ -345,9 +345,9 @@ class G2ProofPoint extends Serializable { serializer.serializeFixedBytes(this.data); } - static deserialize(deserializer: Deserializer): G1ProofPoint { + static deserialize(deserializer: Deserializer): G2ProofPoint { const bytes = deserializer.deserializeFixedBytes(64); - return new G1ProofPoint(bytes); + return new G2ProofPoint(bytes); } } @@ -386,7 +386,7 @@ export class Groth16Zkp extends Proof { static deserialize(deserializer: Deserializer): Groth16Zkp { const a = G1ProofPoint.deserialize(deserializer).bcsToBytes(); - const b = G1ProofPoint.deserialize(deserializer).bcsToBytes(); + const b = G2ProofPoint.deserialize(deserializer).bcsToBytes(); const c = G1ProofPoint.deserialize(deserializer).bcsToBytes(); return new Groth16Zkp({ a, b, c }); } From 592c2228074e9c797adb229971bb60f582118e1f Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 29 May 2024 14:07:03 -0400 Subject: [PATCH 106/136] add poseidon test --- tests/unit/poseidon.test.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/unit/poseidon.test.ts b/tests/unit/poseidon.test.ts index 3b1e41cdf..9d15d44af 100644 --- a/tests/unit/poseidon.test.ts +++ b/tests/unit/poseidon.test.ts @@ -1,7 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { poseidonHash } from "../../src/core/crypto/poseidon"; +import { bigIntToBytesLE, bytesToBigIntLE, hashStrToField, poseidonHash } from "../../src/core/crypto/poseidon"; describe("Poseidon", () => { it("should hash correctly", () => { @@ -14,4 +14,20 @@ describe("Poseidon", () => { expect(poseidonHash(input[i])).toEqual(expected[i]); } }); + it("should hash strings correctly", () => { + const input = ["hello", "google"]; + const expected = [ + BigInt("19131502131677697582824316262023599653223229634739282128274922348992854400539"), + BigInt("10420754430899002178577798392930147671924237248238291825718956074978332229675"), + ]; + for (let i = 0; i < input.length; i += 1) { + expect(hashStrToField(input[i], 31)).toEqual(expected[i]); + } + }); + it("should convert bigint to array and back correctly", () => { + const input = [BigInt(123), BigInt(321)]; + for (let i = 0; i < input.length; i += 1) { + expect(input[i]).toEqual( bytesToBigIntLE(bigIntToBytesLE(input[i], 31))); + } + }); }); From abad82ebc42e7077b0e384fb740822ae505c8232 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 06:08:24 -0400 Subject: [PATCH 107/136] 1.16.0-zeta.3 --- examples/typescript/keyless.ts | 11 +- package.json | 1 - pnpm-lock.yaml | 103 +---------- src/account/KeylessAccount.ts | 81 ++------ src/api/keyless.ts | 17 +- src/bcs/deserializer.ts | 8 +- src/bcs/serializer.ts | 4 +- src/client/core.ts | 12 +- src/client/types.ts | 2 +- src/core/crypto/cryptoHasher.ts | 2 +- src/core/crypto/keyless.ts | 128 ++++++++++--- src/core/crypto/poseidon.ts | 8 +- src/internal/keyless.ts | 100 ++++++++-- src/internal/transactionSubmission.ts | 4 +- src/types/index.ts | 4 +- src/types/keyless.ts | 54 +++--- src/utils/apiEndpoints.ts | 6 +- src/utils/helpers.ts | 1 - tests/e2e/api/keyless.test.ts | 173 ++++++++++++++---- tests/e2e/transaction/helper.ts | 89 ++++----- .../transaction/transactionBuilder.test.ts | 23 +-- tests/unit/helper.ts | 1 + tests/unit/poseidon.test.ts | 5 +- tests/unit/signingMessage.test.ts | 7 +- 24 files changed, 450 insertions(+), 394 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index e9d65b548..f2f6b7ecc 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -5,14 +5,7 @@ * This example shows how to use the Keyless accounts on Aptos */ -import { - Account, - AccountAddress, - Aptos, - AptosConfig, - EphemeralKeyPair, - Network, -} from "@aptos-labs/ts-sdk"; +import { Account, AccountAddress, Aptos, AptosConfig, EphemeralKeyPair, Network } from "@aptos-labs/ts-sdk"; import * as readlineSync from "readline-sync"; const COIN_STORE = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; @@ -106,7 +99,7 @@ const example = async () => { amount: TRANSFER_AMOUNT, }); - const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); + const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); console.log(`Committed transaction: ${committedTxn.hash}`); diff --git a/package.json b/package.json index 7f7ccb3a1..33c414e75 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "form-data": "^4.0.0", "jose": "^5.1.3", "js-base64": "^3.7.7", - "jwks-rsa": "^3.1.0", "jwt-decode": "^4.0.0", "poseidon-lite": "^0.2.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e877eff8..555102c9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,9 +35,6 @@ dependencies: js-base64: specifier: ^3.7.7 version: 3.7.7 - jwks-rsa: - specifier: ^3.1.0 - version: 3.1.0 jwt-decode: specifier: ^4.0.0 version: 4.0.0 @@ -2473,13 +2470,6 @@ packages: resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} dev: true - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.10.4 - dev: false - /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: @@ -2489,12 +2479,6 @@ packages: '@types/responselike': 1.0.0 dev: false - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.10.4 - dev: false - /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -2513,24 +2497,6 @@ packages: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true - /@types/express-serve-static-core@4.19.0: - resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} - dependencies: - '@types/node': 20.10.4 - '@types/qs': 6.9.15 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: false - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 - dev: false - /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: @@ -2541,10 +2507,6 @@ packages: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: false - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: false - /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: true @@ -2588,6 +2550,7 @@ packages: resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} dependencies: '@types/node': 20.10.4 + dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -2595,23 +2558,11 @@ packages: '@types/node': 20.10.4 dev: false - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: false - /@types/node@20.10.4: resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: undici-types: 5.26.5 - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: false - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: false - /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -2622,21 +2573,6 @@ packages: resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.10.4 - dev: false - - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.10.4 - '@types/send': 0.17.4 - dev: false - /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true @@ -3787,6 +3723,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} @@ -5630,10 +5567,6 @@ packages: hasBin: true dev: true - /jose@4.15.5: - resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} - dev: false - /jose@5.2.3: resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} @@ -5746,20 +5679,6 @@ packages: safe-buffer: 5.2.1 dev: true - /jwks-rsa@3.1.0: - resolution: {integrity: sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==} - engines: {node: '>=14'} - dependencies: - '@types/express': 4.17.21 - '@types/jsonwebtoken': 9.0.6 - debug: 4.3.4 - jose: 4.15.5 - limiter: 1.1.5 - lru-memoizer: 2.3.0 - transitivePeerDependencies: - - supports-color - dev: false - /jws@3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: @@ -5801,10 +5720,6 @@ packages: engines: {node: '>=10'} dev: true - /limiter@1.1.5: - resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - dev: false - /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -5852,10 +5767,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - dev: false - /lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} dev: true @@ -5952,13 +5863,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - - /lru-memoizer@2.3.0: - resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} - dependencies: - lodash.clonedeep: 4.5.0 - lru-cache: 6.0.0 - dev: false + dev: true /lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -6072,6 +5977,7 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -7651,6 +7557,7 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yaml-ast-parser@0.0.43: resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 63b631b56..2b0102575 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 import { JwtPayload, jwtDecode } from "jwt-decode"; -import { JwksClient } from "jwks-rsa"; import EventEmitter from "eventemitter3"; import { EphemeralCertificateVariant, HexInput, SigningScheme } from "../types"; import { AccountAddress } from "../core/accountAddress"; @@ -22,11 +21,8 @@ import { EphemeralKeyPair } from "./EphemeralKeyPair"; import { Hex } from "../core/hex"; import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; import { Deserializer, Serializable, Serializer } from "../bcs"; -import { - deriveTransactionType, -} from "../transactions/transactionBuilder/signingMessage"; +import { deriveTransactionType } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; -import { AptosApiError } from "../client/types"; import { AptsoDomainSeparator, CryptoHashable } from "../core/crypto/cryptoHasher"; import { base64UrlDecode } from "../utils/helpers"; @@ -34,42 +30,13 @@ export const IssuerToJwkEndpoint: Record = { "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", }; -export enum KeylessErrorType { - JWK_EXPIRED, - EPK_EXPIRED, - PROOF_NOT_FOUND, - UNKNOWN_INVALID_SIGNATURE, - UNKNOWN, -} -export class KeylessError extends Error { - readonly type: KeylessErrorType; - - constructor(type: KeylessErrorType) { - super(); - this.type = type; - } - - static async fromAptosApiError(error: AptosApiError, signer: KeylessAccount): Promise { - if (!error.data.message.includes("INVALID_SIGNATURE")) { - return new KeylessError(KeylessErrorType.UNKNOWN); - } - if (signer.isExpired()) { - return new KeylessError(KeylessErrorType.EPK_EXPIRED); - } - if (!(await signer.checkJwkValidity())) { - return new KeylessError(KeylessErrorType.JWK_EXPIRED); - } - return new KeylessError(KeylessErrorType.UNKNOWN_INVALID_SIGNATURE); - } -} - /** * Account implementation for the Keyless authentication scheme. * * Used to represent a Keyless based account and sign transactions with it. - * + * * Use KeylessAccount.fromJWTAndProof to instantiate a KeylessAccount with a JWT, proof and EphemeralKeyPair. - * + * * When the proof expires or the JWT becomes invalid, the KeylessAccount must be instantiated again with a new JWT, * EphemeralKeyPair, and corresponding proof. */ @@ -82,7 +49,7 @@ export class KeylessAccount extends Serializable implements Account { readonly publicKey: KeylessPublicKey; /** - * The EphemeralKeyPair used to generate sign. + * The EphemeralKeyPair used to generate sign. */ readonly ephemeralKeyPair: EphemeralKeyPair; @@ -134,7 +101,7 @@ export class KeylessAccount extends Serializable implements Account { private jwt: string; /** - * A value that caches the JWT's validity. A JWT becomes invalid when it's corresponding JWK is rotated from the + * A value that caches the JWT's validity. A JWT becomes invalid when it's corresponding JWK is rotated from the * identity provider's JWK keyset. */ private isJwtValid: boolean; @@ -222,7 +189,7 @@ export class KeylessAccount extends Serializable implements Account { const pepper = deserializer.deserializeFixedBytes(31); const ephemeralKeyPair = EphemeralKeyPair.deserialize(deserializer); const proof = ZeroKnowledgeSig.deserialize(deserializer); - return KeylessAccount.fromJWTAndProof({ + return KeylessAccount.create({ proof, pepper, uidKey, @@ -240,28 +207,6 @@ export class KeylessAccount extends Serializable implements Account { return this.ephemeralKeyPair.isExpired(); } - /** - * Checks if the the JWK used to verify the token still exists on the issuer's JWK uri. - * Caches the result. - * @return boolean - */ - async checkJwkValidity(): Promise { - if (!this.isJwtValid) { - return false; - } - const jwtHeader = jwtDecode(this.jwt, { header: true }); - const client = new JwksClient({ - jwksUri: IssuerToJwkEndpoint[this.publicKey.iss], - }); - try { - await client.getSigningKey(jwtHeader.kid); - return true; - } catch (error) { - this.isJwtValid = false; - return false; - } - } - /** * Sign a message using Keyless. * @param message the message to sign, as binary input @@ -302,13 +247,10 @@ export class KeylessAccount extends Serializable implements Account { sign(data: HexInput): KeylessSignature { const { expiryDateSecs } = this.ephemeralKeyPair; if (this.isExpired()) { - throw new KeylessError(KeylessErrorType.EPK_EXPIRED); + throw new Error("EphemeralKeyPair is expired"); } if (this.proof === undefined) { - throw new KeylessError(KeylessErrorType.PROOF_NOT_FOUND); - } - if (!this.isJwtValid) { - throw new KeylessError(KeylessErrorType.JWK_EXPIRED); + throw new Error("Proof not defined"); } const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey(); const ephemeralSignature = this.ephemeralKeyPair.sign(data); @@ -347,7 +289,7 @@ export class KeylessAccount extends Serializable implements Account { return KeylessAccount.deserialize(new Deserializer(bytes)); } - static fromJWTAndProof(args: { + static create(args: { proof: ZeroKnowledgeSig | Promise; jwt: string; ephemeralKeyPair: EphemeralKeyPair; @@ -355,8 +297,7 @@ export class KeylessAccount extends Serializable implements Account { uidKey?: string; proofFetchCallback?: ProofFetchCallback; }): KeylessAccount { - const { proof, jwt, ephemeralKeyPair, pepper, proofFetchCallback } = args; - const uidKey = args.uidKey ?? "sub"; + const { proof, jwt, ephemeralKeyPair, pepper, uidKey = "sub", proofFetchCallback } = args; const jwtPayload = jwtDecode(jwt); const iss = jwtPayload.iss!; @@ -403,7 +344,7 @@ export class TransactionAndProof extends CryptoHashable { super(); this.transaction = transaction; this.proof = proof; - this.domainSeparator = "APTOS::TransactionAndProof" + this.domainSeparator = "APTOS::TransactionAndProof"; } serialize(serializer: Serializer): void { diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 6a7cd42a9..37299f96b 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -2,9 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { deriveKeylessAccount, getKeylessConfig, getPepper } from "../internal/keyless"; -import { HexInput, LedgerVersionArg } from "../types"; -import { KeylessConfiguration } from "../types/keyless"; +import { deriveKeylessAccount, getPepper } from "../internal/keyless"; +import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; /** @@ -13,18 +12,6 @@ import { AptosConfig } from "./aptosConfig"; export class Keyless { constructor(readonly config: AptosConfig) {} - /** - * Gets the parameters of how Keyless Accounts are configured on chain. - * - * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version - * @returns KeylessConfiguration - */ - async getKeylessConfig( - options?: LedgerVersionArg - ): Promise { - return getKeylessConfig({ aptosConfig: this.config, options }); - } - /** * Fetches the pepper from the Aptos pepper service API. * diff --git a/src/bcs/deserializer.ts b/src/bcs/deserializer.ts index 8feec22a4..784d48ff2 100644 --- a/src/bcs/deserializer.ts +++ b/src/bcs/deserializer.ts @@ -80,16 +80,16 @@ export class Deserializer { * Deserializes a an optional deserializable class. * * BCS layout for Optional: 0 if none, else 1 | bcs representation of class - * - * @example + * + * @example * const deserializer = new Deserializer(new Uint8Array([1, 2, 3])); * const value = deserializer.deserializeOption(MyClass); // where MyClass has a `deserialize` function * // value is now an instance of MyClass - * + * * const deserializer = new Deserializer(new Uint8Array([0])); * const value = deserializer.deserializeOption(MyClass); // where MyClass has a `deserialize` function * // value is undefined - * + * * @param cls The BCS-deserializable class to deserialize the buffered bytes into. * * @returns the deserialized value of class type T diff --git a/src/bcs/serializer.ts b/src/bcs/serializer.ts index fc52622ff..a3f2655b0 100644 --- a/src/bcs/serializer.ts +++ b/src/bcs/serializer.ts @@ -322,14 +322,14 @@ export class Serializer { * Note that this does not return anything. The bytes are added to the serializer instance's byte buffer. * * @param values The array of BCS Serializable values - * + * * @example * ```ts * const serializer = new Serializer(); * serializer.serializeOption(new AccountAddress(...)); * const serializedBytes = serializer.toUint8Array(); * // serializedBytes is now the BCS-serialized byte representation of AccountAddress - * + * * const serializer = new Serializer(); * serializer.serializeOption(undefined); * assert(serializer.toUint8Array() === new Uint8Array([0x00])); diff --git a/src/client/core.ts b/src/client/core.ts index d5aa9dc45..e7b16a950 100644 --- a/src/client/core.ts +++ b/src/client/core.ts @@ -100,20 +100,16 @@ export async function aptosRequest( ); } result.data = indexerResponse.data as Res; + } else if (apiType === AptosApiType.PEPPER || apiType === AptosApiType.PROVER) { + if (result.status >= 400) { + throw new AptosApiError(options, result, `${response.data}`); + } } if (result.status >= 200 && result.status < 300) { return result; } - if (result.status >= 500) { - throw new AptosApiError(options, result, `${response.data}`); - } - - if (aptosConfig.isPepperServiceRequest(url) || aptosConfig.isProverServiceRequest(url)) { - throw new AptosApiError(options, result, `${response.data}`); - } - let errorMessage: string; if (result && result.data && "message" in result.data && "error_code" in result.data) { diff --git a/src/client/types.ts b/src/client/types.ts index 6d8b95969..2c6c87c35 100644 --- a/src/client/types.ts +++ b/src/client/types.ts @@ -41,7 +41,7 @@ export class AptosApiError extends Error { readonly statusText: string; - readonly data: { message: string; error_code?: string; vm_error_code?: number }; + readonly data: any; readonly request: AptosRequest; diff --git a/src/core/crypto/cryptoHasher.ts b/src/core/crypto/cryptoHasher.ts index 7525d4f85..2a6529c5d 100644 --- a/src/core/crypto/cryptoHasher.ts +++ b/src/core/crypto/cryptoHasher.ts @@ -7,7 +7,7 @@ export abstract class CryptoHashable extends Serializable { /** * Hashes the bcs serialized from of the class. This is the typescript corollary to the BCSCryptoHash macro in aptos-core. - * + * * @returns Uint8Array */ hash(): Uint8Array { diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 0513c45f4..60e41ede3 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -1,6 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 +import { JwtPayload, jwtDecode } from "jwt-decode"; import { AccountPublicKey, PublicKey } from "./publicKey"; import { Signature } from "./signature"; import { Deserializer, Serializable, Serializer } from "../../bcs"; @@ -11,6 +12,7 @@ import { bigIntToBytesLE, bytesToBigIntLE, hashStrToField, poseidonHash } from " import { AuthenticationKey } from "../authenticationKey"; import { Proof } from "./proof"; import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; +import { Groth16VerificationKeyResponse } from "../../types/keyless"; export const EPK_HORIZON_SECS = 10000000; export const MAX_AUD_VAL_BYTES = 120; @@ -36,7 +38,7 @@ export class KeylessPublicKey extends AccountPublicKey { /** * A value representing a cryptographic commitment to a user identity. - * + * * It is calculated from the aud, uidKey, uidVal, pepper. */ readonly idCommitment: Uint8Array; @@ -137,6 +139,18 @@ export class KeylessPublicKey extends AccountPublicKey { computeIdCommitment(args); return new KeylessPublicKey(args.iss, computeIdCommitment(args)); } + + static fromJWTAndPepper(args: { jwt: string; pepper: HexInput; uidKey?: string }): KeylessPublicKey { + const { jwt, pepper, uidKey = "sub" } = args; + const jwtPayload = jwtDecode(jwt); + const iss = jwtPayload.iss!; + if (typeof jwtPayload.aud !== "string") { + throw new Error("aud was not found or an array of values"); + } + const aud = jwtPayload.aud!; + const uidVal = jwtPayload[uidKey]; + return KeylessPublicKey.create({ iss, uidKey, uidVal, aud, pepper }); + } } function computeIdCommitment(args: { uidKey: string; uidVal: string; aud: string; pepper: HexInput }): Uint8Array { @@ -253,6 +267,7 @@ export class KeylessSignature extends Signature { new Groth16Zkp({ a: new Uint8Array(32), b: new Uint8Array(64), c: new Uint8Array(32) }), ZkpVariant.Groth16, ), + expHorizonSecs: 0, }), EphemeralCertificateVariant.ZkProof, ), @@ -309,7 +324,7 @@ export class EphemeralCertificate extends Signature { } } -class G1ProofPoint extends Serializable { +class G1Bytes extends Serializable { data: Uint8Array; constructor(data: HexInput) { @@ -321,16 +336,16 @@ class G1ProofPoint extends Serializable { } serialize(serializer: Serializer): void { - serializer.serializeFixedBytes(this.data); + serializer.serializeFixedBytes(this.data); } - static deserialize(deserializer: Deserializer): G1ProofPoint { + static deserialize(deserializer: Deserializer): G1Bytes { const bytes = deserializer.deserializeFixedBytes(32); - return new G1ProofPoint(bytes); + return new G1Bytes(bytes); } } -class G2ProofPoint extends Serializable { +class G2Bytes extends Serializable { data: Uint8Array; constructor(data: HexInput) { @@ -342,12 +357,12 @@ class G2ProofPoint extends Serializable { } serialize(serializer: Serializer): void { - serializer.serializeFixedBytes(this.data); + serializer.serializeFixedBytes(this.data); } - static deserialize(deserializer: Deserializer): G2ProofPoint { + static deserialize(deserializer: Deserializer): G2Bytes { const bytes = deserializer.deserializeFixedBytes(64); - return new G2ProofPoint(bytes); + return new G2Bytes(bytes); } } @@ -358,24 +373,24 @@ export class Groth16Zkp extends Proof { /** * The bytes of G1 proof point a */ - a: G1ProofPoint; + a: G1Bytes; /** * The bytes of G2 proof point b */ - b: G2ProofPoint; + b: G2Bytes; /** * The bytes of G1 proof point c */ - c: G1ProofPoint; + c: G1Bytes; constructor(args: { a: HexInput; b: HexInput; c: HexInput }) { super(); const { a, b, c } = args; - this.a = new G1ProofPoint(a) - this.b = new G2ProofPoint(b) - this.c = new G1ProofPoint(c) + this.a = new G1Bytes(a); + this.b = new G2Bytes(b); + this.c = new G1Bytes(c); } serialize(serializer: Serializer): void { @@ -385,9 +400,9 @@ export class Groth16Zkp extends Proof { } static deserialize(deserializer: Deserializer): Groth16Zkp { - const a = G1ProofPoint.deserialize(deserializer).bcsToBytes(); - const b = G2ProofPoint.deserialize(deserializer).bcsToBytes(); - const c = G1ProofPoint.deserialize(deserializer).bcsToBytes(); + const a = G1Bytes.deserialize(deserializer).bcsToBytes(); + const b = G2Bytes.deserialize(deserializer).bcsToBytes(); + const c = G1Bytes.deserialize(deserializer).bcsToBytes(); return new Groth16Zkp({ a, b, c }); } } @@ -437,7 +452,7 @@ export class ZeroKnowledgeSig extends Signature { /** * The max lifespan of the proof */ - readonly expHorizonSecs: bigint; + readonly expHorizonSecs: number; /** * A key value pair on the JWT token that can be specified on the signature which would reveal the value on chain. @@ -457,19 +472,13 @@ export class ZeroKnowledgeSig extends Signature { constructor(args: { proof: ZkProof; - expHorizonSecs?: bigint; + expHorizonSecs: number; extraField?: string; overrideAudVal?: string; trainingWheelsSignature?: EphemeralSignature; }) { super(); - const { - proof, - expHorizonSecs = BigInt(EPK_HORIZON_SECS), - trainingWheelsSignature, - extraField, - overrideAudVal, - } = args; + const { proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal } = args; this.proof = proof; this.expHorizonSecs = expHorizonSecs; this.trainingWheelsSignature = trainingWheelsSignature; @@ -505,7 +514,7 @@ export class ZeroKnowledgeSig extends Signature { static deserialize(deserializer: Deserializer): ZeroKnowledgeSig { const proof = ZkProof.deserialize(deserializer); - const expHorizonSecs = deserializer.deserializeU64(); + const expHorizonSecs = Number(deserializer.deserializeU64()); const extraField = deserializer.deserializeOptionStr(); const overrideAudVal = deserializer.deserializeOptionStr(); const trainingWheelsSignature = deserializer.deserializeOption(EphemeralSignature); @@ -514,10 +523,71 @@ export class ZeroKnowledgeSig extends Signature { static load(deserializer: Deserializer): ZeroKnowledgeSig { const proof = ZkProof.deserialize(deserializer); - const expHorizonSecs = deserializer.deserializeU64(); + const expHorizonSecs = Number(deserializer.deserializeU64()); const extraField = deserializer.deserializeOptionStr(); const overrideAudVal = deserializer.deserializeOptionStr(); const trainingWheelsSignature = deserializer.deserializeOption(EphemeralSignature); return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } } + +export class KeylessConfiguration { + readonly verficationKey: Groth16VerificationKey; + + readonly maxExpHorizonSecs: number; + + constructor(verficationKey: Groth16VerificationKey, maxExpHorizonSecs: number) { + this.verficationKey = verficationKey; + this.maxExpHorizonSecs = maxExpHorizonSecs; + } + + static create(res: Groth16VerificationKeyResponse, maxExpHorizonSecs: number): KeylessConfiguration { + return new KeylessConfiguration( + new Groth16VerificationKey({ + alphaG1: res.alpha_g1, + betaG2: res.beta_g2, + deltaG2: res.delta_g2, + gammaAbcG1: res.gamma_abc_g1, + gammaG2: res.gamma_g2, + }), + maxExpHorizonSecs, + ); + } +} + +class Groth16VerificationKey { + readonly alphaG1: G1Bytes; + + readonly betaG2: G2Bytes; + + readonly deltaG2: G2Bytes; + + readonly gammaAbcG1: G1Bytes[]; + + readonly gammaG2: G2Bytes; + + constructor(args: { + alphaG1: HexInput; + betaG2: HexInput; + deltaG2: HexInput; + gammaAbcG1: [HexInput, HexInput]; + gammaG2: HexInput; + }) { + const { alphaG1, betaG2, deltaG2, gammaAbcG1, gammaG2 } = args; + this.alphaG1 = new G1Bytes(alphaG1); + this.betaG2 = new G2Bytes(betaG2); + this.deltaG2 = new G2Bytes(deltaG2); + this.gammaAbcG1 = [new G1Bytes(gammaAbcG1[0]), new G1Bytes(gammaAbcG1[1])]; + this.gammaG2 = new G2Bytes(gammaG2); + } + + static fromGroth16VerificationKeyResponse(res: Groth16VerificationKeyResponse): Groth16VerificationKey { + return new Groth16VerificationKey({ + alphaG1: res.alpha_g1, + betaG2: res.beta_g2, + deltaG2: res.delta_g2, + gammaAbcG1: res.gamma_abc_g1, + gammaG2: res.gamma_g2, + }); + } +} diff --git a/src/core/crypto/poseidon.ts b/src/core/crypto/poseidon.ts index 8e1d5bdd3..84d816238 100644 --- a/src/core/crypto/poseidon.ts +++ b/src/core/crypto/poseidon.ts @@ -43,7 +43,7 @@ const MAX_NUM_INPUT_BYTES = (MAX_NUM_INPUT_SCALARS - 1) * BYTES_PACKED_PER_SCALA /** * Hashes a string to a field element via poseidon - * + * * @returns bigint result of the hash */ export function hashStrToField(str: string, maxSizeBytes: number): bigint { @@ -129,14 +129,16 @@ function padUint8ArrayWithZeros(inputArray: Uint8Array, paddedSize: number): Uin /** * Hashes up to 16 scalar elements via the poseidon hashing algorithm. - * + * * Each element must be scalar fields of the BN254 elliptic curve group. * * @returns bigint result of the hash */ export function poseidonHash(inputs: (number | bigint | string)[]): bigint { if (inputs.length > numInputsToPoseidonFunc.length) { - throw new Error(`Unable to hash input of length ${inputs.length}. Max input length is ${numInputsToPoseidonFunc.length}`); + throw new Error( + `Unable to hash input of length ${inputs.length}. Max input length is ${numInputsToPoseidonFunc.length}`, + ); } return numInputsToPoseidonFunc[inputs.length - 1](inputs); } diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index ab104d31d..1aed433a2 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -9,33 +9,93 @@ */ import { AptosConfig } from "../api/aptosConfig"; import { getAptosFullNode, postAptosPepperService, postAptosProvingService } from "../client"; -import { AccountAddress, EPK_HORIZON_SECS, EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof } from "../core"; +import { + AccountAddress, + EphemeralSignature, + Groth16Zkp, + Hex, + KeylessConfiguration, + ZeroKnowledgeSig, + ZkProof, +} from "../core"; import { HexInput, LedgerVersionArg, MoveResource, ZkpVariant } from "../types"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { KeylessConfiguration, PepperFetchRequest, PepperFetchResponse, ProverRequest, ProverResponse } from "../types/keyless"; +import { + Groth16VerificationKeyResponse, + KeylessConfigurationResponse, + PepperFetchRequest, + PepperFetchResponse, + ProverRequest, + ProverResponse, +} from "../types/keyless"; import { memoizeAsync } from "../utils/memoize"; -export async function getKeylessConfig(args: { +/** + * Gets the parameters of how Keyless Accounts are configured on chain including the verifying key and the max expiry horizon + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns KeylessConfiguration + */ +async function getKeylessConfig(args: { aptosConfig: AptosConfig; options?: LedgerVersionArg; }): Promise { - const { aptosConfig, options } = args; - const resourceType = "0x1::keyless_account::Configuration" + const { aptosConfig } = args; return memoizeAsync( async () => { - const { data } = await getAptosFullNode<{}, MoveResource>({ - aptosConfig, - originMethod: "getKeylessConfig", - path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, - params: { ledger_version: options?.ledgerVersion }, - }); - return data.data as KeylessConfiguration; + const config = await getKeylessConfigurationResource(args); + const vk = await getGroth16VerificationKeyResource(args); + return KeylessConfiguration.create(vk, Number(config.max_exp_horizon_secs)); }, `keyless-configuration-${aptosConfig.network}`, - 1000 * 60 * 10, // 10 minutes + 1000 * 60 * 5, // 5 minutes )(); } +/** + * Gets the KeylessConfiguration set on chain + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns KeylessConfigurationResponse + */ +async function getKeylessConfigurationResource(args: { + aptosConfig: AptosConfig; + options?: LedgerVersionArg; +}): Promise { + const { aptosConfig, options } = args; + const resourceType = "0x1::keyless_account::Configuration"; + const { data } = await getAptosFullNode<{}, MoveResource>({ + aptosConfig, + originMethod: "getKeylessConfiguration", + path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, + params: { ledger_version: options?.ledgerVersion }, + }); + + return data.data; +} + +/** + * Gets the Groth16VerificationKey set on chain + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns Groth16VerificationKeyResponse + */ +async function getGroth16VerificationKeyResource(args: { + aptosConfig: AptosConfig; + options?: LedgerVersionArg; +}): Promise { + const { aptosConfig, options } = args; + const resourceType = "0x1::keyless_account::Groth16VerificationKey"; + const { data } = await getAptosFullNode<{}, MoveResource>({ + aptosConfig, + originMethod: "getGroth16VerificationKey", + path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, + params: { ledger_version: options?.ledgerVersion }, + }); + + return data.data; +} + export async function getPepper(args: { aptosConfig: AptosConfig; jwt: string; @@ -43,14 +103,14 @@ export async function getPepper(args: { uidKey?: string; derivationPath?: string; }): Promise { - const { aptosConfig, jwt, ephemeralKeyPair, uidKey, derivationPath } = args; + const { aptosConfig, jwt, ephemeralKeyPair, uidKey = "sub", derivationPath } = args; const body = { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), exp_date_secs: ephemeralKeyPair.expiryDateSecs, epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), - uid_key: uidKey || "sub", + uid_key: uidKey, derivation_path: derivationPath, }; const { data } = await postAptosPepperService({ @@ -70,15 +130,16 @@ export async function getProof(args: { pepper: HexInput; uidKey?: string; }): Promise { - const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey } = args; + const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey = "sub" } = args; + const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); const json = { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), epk_blinder: Hex.fromHexInput(ephemeralKeyPair.blinder).toStringWithoutPrefix(), exp_date_secs: ephemeralKeyPair.expiryDateSecs, - exp_horizon_secs: EPK_HORIZON_SECS, + exp_horizon_secs: maxExpHorizonSecs, pepper: Hex.fromHexInput(pepper).toStringWithoutPrefix(), - uid_key: uidKey || "sub", + uid_key: uidKey, }; const { data } = await postAptosProvingService({ @@ -99,6 +160,7 @@ export async function getProof(args: { const signedProof = new ZeroKnowledgeSig({ proof: new ZkProof(groth16Zkp, ZkpVariant.Groth16), trainingWheelsSignature: EphemeralSignature.fromHex(data.training_wheels_signature), + expHorizonSecs: maxExpHorizonSecs, }); return signedProof; } @@ -126,7 +188,7 @@ export async function deriveKeylessAccount(args: { const proofPromise = getProof({ ...args, pepper }); const proof = proofFetchCallback ? proofPromise : await proofPromise; - const keylessAccount = KeylessAccount.fromJWTAndProof({ ...args, proof, pepper, proofFetchCallback }); + const keylessAccount = KeylessAccount.create({ ...args, proof, pepper, proofFetchCallback }); return keylessAccount; } diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 137a545a1..4d149e27f 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -7,8 +7,8 @@ import { AptosConfig } from "../api/aptosConfig"; import { MoveVector, U8 } from "../bcs"; -import { AptosApiError, postAptosFullNode } from "../client"; -import { Account, KeylessAccount, KeylessError, MultiKeyAccount } from "../account"; +import { postAptosFullNode } from "../client"; +import { Account, KeylessAccount, MultiKeyAccount } from "../account"; import { AccountAddress, AccountAddressInput } from "../core/accountAddress"; import { PrivateKey } from "../core/crypto"; import { AccountAuthenticator } from "../transactions/authenticator/account"; diff --git a/src/types/index.ts b/src/types/index.ts index 1903262fd..5aefc1361 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -322,9 +322,9 @@ export type GasEstimation = { prioritized_gas_estimate?: number; }; -export type MoveResource = { +export type MoveResource = { type: MoveStructId; - data: {}; + data: T; }; export type AccountData = { diff --git a/src/types/keyless.ts b/src/types/keyless.ts index 92d9ae086..2cb4d3a5b 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -1,11 +1,11 @@ export type ProverRequest = { - jwt_b64: string, - epk: string, - exp_date_secs: number, - exp_horizon_secs: number, - epk_blinder: string, - uid_key: string, - pepper: string, + jwt_b64: string; + epk: string; + exp_date_secs: number; + exp_horizon_secs: number; + epk_blinder: string; + uid_key: string; + pepper: string; }; export type ProverResponse = { proof: { a: string; b: string; c: string }; @@ -13,22 +13,30 @@ export type ProverResponse = { training_wheels_signature: string; }; export type PepperFetchRequest = { - jwt_b64: number, - epk: string, - exp_date_secs: number, - epk_blinder: string, - uid_key: string, - derivation_path: string, + jwt_b64: number; + epk: string; + exp_date_secs: number; + epk_blinder: string; + uid_key: string; + derivation_path: string; }; export type PepperFetchResponse = { signature: string; pepper: string; address: string }; -export type KeylessConfiguration = { - max_commited_epk_bytes: number, - max_exp_horizon_secs: string, - max_extra_field_bytes: number, - max_iss_val_bytes: number, - max_jwt_header_b64_bytes: number, - max_signatures_per_txn: number, - override_aud_vals: string[], - training_wheels_pubkey: { vec: string[] } -} \ No newline at end of file +export type KeylessConfigurationResponse = { + max_commited_epk_bytes: number; + max_exp_horizon_secs: string; + max_extra_field_bytes: number; + max_iss_val_bytes: number; + max_jwt_header_b64_bytes: number; + max_signatures_per_txn: number; + override_aud_vals: string[]; + training_wheels_pubkey: { vec: string[] }; +}; + +export type Groth16VerificationKeyResponse = { + alpha_g1: string; + beta_g2: string; + delta_g2: string; + gamma_abc_g1: [string, string]; + gamma_g2: string; +}; diff --git a/src/utils/apiEndpoints.ts b/src/utils/apiEndpoints.ts index df56f6a24..ab2f07aab 100644 --- a/src/utils/apiEndpoints.ts +++ b/src/utils/apiEndpoints.ts @@ -26,14 +26,16 @@ export const NetworkToPepperAPI: Record = { mainnet: "https://api.mainnet.aptoslabs.com/keyless/pepper/v0", testnet: "https://api.testnet.aptoslabs.com/keyless/pepper/v0", devnet: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", - local: "http://127.0.0.1:8000/v0", + // Use the devnet service for local environment + local: "https://api.devnet.aptoslabs.com/keyless/pepper/v0", }; export const NetworkToProverAPI: Record = { mainnet: "https://api.mainnet.aptoslabs.com/keyless/prover/v0", testnet: "https://api.testnet.aptoslabs.com/keyless/prover/v0", devnet: "https://api.devnet.aptoslabs.com/keyless/prover/v0", - local: "http://127.0.0.1:8083/v0", + // Use the devnet service for local environment + local: "https://api.devnet.aptoslabs.com/keyless/prover/v0", }; export enum Network { diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 7df3b5284..004c32eab 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -13,7 +13,6 @@ export async function sleep(timeMs: number): Promise { }); } - export function currentTimeInSeconds(): number { return Math.floor(new Date().getTime() / 1000); } diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index fe006067f..d1cd9152c 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -1,63 +1,166 @@ +/* eslint-disable max-len */ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account, KeylessAccount } from "../../../src"; +import { + Account, + Ed25519PrivateKey, + EphemeralKeyPair, + KeylessAccount, + KeylessPublicKey, + ProofFetchStatus, +} from "../../../src"; +import { FUND_AMOUNT, TRANSFER_AMOUNT } from "../../unit/helper"; import { getAptosClient } from "../helper"; -import { fetchDevnetTestKeylessAccount } from "../transaction/helper"; +import { simpleCoinTransactionHeler as simpleCoinTransactionHelper } from "../transaction/helper"; -describe("keyless api", () => { - const FUND_AMOUNT = 100_000_000; - const TRANSFER_AMOUNT = 500_000; +export const TEST_JWT_TOKENS = [ + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTAiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.YQGVRJ8wA9UgZ48VFPuxxMSPhPpeR7XNd1M-yw-3aCLUY1OAL1z_UXVqd2RB1SqaPZ4CD2BBm9txvIY7qfS4V0-Bk0tW6TeRo8iq8oL52-TIm8aCg1GQ2CmdJ_eEtFoW5AaEzX3mblWcinwTbfnrlhy-cdJxGq6EKIzQZc_AylScrYHj4dSEmq33EuaBTpF0HHyf8UmJvoe-PZhVjuj73gy10vhITtLe1Cq6A-fjAJ00BEJCa9ghke17hDXibEBLCO2tFuqggL37am5fMAmmZ0-x1rXcKub-LXyuV1Gc8OSVngBrseT7S2Sw4Gx1z3AN3bCzOJbPNTSFlwmzdIcuNQ", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTEiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.r5EXWtCVxRGtDYHLsYtOxxCVs0wQKM2QwUSg6NoHdSOBHpPlTdB0D4uGw_cS6uW2v8W8JxRWUagyAW93HMGrDGHVeBg3h8wmGR-gEWJqe2-kMxr6CpeHi6Xl5xoajWukQt1XAnuCpAF2U6i5biSx_3oerkS6zf1VX9KxUbnURVZtcrVqRS-1-isFjrrG2cDbBeX9X1i8qdyIJd0l1TTgD0BVI1uFCAIVEwSZ8w4haDTKj2JJOhtZCaeV-H8jqhRHVWXKn0xP1giUvChRz4dBuUdXK7YsYP9nCrAQiCm2MIwNmCPsxH4racb4MZn6PWJZXNpLpWjZ3WV9H4IBo8tR9A", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTIiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.JVXx2JmeZEgAtAXRmniQVscxgTtYRliGVyfclIYe7F5UUQAz2szwkNSuDlaW82myfuqUkbKgih3G3YK9GDh4Y1B1TcZT7_J2EVyj6s9QNmEQmf0Nlr31BQIJAOSGHNsTzkQ3at0c1lLbFd8ZpjI_ey8LVdOvLGBBErVJGlj89M158Jwl0E34GjRB8iWbC0WKS3A-T_IOtsu_VDOApQuIiOtS7LLAsGQcXWZGcykk2q5TwKui92gBw9vyRBB3FVOTtXssqEU7zRhtkUY6_L7mN7Z4zEVnlnZP_jtjjDtMCfFzbZSp_MP-ZmCdDPjjTH6QKfdQUB8ajqrDI7irEKsvqA", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTMiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.A5kmVT9dJAEz4GW7jglczCqgrmYinGWxfm9f1-A882kmk0tKQem3ZxDUjySRKj0725sJs3Rrbdhi2Jyk77FNADqoQ6bj1RA6SXguf0BG4iHvSc4CrtdzD9PHQjGQ1gC0LZBUgdKoKkp4C9eicu38cr4lbrW2XSeCCpy02SNSUwBtOoI7jrb_Q2YiOpK1g0fivNHM3Q3Crpy8gSvnim0xHsRylvs7UmDqLAeN2K7py-4MJOX9MgZStMqPkQMbcf-FDaYRaNUfP0uR48ZwfWATujRJenEYkOPupeFWhrh-DzL3OfqLzGg2oW0oq-EkROqdPpRgUCsT7jULps_sEensbQ", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTQiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.P5mWnTPNb00sAVdRir2qfsRXEZ2qCWslgnTTWiRsGVOuXsnkSPG4kLcQFVbPz8p_VwN-uqZHacrPZdZiN5LAdyAzxzVN-1cyfWDzt7Qwf95DDLlJkg4euNWXt3qrJR6th2QbHpzf5TJPxAXLRQpQJTO8gYKyFcX-izz8WDPRjeRU9e3cQ2pGOz3gXwXkHsylmC8y9obnhLqaMdDrX6-jUg2HTZsjNMH_7ZGd6oWKaE9SPTu0gR-tcluniC7YNAeXXv0AbqNEZ9WM_DcoIWvqlJzKnIuc-64Yj2cYMdgU8eDvgxN83khHFzQ9aP_BY_AtUdrFQwCXMEjNbSAw4P1WxA", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTUiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.ZX6QhX1An2KEbN755Et_u2gfXaC-UTv778Fl0E8kDf4_rqSbdDNdG4VysU0ASBtjZ4k1YKcOpZyz1BhqeQ9vp3A-M6niy2CFFcBoyXeXE_lzsbOizhBHQhLQaCCAlefn4gAGFH5cfK094vI2uHAffUx_XUki139Fapf-JJunSC4z34jiPiTkTO_Yfgx-XYXbI5h9AcFvtgYqLDZQ6Goigv-Rx7QK9iEKYnxqpROW1LDRdUyYLHJMUHAlsVMbnER4lM3IXTlb44XcGwFZuBqKeD2SyBDU_hDUjykwRf8b6Fg9h7k2YFAGwJkKybQmLrncM5PSNjUQ2g37hr80XM3yRQ", +]; + +export const EPHEMERAL_KEY_PAIR = new EphemeralKeyPair({ + privateKey: new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"), + expiryDateSecs: 1724497501, + blinder: new Uint8Array(31), +}); - let keylessAccount: KeylessAccount; +describe("keyless api", () => { + const ephemeralKeyPair = EPHEMERAL_KEY_PAIR; // TODO: Make this work for local by spinning up a local proving service. const { aptos } = getAptosClient(); beforeAll(async () => { - keylessAccount = fetchDevnetTestKeylessAccount(0); - }); - describe("keyless account", () => { - test("it submits transactions", async () => { - const recipient = Account.generate(); - await aptos.faucet.fundAccount({ - accountAddress: keylessAccount.accountAddress, - amount: FUND_AMOUNT, - }); + // Fund the test accounts + const promises = TEST_JWT_TOKENS.map(async (jwt) => { + const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); + const accountAddress = KeylessPublicKey.fromJWTAndPepper({ jwt, pepper }).authKey().derivedAddress(); await aptos.faucet.fundAccount({ - accountAddress: recipient.accountAddress, + accountAddress, amount: FUND_AMOUNT, }); + }); - const senderOldBalance = await aptos.getAccountAPTAmount({ - accountAddress: keylessAccount.accountAddress, - }); - const recipientOldBalance = await aptos.getAccountAPTAmount({ - accountAddress: recipient.accountAddress, - }); + await Promise.all(promises); + }, 30000); + describe("keyless account", () => { + test("derives the keyless account and submits a transaction", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, 10000); + + test("derives the keyless account with email uidKey and submits a transaction", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, uidKey: "email" }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, 10000); + + test("derives the keyless account with custom pepper and submits a transaction", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, 10000); + + test("derives the keyless account with custom pepper and submits a transaction", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, 10000); + + test("deriving keyless account with async proof fetch executes callback", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + let succeeded = false; + const proofFetchCallback = async (res: ProofFetchStatus) => { + if (res.status === "Failed") { + return; + } + succeeded = true; + }; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + expect(succeeded).toBeFalsy(); + await account.waitForProofFetch(); + expect(succeeded).toBeTruthy(); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, 10000); + test("derives the keyless account with async proof fetch and submits a transaction", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const proofFetchCallback = async () => {}; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); const transaction = await aptos.transferCoinTransaction({ - sender: keylessAccount.accountAddress, - recipient: recipient.accountAddress, + sender: account.accountAddress, + recipient: account.accountAddress, amount: TRANSFER_AMOUNT, }); + const pendingTxn = await aptos.signAndSubmitTransaction({ signer: account, transaction }); + await aptos.waitForTransaction({ transactionHash: pendingTxn.hash }); + }, 10000); - const committedTxn = await aptos.signAndSubmitTransaction({ signer: keylessAccount, transaction }); - await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); + test("deriving keyless account with async proof fetch throws when trying to immediately sign", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const proofFetchCallback = async () => {}; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + const transaction = await aptos.transferCoinTransaction({ + sender: account.accountAddress, + recipient: account.accountAddress, + amount: TRANSFER_AMOUNT, + }); + expect(() => account.signTransaction(transaction)).toThrow(); + await account.waitForProofFetch(); + account.signTransaction(transaction); + }, 10000); - const senderNewBalance = await aptos.getAccountAPTAmount({ - accountAddress: keylessAccount.accountAddress, + test("deriving keyless account using all parameters", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const proofFetchCallback = async () => {}; + const account = await aptos.deriveKeylessAccount({ + jwt, + ephemeralKeyPair, + uidKey: "email", + pepper: new Uint8Array(31), + proofFetchCallback, }); - const recipientNewBalance = await aptos.getAccountAPTAmount({ - accountAddress: recipient.accountAddress, + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, 10000); + + test("simulation works correctly", async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const transaction = await aptos.transferCoinTransaction({ + sender: account.accountAddress, + recipient: account.accountAddress, + amount: TRANSFER_AMOUNT, }); + await aptos.transaction.simulate.simple({ signerPublicKey: account.publicKey, transaction }); + }, 10000); - expect(senderOldBalance - senderNewBalance).toBeGreaterThan(TRANSFER_AMOUNT); - expect(recipientNewBalance - recipientOldBalance).toEqual(TRANSFER_AMOUNT); - }); test("serializes and deserializes", async () => { - const bytes = keylessAccount.bcsToBytes(); + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const bytes = account.bcsToBytes(); const deserializedAccount = KeylessAccount.fromBytes(bytes); expect(bytes).toEqual(deserializedAccount.bcsToBytes()); - }); + }, 10000); }); }); diff --git a/tests/e2e/transaction/helper.ts b/tests/e2e/transaction/helper.ts index 7b5b586fb..03133e3e6 100644 --- a/tests/e2e/transaction/helper.ts +++ b/tests/e2e/transaction/helper.ts @@ -1,8 +1,6 @@ -/* eslint-disable max-len */ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { sign } from "jsonwebtoken"; import { Account, Aptos, @@ -15,13 +13,8 @@ import { MoveVector, AnyRawTransaction, isUserTransactionResponse, - KeylessAccount, - EphemeralKeyPair, - ZeroKnowledgeSig, - Hex, - Ed25519PrivateKey, } from "../../../src"; -import { FUND_AMOUNT } from "../../unit/helper"; +import { FUND_AMOUNT, TRANSFER_AMOUNT } from "../../unit/helper"; export async function publishPackage( aptos: Aptos, @@ -94,52 +87,46 @@ export async function fundAccounts(aptos: Aptos, accounts: Array) { return response; } -const fetchToken = (index: number, rsaPrivateKey: string, ephemKeyPair: EphemeralKeyPair) => { - const payload = { - iss: "test.oidc.provider", - aud: "test-keyless-dapp", - sub: `test-user-${index}`, - email: "test@aptoslabs.com", - email_verified: true, - iat: Math.floor(new Date().getTime() / 1000), - exp: 2700000000, - nonce: ephemKeyPair.nonce, - }; - return sign(payload, rsaPrivateKey, { algorithm: "RS256", keyid: "test-rsa" }); -}; +export async function simpleCoinTransactionHeler(aptos: Aptos, sender: Account, recipient: Account) { + const senderFundTxn = await aptos.faucet.fundAccount({ + accountAddress: sender.accountAddress, + amount: FUND_AMOUNT, + }); + const recipientFundTxn = await aptos.faucet.fundAccount({ + accountAddress: recipient.accountAddress, + amount: FUND_AMOUNT, + }); -export async function fetchTestKeylessAccount( - aptos: Aptos, - index: number, - rsaPrivateKey: string, -): Promise { - const ephemeralKeyPair = EphemeralKeyPair.generate(); - const jwt = fetchToken(index, rsaPrivateKey, ephemeralKeyPair); - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); - return account; -} + const senderOldBalance = await aptos.getAccountAPTAmount({ + accountAddress: sender.accountAddress, + minimumLedgerVersion: Number(senderFundTxn.version), + }); + const recipientOldBalance = await aptos.getAccountAPTAmount({ + accountAddress: recipient.accountAddress, + minimumLedgerVersion: Number(recipientFundTxn.version), + }); + + const transaction = await aptos.transferCoinTransaction({ + sender: sender.accountAddress, + recipient: recipient.accountAddress, + amount: TRANSFER_AMOUNT, + }); -export function fetchDevnetTestKeylessAccount(index: number): KeylessAccount { - // These tokens cannot be used on the devnet prover service, but can be used to create the account. - const tokens = [ - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0wIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.Te7iIFxfMIRhFQ37pigAWgwkCP--GIE8PNnJEQyzZ8GtezA_W-jnKxlOVF4WeS6ZCt-oRQUwucv9Dq4DYQHgQztXE9CCudXSUz62xQQMRllOv9xnzlDKGcyLJiRpey_3IQdQJDNkRZFxVzsMtqtnZj28Nd9coMXAZGkgXTIgczsh5NJrAK7oKPfBwfIGFpNpcEpPoz80sWN4yJqMp25zZwPZ-sZk1xjoccxjkeV5M7AUmor7L2aAJBsjmycPqgAGZyyhXMOuszKQ4f92ewe-ChH_63fS4H5HCie3ABdlyBp849kP4YcRcpB6-wf1zVpUaz8bEcY7If_RbL_VPKlFXg", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0xIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.NPfbBL4fBwrRGxcU-Ao4oiuu0jRVnTURe9ZuQhyLcuG0UbukE002KelX_YSAP_AU6Xy9CGOxK9-bTwD50b6jXJSH7p6wfy8g2tZfNW2Mb9McCfL_sDxmk9gVYAE7N5B6vHLA3z1Fo7S3i9FY2pEvXO_kIAsTaq_cn76nc6T3hnlK4j15WReV_9SvVSGdPSKS62atucsC39RsUOUdJcE9UQP1VioSeCizR5qtRUyASJYuCRofb1dObdaWuhHxIaOzWEm-iaCzTVwPR_FpOXyag7FfO6IqoaH-l4kLvxkDF3TPMOeuwmewl4Bjq0lDtWmT6W4x2weSL_MqcftS7ubc3Q", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3MtZGFwcCIsInN1YiI6InRlc3QtdXNlci0yIiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzExMzk3NTk5LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiMjE1NDk4ODA2MTM5MDQzNDAxNjI1MTg1NTYxMjIxMjgwNjcxMzgzMDkyNzI4NTc5NDg4MDM2NTg1MDkzMTg3NzUyNTM1NzY2MTE1MDQifQ.xFsXE6TcYCoEDCN7mK_Lb7fpMth7D1GfPfAGjzr2wMGAgUi1yYptko7oVbyvCZi2is0MyBxUEdlAMufPDvr-457aMau7E9ptHaGtwhUYDSTANKzvrgWajdDNcFUcuH6YYzafDTxm3PkyyjcQlMN_jrPL4QFiyaoJDbQINWotBiI0yZoEkeaBb9iCCOQK7yngAdhqPDJLKe94Xv97MtzZo64udMILBBDzlYMsKSESeBcvWQVrMVWBzvXb4nFr_A3BXsIe9TbHB7Ial9F79ql_QWmGnhiB2pl1i0yp0RU1lqxtq1hCSngks26LMMj4cjqIrlOca89RmCKrYW7Dl2tOaA", - ]; - const proofs = [ - "005073aa7bb5e1ca67c4e205180b83ebdf55afee4abc38ad9bfe1bd8c18c6b3d0e594f121ef7ba8813848c184dad732f573ba7354f21f095986f7434d07b798a2e7167ab03bb8365926ada1402f1ffccac77f9395c001709e235376cf66c4f342a8188763f9e0356323106af2a06c922d318b9befeb8461ec4da6cf35c76995a2d8096980000000000000001004095f81b48e96c97d4e83ae9aa42dd3b638932f077134daa0a9ef1d6156c956f766e26168e37c60354a53fc6d9de2a00943f184a84642218018e8ef684481cce01", - "003fe9e4ca26c672e886dcc572b94a585a02541e1817102a8be3012ed4f6610e17ed02035125e706c974e15cdba1176996c4e752fe9950dedcffcbe27d0152f028822cdbd24568fc0179d5a60a21bff098c00906da8bae1f66ef5f9b05d937c805093188dd09732a061c38813f35abf39f2d9a6bca455e37245463c56ddfca371380969800000000000000010040d3898b6a3cdda4bd51eec5ed037ad7cbb76f8a0e4fd3a9c02645a42e71c4a08b5cdb119817e67114bd08bc8c2fabca1295dec0b974410a070975b5a2702e8f01", - "004777ee9a265122db09dfbde09cc828b7ce3fb95faf95499cec89a334dd59831a4a6a0adf9ccdc0e4a185a0d9c500d9a27e83a3d2d108ab5e3f48e197843d3d0cfd1b1d4e653cfb5bbe451ff83ff2b4765ff860dc612075c5b29a5fc0b8a93e0bb6fd078478a69a48cbe96cd698de35c77989afbd9f9003f58acd7010a5cac78c8096980000000000000001004040bbf6d459df035416113a5a828b6422f24d8d5a1865c00c904a6517d9b8867295b8fa6f1d999e19cc86a637fa1a731a44aa00a99fd22a811e4cb7fba8c04700", - ]; - const proof = ZeroKnowledgeSig.fromBytes(Hex.fromHexInput(proofs[index]).toUint8Array()); - const token = tokens[index]; + const pendingTxn = await aptos.signAndSubmitTransaction({ signer: sender, transaction }); + const committedTxn = await aptos.waitForTransaction({ transactionHash: pendingTxn.hash }); + const version = Number(committedTxn.version); + + const senderNewBalance = await aptos.getAccountAPTAmount({ + accountAddress: sender.accountAddress, + minimumLedgerVersion: version, + }); + const recipientNewBalance = await aptos.getAccountAPTAmount({ + accountAddress: recipient.accountAddress, + minimumLedgerVersion: version, + }); - const ZEROS = "00000000000000000000000000000000000000000000000000000000000000"; - const ephemPrivateKey = new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"); - const expiryDateSecs = 1724497501; - const ephemKeyPair = new EphemeralKeyPair({ privateKey: ephemPrivateKey, expiryDateSecs, blinder: ZEROS }); - const account = KeylessAccount.fromJWTAndProof({ proof, jwt: token, ephemeralKeyPair: ephemKeyPair, pepper: ZEROS }); - return account; + expect(senderOldBalance - senderNewBalance).toBeGreaterThan(TRANSFER_AMOUNT); + expect(recipientNewBalance - recipientOldBalance).toEqual(TRANSFER_AMOUNT); } // Transaction builder helpers diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index 51eca0350..5a400326d 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -25,16 +25,12 @@ import { generateTransactionPayloadWithABI, SignedTransaction, generateUserTransactionHash, + KeylessPublicKey, } from "../../../src"; import { FUND_AMOUNT, longTestTimeout } from "../../unit/helper"; +import { EPHEMERAL_KEY_PAIR } from "../api/keyless.test"; import { getAptosClient } from "../helper"; -import { - fetchDevnetTestKeylessAccount, - fundAccounts, - multiSignerScriptBytecode, - publishTransferPackage, - TYPED_SCRIPT_TEST, -} from "./helper"; +import { fundAccounts, multiSignerScriptBytecode, publishTransferPackage, TYPED_SCRIPT_TEST } from "./helper"; const { aptos, config } = getAptosClient(); @@ -416,8 +412,13 @@ describe("transaction builder", () => { }); test("it generates a keyless signed raw transaction for simulation", async () => { - const alice = fetchDevnetTestKeylessAccount(0); - await aptos.fundAccount({ accountAddress: alice.accountAddress, amount: FUND_AMOUNT }); + const jwt = + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTE0IiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.pqmdpi9Ruh_JLD_i2nCVDQZbjDFOF-gFHVc63px-oYolisvY6IOTj96iGPIpANegpMkefHQ4q2ZQKbIHDc1tYDfzbSiR4aUn8zxPYCbIIcteZ0UGil6GQRto_5pTEK9d5vH0baHG7zmfnLDN9mRP44pe0MiT1JcR2_LcaNIyh1sYIUk3cSDEMonkA9tGWlKqCSD4wf9NA_cLd5yptv99tleiCxduIKP-zOVcT8h6kWtVJL7-D5toS5EC_EDWAxjqoeb6I4cPmmR1SHFCsbLjzQ4B4x0IjJKWSmo1b585tjJRtr1PYe80G7J9tKfNzY8rdVkxhjjZNnKkAB1-WhlV5w"; + const ephemeralKeyPair = EPHEMERAL_KEY_PAIR; + const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); + const publicKey = KeylessPublicKey.fromJWTAndPepper({ jwt, pepper }); + const accountAddress = publicKey.authKey().derivedAddress(); + await aptos.fundAccount({ accountAddress, amount: FUND_AMOUNT }); const payload = await generateTransactionPayload({ bytecode: multiSignerScriptBytecode, functionArguments: [ @@ -430,13 +431,13 @@ describe("transaction builder", () => { }); const transaction = await buildTransaction({ aptosConfig: config, - sender: alice.accountAddress, + sender: accountAddress, payload, }); const bcsTransaction = await generateSignedTransactionForSimulation({ transaction, - signerPublicKey: alice.publicKey, + signerPublicKey: publicKey, }); expect(bcsTransaction instanceof Uint8Array).toBeTruthy(); const deserializer = new Deserializer(bcsTransaction); diff --git a/tests/unit/helper.ts b/tests/unit/helper.ts index 396414da3..1eb0b4f10 100644 --- a/tests/unit/helper.ts +++ b/tests/unit/helper.ts @@ -5,6 +5,7 @@ import { ClientRequest, ClientResponse } from "../../src"; export const FUND_AMOUNT = 100_000_000; +export const TRANSFER_AMOUNT = 500_000; export const wallet = { address: "0x07968dab936c1bad187c60ce4082f307d030d780e91e694ae03aef16aba73f30", diff --git a/tests/unit/poseidon.test.ts b/tests/unit/poseidon.test.ts index 9d15d44af..cc9a25477 100644 --- a/tests/unit/poseidon.test.ts +++ b/tests/unit/poseidon.test.ts @@ -27,7 +27,10 @@ describe("Poseidon", () => { it("should convert bigint to array and back correctly", () => { const input = [BigInt(123), BigInt(321)]; for (let i = 0; i < input.length; i += 1) { - expect(input[i]).toEqual( bytesToBigIntLE(bigIntToBytesLE(input[i], 31))); + expect(input[i]).toEqual(bytesToBigIntLE(bigIntToBytesLE(input[i], 31))); } }); + it("should error if too many inputs", () => { + expect(() => poseidonHash(new Array(17).fill(0))).toThrow(); + }); }); diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index 73e16f512..ef178fd82 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -1,12 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { - Account, - Ed25519PrivateKey, - Serializer, - generateSigningMessageForTransaction, -} from "../../src"; +import { Account, Ed25519PrivateKey, Serializer, generateSigningMessageForTransaction } from "../../src"; import { AptsoDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHasher"; import { getAptosClient } from "../e2e/helper"; import { ed25519 } from "./helper"; From db25714e130400c89e8daec38eabcafc15fdb8e7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 06:08:35 -0400 Subject: [PATCH 108/136] whitespace --- examples/typescript/keyless.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index f2f6b7ecc..4170a5313 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -99,7 +99,7 @@ const example = async () => { amount: TRANSFER_AMOUNT, }); - const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); + const committedTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction }); await aptos.waitForTransaction({ transactionHash: committedTxn.hash }); console.log(`Committed transaction: ${committedTxn.hash}`); From 06e99b5ae83b434a110df282e3397c9ea3a5ee5d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 06:23:59 -0400 Subject: [PATCH 109/136] add docstring --- src/core/crypto/keyless.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 60e41ede3..bee33c55a 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -531,9 +531,18 @@ export class ZeroKnowledgeSig extends Signature { } } +/** + * A class which represents the on-chain configuration for how Keyless accounts work + */ export class KeylessConfiguration { + /** + * The verification key used to verify Groth16 proofs on chain + */ readonly verficationKey: Groth16VerificationKey; + /** + * The maximum lifespan of an ephemeral key pair. This is configured on chain. + */ readonly maxExpHorizonSecs: number; constructor(verficationKey: Groth16VerificationKey, maxExpHorizonSecs: number) { @@ -555,15 +564,35 @@ export class KeylessConfiguration { } } +/** + * A representation of the verification key stored on chain used to verify Groth16 proofs + */ class Groth16VerificationKey { + // The docstrings below are borrowed from ark-groth16 + + /** + * The `alpha * G`, where `G` is the generator of G1 + */ readonly alphaG1: G1Bytes; + /** + * The `alpha * H`, where `H` is the generator of G2 + */ readonly betaG2: G2Bytes; + /** + * The `delta * H`, where `H` is the generator of G2 + */ readonly deltaG2: G2Bytes; + /** + * The `gamma^{-1} * (beta * a_i + alpha * b_i + c_i) * H`, where H is the generator of G1 + */ readonly gammaAbcG1: G1Bytes[]; + /** + * The `gamma * H`, where `H` is the generator of G2 + */ readonly gammaG2: G2Bytes; constructor(args: { From 6fafcf530aa7ec0af61c73196d62c83ddce671f8 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 06:58:21 -0400 Subject: [PATCH 110/136] add error handling --- src/internal/keyless.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 1aed433a2..10b4fca3b 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -29,6 +29,7 @@ import { ProverResponse, } from "../types/keyless"; import { memoizeAsync } from "../utils/memoize"; +import { currentTimeInSeconds } from "../utils/helpers"; /** * Gets the parameters of how Keyless Accounts are configured on chain including the verifying key and the max expiry horizon @@ -66,7 +67,7 @@ async function getKeylessConfigurationResource(args: { const resourceType = "0x1::keyless_account::Configuration"; const { data } = await getAptosFullNode<{}, MoveResource>({ aptosConfig, - originMethod: "getKeylessConfiguration", + originMethod: "getKeylessConfigurationResource", path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, params: { ledger_version: options?.ledgerVersion }, }); @@ -88,7 +89,7 @@ async function getGroth16VerificationKeyResource(args: { const resourceType = "0x1::keyless_account::Groth16VerificationKey"; const { data } = await getAptosFullNode<{}, MoveResource>({ aptosConfig, - originMethod: "getGroth16VerificationKey", + originMethod: "getGroth16VerificationKeyResource", path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, params: { ledger_version: options?.ledgerVersion }, }); @@ -132,6 +133,9 @@ export async function getProof(args: { }): Promise { const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey = "sub" } = args; const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); + if (maxExpHorizonSecs < (ephemeralKeyPair.expiryDateSecs - currentTimeInSeconds()) ) { + throw Error(`The EphemeralKeyPair is too long lived. It's lifespan must be less than ${maxExpHorizonSecs}`) + } const json = { jwt_b64: jwt, epk: ephemeralKeyPair.getPublicKey().bcsToHex().toStringWithoutPrefix(), From e54ddc5270b61df76bd351a17b45f8c669de0e77 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 07:01:21 -0400 Subject: [PATCH 111/136] add comment --- src/internal/keyless.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 10b4fca3b..da2f94fe9 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -190,6 +190,11 @@ export async function deriveKeylessAccount(args: { } const proofPromise = getProof({ ...args, pepper }); + // If a callback is provided, pass in the proof as a promise to KeylessAccount.create. This will make the proof be fetched in the + // background and the callback will handle the outcome of the fetch. This allows the developer to not have to block on the proof fetch + // allowing for faster rendering of UX. + // + // If no callback is provided, the just await the proof fetch and continue syncronously. const proof = proofFetchCallback ? proofPromise : await proofPromise; const keylessAccount = KeylessAccount.create({ ...args, proof, pepper, proofFetchCallback }); From 6622ec44a17f8057f0e9a13f154d7d6e2cb323b0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 07:04:01 -0400 Subject: [PATCH 112/136] elaborate on callback docs --- src/utils/helpers.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 004c32eab..0974a8398 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -26,6 +26,12 @@ export function floorToWholeHour(timestampInSeconds: number): number { return Math.floor(date.getTime() / 1000); } +export function ceilingToWholeHour(timestampInSeconds: number): number { + const date = new Date(timestampInSeconds * 1000); + date.setHours(date.getHours() + 1); + return floorToWholeHour(date.getTime() / 1000) +} + export function base64UrlDecode(base64Url: string): string { // Replace base64url-specific characters const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); From cdecc9757e0010895ebb3d8263996cfc6037ef83 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 10:48:52 -0400 Subject: [PATCH 113/136] add docs --- src/api/keyless.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 37299f96b..d701f75a2 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -30,8 +30,10 @@ export class Keyless { * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment * @param args.pepper the pepper - * @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done asyncronously. Once - * if finishes the callback function will be called. + * @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done in the background. Once + * fetching finishes the callback function will be called. This should be used to provide a more responsive user experience as now + * they are not blocked on fetching the proof. Thus the function will return much more quickly. + * * @returns A KeylessAccount that can be used to sign transactions */ async deriveKeylessAccount(args: { From 88136ffaddf7508aded02d1fccf41902d453a282 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 10:49:42 -0400 Subject: [PATCH 114/136] fmt --- src/api/keyless.ts | 2 +- src/internal/keyless.ts | 4 ++-- src/utils/helpers.ts | 6 ------ 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/api/keyless.ts b/src/api/keyless.ts index d701f75a2..a417b6731 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -33,7 +33,7 @@ export class Keyless { * @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done in the background. Once * fetching finishes the callback function will be called. This should be used to provide a more responsive user experience as now * they are not blocked on fetching the proof. Thus the function will return much more quickly. - * + * * @returns A KeylessAccount that can be used to sign transactions */ async deriveKeylessAccount(args: { diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index da2f94fe9..df207171b 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -133,8 +133,8 @@ export async function getProof(args: { }): Promise { const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey = "sub" } = args; const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); - if (maxExpHorizonSecs < (ephemeralKeyPair.expiryDateSecs - currentTimeInSeconds()) ) { - throw Error(`The EphemeralKeyPair is too long lived. It's lifespan must be less than ${maxExpHorizonSecs}`) + if (maxExpHorizonSecs < ephemeralKeyPair.expiryDateSecs - currentTimeInSeconds()) { + throw Error(`The EphemeralKeyPair is too long lived. It's lifespan must be less than ${maxExpHorizonSecs}`); } const json = { jwt_b64: jwt, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 0974a8398..004c32eab 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -26,12 +26,6 @@ export function floorToWholeHour(timestampInSeconds: number): number { return Math.floor(date.getTime() / 1000); } -export function ceilingToWholeHour(timestampInSeconds: number): number { - const date = new Date(timestampInSeconds * 1000); - date.setHours(date.getHours() + 1); - return floorToWholeHour(date.getTime() / 1000) -} - export function base64UrlDecode(base64Url: string): string { // Replace base64url-specific characters const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); From 406b27edc0207f2cad61af613a2f2b740716553e Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 15:31:38 -0400 Subject: [PATCH 115/136] address comments --- examples/typescript/keyless.ts | 3 +- src/account/EphemeralKeyPair.ts | 6 +- src/account/KeylessAccount.ts | 4 - src/core/crypto/keyless.ts | 109 +++++-- src/internal/keyless.ts | 107 ++----- .../management/accountSequenceNumber.ts | 13 +- src/utils/helpers.ts | 4 +- tests/e2e/api/keyless.test.ts | 272 ++++++++++-------- 8 files changed, 269 insertions(+), 249 deletions(-) diff --git a/examples/typescript/keyless.ts b/examples/typescript/keyless.ts index 4170a5313..411433cd6 100644 --- a/examples/typescript/keyless.ts +++ b/examples/typescript/keyless.ts @@ -76,10 +76,9 @@ const example = async () => { // Fund the accounts console.log("\n=== Funding accounts ===\n"); - await aptos.faucet.fundAccount({ + await aptos.fundAccount({ accountAddress: alice.accountAddress, amount: ALICE_INITIAL_BALANCE, - options: { waitForIndexer: false }, }); await aptos.faucet.fundAccount({ accountAddress: bob.accountAddress, diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index 54160ebcc..ab6939a5d 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -14,7 +14,7 @@ import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; -import { currentTimeInSeconds, floorToWholeHour } from "../utils/helpers"; +import { floorToWholeHour, nowInSeconds } from "../utils/helpers"; export class EphemeralKeyPair extends Serializable { static readonly BLINDER_LENGTH: number = 31; @@ -55,7 +55,7 @@ export class EphemeralKeyPair extends Serializable { this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); // We set the expiry date to be the nearest floored hour - this.expiryDateSecs = expiryDateSecs || floorToWholeHour(currentTimeInSeconds() + EPK_HORIZON_SECS); + this.expiryDateSecs = expiryDateSecs || floorToWholeHour(nowInSeconds() + EPK_HORIZON_SECS); // Generate the blinder if not provided this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); // Calculate the nonce @@ -111,7 +111,7 @@ export class EphemeralKeyPair extends Serializable { * @param expiryDateSecs the date of expiry. * @return boolean */ - static generate(args?: { scheme: EphemeralPublicKeyVariant; expiryDateSecs?: number }): EphemeralKeyPair { + static generate(args?: { scheme?: EphemeralPublicKeyVariant; expiryDateSecs?: number }): EphemeralKeyPair { let privateKey: PrivateKey; switch (args?.scheme) { diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 2b0102575..1d5d574a1 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -26,10 +26,6 @@ import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/ty import { AptsoDomainSeparator, CryptoHashable } from "../core/crypto/cryptoHasher"; import { base64UrlDecode } from "../utils/helpers"; -export const IssuerToJwkEndpoint: Record = { - "https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs", -}; - /** * Account implementation for the Keyless authentication scheme. * diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index bee33c55a..5189018bf 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -6,13 +6,25 @@ import { AccountPublicKey, PublicKey } from "./publicKey"; import { Signature } from "./signature"; import { Deserializer, Serializable, Serializer } from "../../bcs"; import { Hex } from "../hex"; -import { HexInput, EphemeralCertificateVariant, AnyPublicKeyVariant, SigningScheme, ZkpVariant } from "../../types"; +import { + HexInput, + EphemeralCertificateVariant, + AnyPublicKeyVariant, + SigningScheme, + ZkpVariant, + LedgerVersionArg, + MoveResource, +} from "../../types"; import { EphemeralPublicKey, EphemeralSignature } from "./ephemeral"; import { bigIntToBytesLE, bytesToBigIntLE, hashStrToField, poseidonHash } from "./poseidon"; import { AuthenticationKey } from "../authenticationKey"; import { Proof } from "./proof"; import { Ed25519PublicKey, Ed25519Signature } from "./ed25519"; -import { Groth16VerificationKeyResponse } from "../../types/keyless"; +import { Groth16VerificationKeyResponse, KeylessConfigurationResponse } from "../../types/keyless"; +import { AptosConfig } from "../../api/aptosConfig"; +import { getAptosFullNode } from "../../client"; +import { memoizeAsync } from "../../utils/memoize"; +import { AccountAddress } from "../accountAddress"; export const EPK_HORIZON_SECS = 10000000; export const MAX_AUD_VAL_BYTES = 120; @@ -29,6 +41,9 @@ export const MAX_COMMITED_EPK_BYTES = 93; * KeylessPublicKey authentication key is represented in the SDK as `AnyPublicKey`. */ export class KeylessPublicKey extends AccountPublicKey { + /** + * The number of bytes that `idCommitment` should be + */ static readonly ID_COMMITMENT_LENGTH: number = 32; /** @@ -243,21 +258,6 @@ export class KeylessSignature extends Signature { }); } - static load(deserializer: Deserializer): KeylessSignature { - const ephemeralCertificate = EphemeralCertificate.deserialize(deserializer); - const jwtHeader = deserializer.deserializeStr(); - const expiryDateSecs = deserializer.deserializeU64(); - const ephemeralPublicKey = EphemeralPublicKey.deserialize(deserializer); - const ephemeralSignature = EphemeralSignature.deserialize(deserializer); - return new KeylessSignature({ - jwtHeader, - expiryDateSecs: Number(expiryDateSecs), - ephemeralCertificate, - ephemeralPublicKey, - ephemeralSignature, - }); - } - static getSimulationSignature(): KeylessSignature { return new KeylessSignature({ jwtHeader: "{}", @@ -520,15 +520,6 @@ export class ZeroKnowledgeSig extends Signature { const trainingWheelsSignature = deserializer.deserializeOption(EphemeralSignature); return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); } - - static load(deserializer: Deserializer): ZeroKnowledgeSig { - const proof = ZkProof.deserialize(deserializer); - const expHorizonSecs = Number(deserializer.deserializeU64()); - const extraField = deserializer.deserializeOptionStr(); - const overrideAudVal = deserializer.deserializeOptionStr(); - const trainingWheelsSignature = deserializer.deserializeOption(EphemeralSignature); - return new ZeroKnowledgeSig({ proof, expHorizonSecs, trainingWheelsSignature, extraField, overrideAudVal }); - } } /** @@ -620,3 +611,69 @@ class Groth16VerificationKey { }); } } + +/** + * Gets the parameters of how Keyless Accounts are configured on chain including the verifying key and the max expiry horizon + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns KeylessConfiguration + */ +export async function getKeylessConfig(args: { + aptosConfig: AptosConfig; + options?: LedgerVersionArg; +}): Promise { + const { aptosConfig } = args; + return memoizeAsync( + async () => { + const config = await getKeylessConfigurationResource(args); + const vk = await getGroth16VerificationKeyResource(args); + return KeylessConfiguration.create(vk, Number(config.max_exp_horizon_secs)); + }, + `keyless-configuration-${aptosConfig.network}`, + 1000 * 60 * 5, // 5 minutes + )(); +} + +/** + * Gets the KeylessConfiguration set on chain + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns KeylessConfigurationResponse + */ +async function getKeylessConfigurationResource(args: { + aptosConfig: AptosConfig; + options?: LedgerVersionArg; +}): Promise { + const { aptosConfig, options } = args; + const resourceType = "0x1::keyless_account::Configuration"; + const { data } = await getAptosFullNode<{}, MoveResource>({ + aptosConfig, + originMethod: "getKeylessConfigurationResource", + path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, + params: { ledger_version: options?.ledgerVersion }, + }); + + return data.data; +} + +/** + * Gets the Groth16VerificationKey set on chain + * + * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version + * @returns Groth16VerificationKeyResponse + */ +async function getGroth16VerificationKeyResource(args: { + aptosConfig: AptosConfig; + options?: LedgerVersionArg; +}): Promise { + const { aptosConfig, options } = args; + const resourceType = "0x1::keyless_account::Groth16VerificationKey"; + const { data } = await getAptosFullNode<{}, MoveResource>({ + aptosConfig, + originMethod: "getGroth16VerificationKeyResource", + path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, + params: { ledger_version: options?.ledgerVersion }, + }); + + return data.data; +} diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index df207171b..f6458ee0a 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -8,94 +8,12 @@ * keyless namespace and without having a dependency cycle error. */ import { AptosConfig } from "../api/aptosConfig"; -import { getAptosFullNode, postAptosPepperService, postAptosProvingService } from "../client"; -import { - AccountAddress, - EphemeralSignature, - Groth16Zkp, - Hex, - KeylessConfiguration, - ZeroKnowledgeSig, - ZkProof, -} from "../core"; -import { HexInput, LedgerVersionArg, MoveResource, ZkpVariant } from "../types"; +import { postAptosPepperService, postAptosProvingService } from "../client"; +import { EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof, getKeylessConfig } from "../core"; +import { EphemeralPublicKeyVariant, HexInput, ZkpVariant } from "../types"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { - Groth16VerificationKeyResponse, - KeylessConfigurationResponse, - PepperFetchRequest, - PepperFetchResponse, - ProverRequest, - ProverResponse, -} from "../types/keyless"; -import { memoizeAsync } from "../utils/memoize"; -import { currentTimeInSeconds } from "../utils/helpers"; - -/** - * Gets the parameters of how Keyless Accounts are configured on chain including the verifying key and the max expiry horizon - * - * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version - * @returns KeylessConfiguration - */ -async function getKeylessConfig(args: { - aptosConfig: AptosConfig; - options?: LedgerVersionArg; -}): Promise { - const { aptosConfig } = args; - return memoizeAsync( - async () => { - const config = await getKeylessConfigurationResource(args); - const vk = await getGroth16VerificationKeyResource(args); - return KeylessConfiguration.create(vk, Number(config.max_exp_horizon_secs)); - }, - `keyless-configuration-${aptosConfig.network}`, - 1000 * 60 * 5, // 5 minutes - )(); -} - -/** - * Gets the KeylessConfiguration set on chain - * - * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version - * @returns KeylessConfigurationResponse - */ -async function getKeylessConfigurationResource(args: { - aptosConfig: AptosConfig; - options?: LedgerVersionArg; -}): Promise { - const { aptosConfig, options } = args; - const resourceType = "0x1::keyless_account::Configuration"; - const { data } = await getAptosFullNode<{}, MoveResource>({ - aptosConfig, - originMethod: "getKeylessConfigurationResource", - path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, - params: { ledger_version: options?.ledgerVersion }, - }); - - return data.data; -} - -/** - * Gets the Groth16VerificationKey set on chain - * - * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version - * @returns Groth16VerificationKeyResponse - */ -async function getGroth16VerificationKeyResource(args: { - aptosConfig: AptosConfig; - options?: LedgerVersionArg; -}): Promise { - const { aptosConfig, options } = args; - const resourceType = "0x1::keyless_account::Groth16VerificationKey"; - const { data } = await getAptosFullNode<{}, MoveResource>({ - aptosConfig, - originMethod: "getGroth16VerificationKeyResource", - path: `accounts/${AccountAddress.from("0x1").toString()}/resource/${resourceType}`, - params: { ledger_version: options?.ledgerVersion }, - }); - - return data.data; -} +import { PepperFetchRequest, PepperFetchResponse, ProverRequest, ProverResponse } from "../types/keyless"; +import { floorToWholeHour, nowInSeconds } from "../utils/helpers"; export async function getPepper(args: { aptosConfig: AptosConfig; @@ -133,7 +51,7 @@ export async function getProof(args: { }): Promise { const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey = "sub" } = args; const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); - if (maxExpHorizonSecs < ephemeralKeyPair.expiryDateSecs - currentTimeInSeconds()) { + if (maxExpHorizonSecs < ephemeralKeyPair.expiryDateSecs - nowInSeconds()) { throw Error(`The EphemeralKeyPair is too long lived. It's lifespan must be less than ${maxExpHorizonSecs}`); } const json = { @@ -169,6 +87,19 @@ export async function getProof(args: { return signedProof; } +export async function generateEphemeralKeyPair(args: { + aptosConfig: AptosConfig; + scheme?: EphemeralPublicKeyVariant; + expiryDateSecs?: number; +}): Promise { + const { aptosConfig, scheme, expiryDateSecs } = args; + const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); + return EphemeralKeyPair.generate({ + scheme, + expiryDateSecs: expiryDateSecs || floorToWholeHour(nowInSeconds() + maxExpHorizonSecs), + }); +} + export async function deriveKeylessAccount(args: { aptosConfig: AptosConfig; jwt: string; diff --git a/src/transactions/management/accountSequenceNumber.ts b/src/transactions/management/accountSequenceNumber.ts index 9b13e3b5d..681f1de76 100644 --- a/src/transactions/management/accountSequenceNumber.ts +++ b/src/transactions/management/accountSequenceNumber.ts @@ -26,10 +26,7 @@ import { AptosConfig } from "../../api/aptosConfig"; import { Account } from "../../account"; import { getInfo } from "../../internal/account"; -import { sleep } from "../../utils/helpers"; - -// returns `now` time in seconds -const now = () => Math.floor(Date.now() / 1000); +import { nowInSeconds, sleep } from "../../utils/helpers"; export class AccountSequenceNumber { readonly aptosConfig: AptosConfig; @@ -96,10 +93,10 @@ export class AccountSequenceNumber { if (this.currentNumber! - this.lastUncommintedNumber! >= this.maximumInFlight) { await this.update(); - const startTime = now(); + const startTime = nowInSeconds(); while (this.currentNumber! - this.lastUncommintedNumber! >= this.maximumInFlight) { await sleep(this.sleepTime); - if (now() - startTime > this.maxWaitTime) { + if (nowInSeconds() - startTime > this.maxWaitTime) { /* eslint-disable no-console */ console.warn( `Waited over 30 seconds for a transaction to commit, resyncing ${this.account.accountAddress.toString()}`, @@ -164,9 +161,9 @@ export class AccountSequenceNumber { try { await this.update(); - const startTime = now(); + const startTime = nowInSeconds(); while (this.lastUncommintedNumber !== this.currentNumber) { - if (now() - startTime > this.maxWaitTime) { + if (nowInSeconds() - startTime > this.maxWaitTime) { /* eslint-disable no-console */ console.warn( `Waited over 30 seconds for a transaction to commit, resyncing ${this.account.accountAddress.toString()}`, diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 004c32eab..6a879af4a 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -13,9 +13,7 @@ export async function sleep(timeMs: number): Promise { }); } -export function currentTimeInSeconds(): number { - return Math.floor(new Date().getTime() / 1000); -} +export const nowInSeconds = () => Math.floor(Date.now() / 1000); export function floorToWholeHour(timestampInSeconds: number): number { const date = new Date(timestampInSeconds * 1000); diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index d1cd9152c..cbfbaecc3 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -29,6 +29,8 @@ export const EPHEMERAL_KEY_PAIR = new EphemeralKeyPair({ blinder: new Uint8Array(31), }); +const KEYLESS_TEST_TIMEOUT = 10000; + describe("keyless api", () => { const ephemeralKeyPair = EPHEMERAL_KEY_PAIR; // TODO: Make this work for local by spinning up a local proving service. @@ -39,7 +41,7 @@ describe("keyless api", () => { const promises = TEST_JWT_TOKENS.map(async (jwt) => { const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); const accountAddress = KeylessPublicKey.fromJWTAndPepper({ jwt, pepper }).authKey().derivedAddress(); - await aptos.faucet.fundAccount({ + await aptos.fundAccount({ accountAddress, amount: FUND_AMOUNT, }); @@ -48,119 +50,159 @@ describe("keyless api", () => { await Promise.all(promises); }, 30000); describe("keyless account", () => { - test("derives the keyless account and submits a transaction", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, 10000); - - test("derives the keyless account with email uidKey and submits a transaction", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, uidKey: "email" }); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, 10000); - - test("derives the keyless account with custom pepper and submits a transaction", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, 10000); - - test("derives the keyless account with custom pepper and submits a transaction", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, 10000); - - test("deriving keyless account with async proof fetch executes callback", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - let succeeded = false; - const proofFetchCallback = async (res: ProofFetchStatus) => { - if (res.status === "Failed") { - return; - } - succeeded = true; - }; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); - expect(succeeded).toBeFalsy(); - await account.waitForProofFetch(); - expect(succeeded).toBeTruthy(); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, 10000); - - test("derives the keyless account with async proof fetch and submits a transaction", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const proofFetchCallback = async () => {}; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); - const transaction = await aptos.transferCoinTransaction({ - sender: account.accountAddress, - recipient: account.accountAddress, - amount: TRANSFER_AMOUNT, - }); - const pendingTxn = await aptos.signAndSubmitTransaction({ signer: account, transaction }); - await aptos.waitForTransaction({ transactionHash: pendingTxn.hash }); - }, 10000); - - test("deriving keyless account with async proof fetch throws when trying to immediately sign", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const proofFetchCallback = async () => {}; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); - const transaction = await aptos.transferCoinTransaction({ - sender: account.accountAddress, - recipient: account.accountAddress, - amount: TRANSFER_AMOUNT, - }); - expect(() => account.signTransaction(transaction)).toThrow(); - await account.waitForProofFetch(); - account.signTransaction(transaction); - }, 10000); - - test("deriving keyless account using all parameters", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const proofFetchCallback = async () => {}; - const account = await aptos.deriveKeylessAccount({ - jwt, - ephemeralKeyPair, - uidKey: "email", - pepper: new Uint8Array(31), - proofFetchCallback, - }); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, 10000); - - test("simulation works correctly", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); - const transaction = await aptos.transferCoinTransaction({ - sender: account.accountAddress, - recipient: account.accountAddress, - amount: TRANSFER_AMOUNT, - }); - await aptos.transaction.simulate.simple({ signerPublicKey: account.publicKey, transaction }); - }, 10000); - - test("serializes and deserializes", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); - const bytes = account.bcsToBytes(); - const deserializedAccount = KeylessAccount.fromBytes(bytes); - expect(bytes).toEqual(deserializedAccount.bcsToBytes()); - }, 10000); + test( + "derives the keyless account and submits a transaction", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "derives the keyless account with email uidKey and submits a transaction", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, uidKey: "email" }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "derives the keyless account with custom pepper and submits a transaction", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "derives the keyless account with custom pepper and submits a transaction", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "deriving keyless account with async proof fetch executes callback", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + let succeeded = false; + const proofFetchCallback = async (res: ProofFetchStatus) => { + if (res.status === "Failed") { + return; + } + succeeded = true; + }; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + expect(succeeded).toBeFalsy(); + await account.waitForProofFetch(); + expect(succeeded).toBeTruthy(); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "derives the keyless account with async proof fetch and submits a transaction", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const proofFetchCallback = async () => {}; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + const transaction = await aptos.transferCoinTransaction({ + sender: account.accountAddress, + recipient: account.accountAddress, + amount: TRANSFER_AMOUNT, + }); + const pendingTxn = await aptos.signAndSubmitTransaction({ signer: account, transaction }); + await aptos.waitForTransaction({ transactionHash: pendingTxn.hash }); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "deriving keyless account with async proof fetch throws when trying to immediately sign", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const proofFetchCallback = async () => {}; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + const transaction = await aptos.transferCoinTransaction({ + sender: account.accountAddress, + recipient: account.accountAddress, + amount: TRANSFER_AMOUNT, + }); + expect(() => account.signTransaction(transaction)).toThrow(); + await account.waitForProofFetch(); + account.signTransaction(transaction); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "deriving keyless account using all parameters", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const proofFetchCallback = async () => {}; + const account = await aptos.deriveKeylessAccount({ + jwt, + ephemeralKeyPair, + uidKey: "email", + pepper: new Uint8Array(31), + proofFetchCallback, + }); + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "simulation works correctly", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const transaction = await aptos.transferCoinTransaction({ + sender: account.accountAddress, + recipient: account.accountAddress, + amount: TRANSFER_AMOUNT, + }); + await aptos.transaction.simulate.simple({ signerPublicKey: account.publicKey, transaction }); + }, + KEYLESS_TEST_TIMEOUT, + ); + + test( + "serializes and deserializes", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const bytes = account.bcsToBytes(); + const deserializedAccount = KeylessAccount.fromBytes(bytes); + expect(bytes).toEqual(deserializedAccount.bcsToBytes()); + }, + KEYLESS_TEST_TIMEOUT, + ); }); }); From c1410ba6c1f0d162d3cf2c6b657d47fa48421120 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 15:35:25 -0400 Subject: [PATCH 116/136] Add docstrings --- src/account/EphemeralKeyPair.ts | 5 +++++ src/api/keyless.ts | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index ab6939a5d..d87bef1f3 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -16,6 +16,11 @@ import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; import { floorToWholeHour, nowInSeconds } from "../utils/helpers"; +/** + * A class which contains a key pair that is used in signing transactions via the Keyless authentication scheme. This key pair + * is ephemeral and has an expiration time. For more details on how this class is used - + * https://aptos.dev/guides/keyless-accounts/#1-present-the-user-with-a-sign-in-with-idp-button-on-the-ui + */ export class EphemeralKeyPair extends Serializable { static readonly BLINDER_LENGTH: number = 31; diff --git a/src/api/keyless.ts b/src/api/keyless.ts index a417b6731..2367babb9 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -8,6 +8,9 @@ import { AptosConfig } from "./aptosConfig"; /** * A class to query all `Keyless` related queries on Aptos. + * + * More documentation on how to integrate Keyless Accounts see the below + * https://aptos.dev/guides/keyless-accounts/#aptos-keyless-integration-guide */ export class Keyless { constructor(readonly config: AptosConfig) {} From 41bb6487475da6acdd3a5e792b70e5b8f3aa9cfe Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 15:36:51 -0400 Subject: [PATCH 117/136] fmt --- src/api/keyless.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 2367babb9..7b8c73a94 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -8,7 +8,7 @@ import { AptosConfig } from "./aptosConfig"; /** * A class to query all `Keyless` related queries on Aptos. - * + * * More documentation on how to integrate Keyless Accounts see the below * https://aptos.dev/guides/keyless-accounts/#aptos-keyless-integration-guide */ From 824bada69f7459a8e88aab5e5db1ca94c95e94cd Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 16:07:36 -0400 Subject: [PATCH 118/136] update --- src/account/KeylessAccount.ts | 2 +- src/api/keyless.ts | 20 +++++++++++++++++-- .../{cryptoHasher.ts => cryptoHashable.ts} | 0 .../transactionBuilder/signingMessage.ts | 16 +++++++++++++++ tests/unit/signingMessage.test.ts | 2 +- 5 files changed, 36 insertions(+), 4 deletions(-) rename src/core/crypto/{cryptoHasher.ts => cryptoHashable.ts} (100%) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 1d5d574a1..b090ea7ff 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -23,7 +23,7 @@ import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/acc import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; -import { AptsoDomainSeparator, CryptoHashable } from "../core/crypto/cryptoHasher"; +import { AptsoDomainSeparator, CryptoHashable } from "../core/crypto/cryptoHashable"; import { base64UrlDecode } from "../utils/helpers"; /** diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 7b8c73a94..5acd14f76 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { deriveKeylessAccount, getPepper } from "../internal/keyless"; -import { HexInput } from "../types"; +import { deriveKeylessAccount, generateEphemeralKeyPair, getPepper } from "../internal/keyless"; +import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; /** @@ -15,6 +15,22 @@ import { AptosConfig } from "./aptosConfig"; export class Keyless { constructor(readonly config: AptosConfig) {} + /** + * Generates an EphemeralKeyPair. It checks the maxExpHorizonSecs set on chain at 0x1::keyless_account::Configuration to + * ensure the expiry date is valid. If expiryDateSecs is not set, defaults setting the expiry to the maximum allowed + * with respect to the Keyless configuration. + * + * @param scheme the type of keypair to use for the EphemeralKeyPair. Only Ed25519 supported for now. + * @param expiryDateSecs the date of expiry. + * @returns EphemeralKeyPair + */ + async generateEphemeralKeyPair(args?: { + scheme?: EphemeralPublicKeyVariant; + expiryDateSecs?: number; + }): Promise { + return generateEphemeralKeyPair({ aptosConfig: this.config, ...args }); + } + /** * Fetches the pepper from the Aptos pepper service API. * diff --git a/src/core/crypto/cryptoHasher.ts b/src/core/crypto/cryptoHashable.ts similarity index 100% rename from src/core/crypto/cryptoHasher.ts rename to src/core/crypto/cryptoHashable.ts diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index 5e77e92cb..0041b112e 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -8,6 +8,7 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; import { FeePayerRawTransaction, MultiAgentRawTransaction } from "../instances"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; +import { Serializable } from "../../bcs/serializer"; /** * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction @@ -59,6 +60,21 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin return mergedArray; } +/** + * @deprected + * Use CryptoHashable instead by having your class implement it and call hash() to get the signing message. + * + * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of + * its constructor as the domain separator. + * + * @param serializable An object that has a bcs serialized form + * + * @returns The Uint8Array of the signing message + */ +export function generateSigningMessageForSerializable(serializable: Serializable): Uint8Array { + return generateSigningMessage(serializable.bcsToBytes(), `APTOS::${serializable.constructor.name}`); +} + /** * Generates the 'signing message' form of a transaction. It derives the type of transaction and * applies the appropriate domain separator based on if there is extra data such as a fee payer or diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index ef178fd82..f9da63fe8 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { Account, Ed25519PrivateKey, Serializer, generateSigningMessageForTransaction } from "../../src"; -import { AptsoDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHasher"; +import { AptsoDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHashable"; import { getAptosClient } from "../e2e/helper"; import { ed25519 } from "./helper"; From 797d6b0c0d4a352ba2fc6c897547ff237393df70 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 16:08:50 -0400 Subject: [PATCH 119/136] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed4d47c2f..12e5fa32a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,13 @@ All notable changes to the Aptos TypeScript SDK will be captured in this file. This changelog is written by hand for now. It adheres to the format set out by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Unreleased +- Adds Keyless Account support # 1.17.0 (2024-05-30) - TypeTag parsing now support references, uppercase types, and more complete error handling - Allow simple string inputs as type arguments in move scripts - [`Fix`] Block APIs will now pull all associated transactions in the block, not just the first `100` -- Adds Keyless Account support # 1.16.0 (2024-05-22) From 605629a02a201ac475629caab55b87231ad59519 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 17:34:56 -0400 Subject: [PATCH 120/136] remove async genEPK --- src/account/EphemeralKeyPair.ts | 14 +++++--------- src/api/keyless.ts | 20 ++------------------ src/internal/keyless.ts | 17 ++--------------- tests/e2e/api/keyless.test.ts | 4 ++-- 4 files changed, 11 insertions(+), 44 deletions(-) diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index d87bef1f3..a0e4ffb75 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -3,19 +3,15 @@ import { randomBytes } from "@noble/hashes/utils"; -import { - EPK_HORIZON_SECS, - Ed25519PrivateKey, - EphemeralPublicKey, - EphemeralSignature, - PrivateKey, -} from "../core/crypto"; +import { Ed25519PrivateKey, EphemeralPublicKey, EphemeralSignature, PrivateKey } from "../core/crypto"; import { Hex } from "../core/hex"; import { bytesToBigIntLE, padAndPackBytesWithLen, poseidonHash } from "../core/crypto/poseidon"; import { EphemeralPublicKeyVariant, HexInput } from "../types"; import { Deserializer, Serializable, Serializer } from "../bcs"; import { floorToWholeHour, nowInSeconds } from "../utils/helpers"; +const TWO_WEEKS_IN_SECONDS = 1_209_600; + /** * A class which contains a key pair that is used in signing transactions via the Keyless authentication scheme. This key pair * is ephemeral and has an expiration time. For more details on how this class is used - @@ -59,8 +55,8 @@ export class EphemeralKeyPair extends Serializable { const { privateKey, expiryDateSecs, blinder } = args; this.privateKey = privateKey; this.publicKey = new EphemeralPublicKey(privateKey.publicKey()); - // We set the expiry date to be the nearest floored hour - this.expiryDateSecs = expiryDateSecs || floorToWholeHour(nowInSeconds() + EPK_HORIZON_SECS); + // By default, we set the expiry date to be two weeks in the future floored to the nearest hour + this.expiryDateSecs = expiryDateSecs || floorToWholeHour(nowInSeconds() + TWO_WEEKS_IN_SECONDS); // Generate the blinder if not provided this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); // Calculate the nonce diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 5acd14f76..7b8c73a94 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { deriveKeylessAccount, generateEphemeralKeyPair, getPepper } from "../internal/keyless"; -import { EphemeralPublicKeyVariant, HexInput } from "../types"; +import { deriveKeylessAccount, getPepper } from "../internal/keyless"; +import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; /** @@ -15,22 +15,6 @@ import { AptosConfig } from "./aptosConfig"; export class Keyless { constructor(readonly config: AptosConfig) {} - /** - * Generates an EphemeralKeyPair. It checks the maxExpHorizonSecs set on chain at 0x1::keyless_account::Configuration to - * ensure the expiry date is valid. If expiryDateSecs is not set, defaults setting the expiry to the maximum allowed - * with respect to the Keyless configuration. - * - * @param scheme the type of keypair to use for the EphemeralKeyPair. Only Ed25519 supported for now. - * @param expiryDateSecs the date of expiry. - * @returns EphemeralKeyPair - */ - async generateEphemeralKeyPair(args?: { - scheme?: EphemeralPublicKeyVariant; - expiryDateSecs?: number; - }): Promise { - return generateEphemeralKeyPair({ aptosConfig: this.config, ...args }); - } - /** * Fetches the pepper from the Aptos pepper service API. * diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index f6458ee0a..35a3bcbfd 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -10,10 +10,10 @@ import { AptosConfig } from "../api/aptosConfig"; import { postAptosPepperService, postAptosProvingService } from "../client"; import { EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof, getKeylessConfig } from "../core"; -import { EphemeralPublicKeyVariant, HexInput, ZkpVariant } from "../types"; +import { HexInput, ZkpVariant } from "../types"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; import { PepperFetchRequest, PepperFetchResponse, ProverRequest, ProverResponse } from "../types/keyless"; -import { floorToWholeHour, nowInSeconds } from "../utils/helpers"; +import { nowInSeconds } from "../utils/helpers"; export async function getPepper(args: { aptosConfig: AptosConfig; @@ -87,19 +87,6 @@ export async function getProof(args: { return signedProof; } -export async function generateEphemeralKeyPair(args: { - aptosConfig: AptosConfig; - scheme?: EphemeralPublicKeyVariant; - expiryDateSecs?: number; -}): Promise { - const { aptosConfig, scheme, expiryDateSecs } = args; - const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); - return EphemeralKeyPair.generate({ - scheme, - expiryDateSecs: expiryDateSecs || floorToWholeHour(nowInSeconds() + maxExpHorizonSecs), - }); -} - export async function deriveKeylessAccount(args: { aptosConfig: AptosConfig; jwt: string; diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index cbfbaecc3..e60fd626f 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -25,11 +25,11 @@ export const TEST_JWT_TOKENS = [ export const EPHEMERAL_KEY_PAIR = new EphemeralKeyPair({ privateKey: new Ed25519PrivateKey("0x1111111111111111111111111111111111111111111111111111111111111111"), - expiryDateSecs: 1724497501, + expiryDateSecs: 1724497501, // Expires Saturday, August 24, 2024 11:05:01 AM GMT blinder: new Uint8Array(31), }); -const KEYLESS_TEST_TIMEOUT = 10000; +const KEYLESS_TEST_TIMEOUT = 12000; describe("keyless api", () => { const ephemeralKeyPair = EPHEMERAL_KEY_PAIR; From 4f53446aa022dc717c27d103bf5f3c3827e54f5d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 17:45:47 -0400 Subject: [PATCH 121/136] clean up --- src/account/KeylessAccount.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index b090ea7ff..e6bd16006 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -94,13 +94,7 @@ export class KeylessAccount extends Serializable implements Account { /** * The JWT token used to derive the account */ - private jwt: string; - - /** - * A value that caches the JWT's validity. A JWT becomes invalid when it's corresponding JWK is rotated from the - * identity provider's JWK keyset. - */ - private isJwtValid: boolean; + readonly jwt: string; /** * An event emitter used to assist in handling asycronous proof fetching. @@ -148,7 +142,6 @@ export class KeylessAccount extends Serializable implements Account { throw new Error(`Pepper length in bytes should be ${KeylessAccount.PEPPER_LENGTH}`); } this.pepper = pepperBytes; - this.isJwtValid = true; } /** From 7f2ec01fa8b7c91e4d3d76017b31070742deb26c Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 17:51:05 -0400 Subject: [PATCH 122/136] remove jose --- package.json | 1 - pnpm-lock.yaml | 8815 ++++++++++++++++++++++++++---------------------- 2 files changed, 4849 insertions(+), 3967 deletions(-) diff --git a/package.json b/package.json index 018f2f0e2..a0d3358ef 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ "@scure/bip39": "^1.3.0", "eventemitter3": "^5.0.1", "form-data": "^4.0.0", - "jose": "^5.1.3", "js-base64": "^3.7.7", "jwt-decode": "^4.0.0", "poseidon-lite": "^0.2.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 555102c9f..2bb2d4550 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,174 +1,3929 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@aptos-labs/aptos-cli': - specifier: ^0.1.2 - version: 0.1.2 - '@aptos-labs/aptos-client': - specifier: ^0.1.0 - version: 0.1.0 - '@noble/curves': - specifier: ^1.4.0 - version: 1.4.0 - '@noble/hashes': - specifier: ^1.4.0 - version: 1.4.0 - '@scure/bip32': - specifier: ^1.4.0 - version: 1.4.0 - '@scure/bip39': - specifier: ^1.3.0 - version: 1.3.0 - eventemitter3: - specifier: ^5.0.1 - version: 5.0.1 - form-data: - specifier: ^4.0.0 - version: 4.0.0 - jose: - specifier: ^5.1.3 - version: 5.2.3 - js-base64: - specifier: ^3.7.7 - version: 3.7.7 - jwt-decode: - specifier: ^4.0.0 - version: 4.0.0 - poseidon-lite: - specifier: ^0.2.0 - version: 0.2.0 - -devDependencies: - '@babel/traverse': - specifier: ^7.23.6 - version: 7.23.6 - '@graphql-codegen/cli': - specifier: ^5.0.0 - version: 5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3) - '@graphql-codegen/import-types-preset': - specifier: ^3.0.0 - version: 3.0.0(graphql@16.8.1) - '@graphql-codegen/typescript': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@graphql-codegen/typescript-graphql-request': - specifier: ^6.0.1 - version: 6.0.1(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1) - '@graphql-codegen/typescript-operations': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@types/base-64': - specifier: ^1.0.2 - version: 1.0.2 - '@types/jest': - specifier: ^29.5.11 - version: 29.5.11 - '@types/jsonwebtoken': - specifier: ^9.0.6 - version: 9.0.6 - '@types/node': - specifier: ^20.10.4 - version: 20.10.4 - '@typescript-eslint/eslint-plugin': - specifier: ^6.14.0 - version: 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: ^6.14.0 - version: 6.14.0(eslint@8.55.0)(typescript@5.3.3) - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - eslint: - specifier: ^8.55.0 - version: 8.55.0 - eslint-config-airbnb-base: - specifier: ^15.0.0 - version: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0) - eslint-config-airbnb-typescript: - specifier: ^17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.0)(eslint@8.55.0) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.55.0) - eslint-plugin-import: - specifier: ^2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) - graphql: - specifier: ^16.8.1 - version: 16.8.1 - graphql-request: - specifier: ^6.1.0 - version: 6.1.0(graphql@16.8.1) - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 - prettier: - specifier: ^3.1.1 - version: 3.1.1 - tree-kill: - specifier: ^1.2.2 - version: 1.2.2 - ts-jest: - specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.22.5)(esbuild@0.19.9)(jest@29.7.0)(typescript@5.3.3) - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.3.3)(webpack@5.88.2) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) - tsup: - specifier: ^8.0.1 - version: 8.0.1(ts-node@10.9.2)(typescript@5.3.3) - typedoc: - specifier: ^0.25.4 - version: 0.25.4(typescript@5.3.3) - typescript: - specifier: ^5.3.3 - version: 5.3.3 +importers: + + .: + dependencies: + '@aptos-labs/aptos-cli': + specifier: ^0.1.2 + version: 0.1.2 + '@aptos-labs/aptos-client': + specifier: ^0.1.0 + version: 0.1.0 + '@noble/curves': + specifier: ^1.4.0 + version: 1.4.0 + '@noble/hashes': + specifier: ^1.4.0 + version: 1.4.0 + '@scure/bip32': + specifier: ^1.4.0 + version: 1.4.0 + '@scure/bip39': + specifier: ^1.3.0 + version: 1.3.0 + eventemitter3: + specifier: ^5.0.1 + version: 5.0.1 + form-data: + specifier: ^4.0.0 + version: 4.0.0 + js-base64: + specifier: ^3.7.7 + version: 3.7.7 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 + poseidon-lite: + specifier: ^0.2.0 + version: 0.2.0 + devDependencies: + '@babel/traverse': + specifier: ^7.23.6 + version: 7.23.6 + '@graphql-codegen/cli': + specifier: ^5.0.0 + version: 5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3) + '@graphql-codegen/import-types-preset': + specifier: ^3.0.0 + version: 3.0.0(graphql@16.8.1) + '@graphql-codegen/typescript': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript-graphql-request': + specifier: ^6.0.1 + version: 6.0.1(graphql-request@6.1.0(graphql@16.8.1))(graphql-tag@2.12.6(graphql@16.8.1))(graphql@16.8.1) + '@graphql-codegen/typescript-operations': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.8.1) + '@types/base-64': + specifier: ^1.0.2 + version: 1.0.2 + '@types/jest': + specifier: ^29.5.11 + version: 29.5.11 + '@types/jsonwebtoken': + specifier: ^9.0.6 + version: 9.0.6 + '@types/node': + specifier: ^20.10.4 + version: 20.10.4 + '@typescript-eslint/eslint-plugin': + specifier: ^6.14.0 + version: 6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: ^6.14.0 + version: 6.14.0(eslint@8.55.0)(typescript@5.3.3) + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + eslint: + specifier: ^8.55.0 + version: 8.55.0 + eslint-config-airbnb-base: + specifier: ^15.0.0 + version: 15.0.0(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0) + eslint-config-airbnb-typescript: + specifier: ^17.1.0 + version: 17.1.0(@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3))(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.55.0) + eslint-plugin-import: + specifier: ^2.29.0 + version: 2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0) + graphql: + specifier: ^16.8.1 + version: 16.8.1 + graphql-request: + specifier: ^6.1.0 + version: 6.1.0(graphql@16.8.1) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + prettier: + specifier: ^3.1.1 + version: 3.1.1 + tree-kill: + specifier: ^1.2.2 + version: 1.2.2 + ts-jest: + specifier: ^29.1.1 + version: 29.1.1(@babel/core@7.22.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.5))(esbuild@0.19.9)(jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)))(typescript@5.3.3) + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.3.3)(webpack@5.88.2(esbuild@0.19.9)) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + tsup: + specifier: ^8.0.1 + version: 8.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3))(typescript@5.3.3) + typedoc: + specifier: ^0.25.4 + version: 0.25.4(typescript@5.3.3) + typescript: + specifier: ^5.3.3 + version: 5.3.3 + +packages: + + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + '@ampproject/remapping@2.2.1': + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + + '@aptos-labs/aptos-cli@0.1.2': + resolution: {integrity: sha512-MCi+9xPDG/Fx6c6b9ACqyQBYJLHqKJQKB8lay/1sUNJ2mNBB2OU1Lkmd5pmjUG1JbZ5cg2Fmgid5iMKdTnphhA==} + hasBin: true + + '@aptos-labs/aptos-client@0.1.0': + resolution: {integrity: sha512-q3s6pPq8H2buGp+tPuIRInWsYOuhSEwuNJPwd2YnsiID3YSLihn2ug39ktDJAcSOprUcp7Nid8WK7hKqnUmSdA==} + engines: {node: '>=15.10.0'} + + '@ardatan/relay-compiler@12.0.0': + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + hasBin: true + peerDependencies: + graphql: '*' + + '@ardatan/sync-fetch@0.0.1': + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + + '@babel/code-frame@7.22.13': + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.22.5': + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.23.5': + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.22.9': + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.22.5': + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.23.2': + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.22.5': + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.23.0': + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.23.6': + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.22.5': + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.22.15': + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.22.15': + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.23.0': + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.23.0': + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.23.0': + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.22.5': + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.22.5': + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.22.20': + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.22.5': + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.23.4': + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.22.15': + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.22.5': + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.23.2': + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.20': + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.5': + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.23.4': + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.22.5': + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.23.0': + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.23.6': + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-class-properties@7.18.6': + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-object-rest-spread@7.20.7': + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-flow@7.22.5': + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.22.5': + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.22.5': + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.22.5': + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-arrow-functions@7.22.5': + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.22.5': + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.23.0': + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-classes@7.22.15': + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.22.5': + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.23.0': + resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-flow-strip-types@7.22.5': + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.22.15': + resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.22.5': + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.22.5': + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.22.5': + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.23.0': + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.22.5': + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.22.15': + resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.22.5': + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.22.5': + resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.22.15': + resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.22.5': + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.22.5': + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.22.5': + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.23.1': + resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.22.15': + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.22.5': + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.23.6': + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.23.0': + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.23.6': + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@esbuild/android-arm64@0.19.9': + resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.19.9': + resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.19.9': + resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.19.9': + resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.9': + resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.19.9': + resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.9': + resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.19.9': + resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.19.9': + resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.19.9': + resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.19.9': + resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.19.9': + resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.19.9': + resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.9': + resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.19.9': + resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.19.9': + resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.19.9': + resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.19.9': + resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.19.9': + resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.19.9': + resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.19.9': + resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.19.9': + resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.55.0': + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@graphql-codegen/add@3.2.3': + resolution: {integrity: sha512-sQOnWpMko4JLeykwyjFTxnhqjd/3NOG2OyMuvK76Wnnwh8DRrNf2VEs2kmSvLl7MndMlOj7Kh5U154dVcvhmKQ==} + 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 + + '@graphql-codegen/cli@5.0.0': + resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + 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 + peerDependenciesMeta: + '@parcel/watcher': + optional: true + + '@graphql-codegen/core@4.0.0': + resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} + 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 + + '@graphql-codegen/import-types-preset@3.0.0': + resolution: {integrity: sha512-8Gl3cg+YCi0xLB5J71QQkqXvrdJVOTitJy+0YupconZwrd9cRWhN3k+SimtMKpzTVBNN96v1R8yvFLdfVF+iZA==} + engines: {node: '>= 16.0.0'} + 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 + + '@graphql-codegen/plugin-helpers@2.7.2': + resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} + 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 + + '@graphql-codegen/plugin-helpers@3.1.2': + resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} + 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 + + '@graphql-codegen/plugin-helpers@5.0.1': + resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} + 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 + + '@graphql-codegen/schema-ast@4.0.0': + resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} + 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 + + '@graphql-codegen/typescript-graphql-request@6.0.1': + resolution: {integrity: sha512-aScw7ICyscW7bYLh2HyjQU3geCAjvFy6sRIlzgdkeFvcKBdjCil69upkyZAyntnSno2C4ZoUv7sHOpyQ9hQmFQ==} + engines: {node: '>= 16.0.0'} + 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 + graphql-request: ^6.0.0 + graphql-tag: ^2.0.0 + + '@graphql-codegen/typescript-operations@4.0.1': + resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} + 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 + + '@graphql-codegen/typescript@4.0.1': + resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/visitor-plugin-common@2.13.1': + resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} + 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 + + '@graphql-codegen/visitor-plugin-common@4.0.1': + resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} + 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 + + '@graphql-tools/apollo-engine-loader@8.0.0': + resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/batch-execute@9.0.2': + resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/code-file-loader@8.0.3': + resolution: {integrity: sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/delegate@10.0.3': + resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-graphql-ws@1.1.0': + resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-http@1.0.3': + resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-legacy-ws@1.0.4': + resolution: {integrity: sha512-b7aGuRekZDS+m3af3BIvMKxu15bmVPMt5eGQVuP2v5pxmbaPTh+iv5mx9b3Plt32z5Ke5tycBnNm5urSFtW8ng==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor@1.2.0': + resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/git-loader@8.0.3': + resolution: {integrity: sha512-Iz9KbRUAkuOe8JGTS0qssyJ+D5Snle17W+z9anwWrLFrkBhHrRFUy5AdjZqgJuhls0x30QkZBnnCtnHDBdQ4nA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/github-loader@8.0.0': + resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-file-loader@8.0.0': + resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-tag-pluck@8.1.0': + resolution: {integrity: sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/import@7.0.0': + resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/json-file-loader@8.0.0': + resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/load@8.0.0': + resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/merge@9.0.0': + resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@1.4.0': + resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@2.0.0': + resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/prisma-loader@8.0.2': + resolution: {integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/relay-operation-optimizer@6.5.18': + resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/relay-operation-optimizer@7.0.0': + resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/schema@10.0.0': + resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/url-loader@8.0.0': + resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@10.0.8': + resolution: {integrity: sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@8.13.1': + resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@9.2.1': + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/wrap@10.0.1': + resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + 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 || ^17.0.0 + + '@humanwhocodes/config-array@0.11.13': + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.1': + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.0': + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.1': + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.5': + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + + '@jridgewell/sourcemap-codec@1.4.14': + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.18': + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@noble/curves@1.4.0': + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@peculiar/asn1-schema@2.3.6': + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} + + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/webcrypto@1.4.3': + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} + engines: {node: '>=10.12.0'} + + '@repeaterjs/repeater@3.0.4': + resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} + + '@rollup/rollup-android-arm-eabi@4.8.0': + resolution: {integrity: sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.8.0': + resolution: {integrity: sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.8.0': + resolution: {integrity: sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.8.0': + resolution: {integrity: sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.8.0': + resolution: {integrity: sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.8.0': + resolution: {integrity: sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.8.0': + resolution: {integrity: sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.8.0': + resolution: {integrity: sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.8.0': + resolution: {integrity: sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.8.0': + resolution: {integrity: sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.8.0': + resolution: {integrity: sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.8.0': + resolution: {integrity: sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.8.0': + resolution: {integrity: sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==} + cpu: [x64] + os: [win32] + + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sinonjs/commons@3.0.0': + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tsconfig/node10@1.0.9': + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/babel__core@7.20.1': + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + + '@types/babel__generator@7.6.4': + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + + '@types/babel__template@7.4.1': + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + + '@types/babel__traverse@7.20.1': + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + + '@types/base-64@1.0.2': + resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/eslint-scope@3.7.4': + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + + '@types/eslint@8.44.1': + resolution: {integrity: sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==} + + '@types/estree@1.0.1': + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + + '@types/graceful-fs@4.1.6': + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + + '@types/http-cache-semantics@4.0.1': + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} + + '@types/istanbul-lib-coverage@2.0.4': + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + + '@types/istanbul-lib-report@3.0.0': + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + + '@types/istanbul-reports@3.0.1': + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + + '@types/jest@29.5.11': + resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} + + '@types/js-yaml@4.0.6': + resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==} + + '@types/json-schema@7.0.12': + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + + '@types/json-stable-stringify@1.0.34': + resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/jsonwebtoken@9.0.6': + resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/node@20.10.4': + resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} + + '@types/responselike@1.0.0': + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + + '@types/semver@7.5.4': + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + + '@types/stack-utils@2.0.1': + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + + '@types/ws@8.5.6': + resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} + + '@types/yargs-parser@21.0.0': + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + + '@types/yargs@17.0.24': + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + + '@typescript-eslint/eslint-plugin@6.14.0': + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.14.0': + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.14.0': + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.14.0': + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.14.0': + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.14.0': + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.14.0': + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.14.0': + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@webassemblyjs/ast@1.11.6': + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.11.6': + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.11.6': + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.11.6': + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + + '@webassemblyjs/wasm-gen@1.11.6': + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + + '@webassemblyjs/wasm-opt@1.11.6': + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + + '@webassemblyjs/wasm-parser@1.11.6': + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + + '@webassemblyjs/wast-printer@1.11.6': + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + + '@whatwg-node/events@0.0.3': + resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + + '@whatwg-node/events@0.1.1': + resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/fetch@0.8.8': + resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + + '@whatwg-node/fetch@0.9.14': + resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/node-fetch@0.3.6': + resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + + '@whatwg-node/node-fetch@0.5.0': + resolution: {integrity: sha512-q76lDAafvHNGWedNAVHrz/EyYTS8qwRLcwne8SJQdRN5P3HydxU6XROFvJfTML6KZXQX2FDdGY4/SnaNyd7M0Q==} + engines: {node: '>=16.0.0'} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + acorn-import-assertions@1.9.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + + acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-sequence-parser@1.1.0: + resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-fbjs@3.4.0: + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-require@4.0.2: + resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001517: + resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case-all@1.0.14: + resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} + + change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + + ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + + cjs-module-lexer@1.2.2: + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.1: + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + cross-inspect@1.0.0: + resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} + engines: {node: '>=16.0.0'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + + dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + electron-to-chromium@1.4.467: + resolution: {integrity: sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + + es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.19.9: + resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-airbnb-base@15.0.0: + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + + eslint-config-airbnb-typescript@17.1.0: + resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 + '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.8.0: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.29.0: + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-url-parser@1.1.3: + resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + + fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql-config@5.0.3: + resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} + engines: {node: '>= 16.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + 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 + + graphql-ws@5.14.2: + resolution: {integrity: sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + + graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + + hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + jose@5.2.3: + resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stable-stringify@1.0.2: + resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} + + json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + keyv@4.5.3: + resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + listr2@4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + meros@1.3.0: + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.3: + resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + + object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + + path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pirates@4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + poseidon-lite@0.2.0: + resolution: {integrity: sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==} + + postcss-load-config@4.0.1: + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + + pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + + pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + + regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + + relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + + remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + remove-trailing-spaces@1.0.8: + resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rollup@4.8.0: + resolution: {integrity: sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + scuid@1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shiki@0.14.3: + resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + + string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sucrase@3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + engines: {node: '>=8'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.9: + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@1.0.3: + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-jest@29.1.1: + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-loader@9.5.1: + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-log@2.2.5: + resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + + tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + + tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tsup@8.0.1: + resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typedoc@0.25.4: + resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@1.0.36: + resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + + update-browserslist-db@1.0.11: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + + urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + engines: {node: '>=10.12.0'} + + value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + + webcrypto-core@1.7.7: + resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.88.2: + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true -packages: + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.2.1': dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - dev: true - /@aptos-labs/aptos-cli@0.1.2: - resolution: {integrity: sha512-MCi+9xPDG/Fx6c6b9ACqyQBYJLHqKJQKB8lay/1sUNJ2mNBB2OU1Lkmd5pmjUG1JbZ5cg2Fmgid5iMKdTnphhA==} - hasBin: true - dev: false + '@aptos-labs/aptos-cli@0.1.2': {} - /@aptos-labs/aptos-client@0.1.0: - resolution: {integrity: sha512-q3s6pPq8H2buGp+tPuIRInWsYOuhSEwuNJPwd2YnsiID3YSLihn2ug39ktDJAcSOprUcp7Nid8WK7hKqnUmSdA==} - engines: {node: '>=15.10.0'} + '@aptos-labs/aptos-client@0.1.0': dependencies: axios: 1.6.2 got: 11.8.6 transitivePeerDependencies: - debug - dev: false - /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): - resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} - hasBin: true - peerDependencies: - graphql: '*' + '@ardatan/relay-compiler@12.0.0(graphql@16.8.1)': dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.23.0 @@ -191,48 +3946,30 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@ardatan/sync-fetch@0.0.1: - resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} - engines: {node: '>=14'} + '@ardatan/sync-fetch@0.0.1': dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.22.13': dependencies: '@babel/highlight': 7.22.20 chalk: 2.4.2 - dev: true - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.22.5': dependencies: '@babel/highlight': 7.22.5 - dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.23.5': dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 - dev: true - /@babel/compat-data@7.22.9: - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/compat-data@7.22.9': {} - /@babel/core@7.22.5: - resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} - engines: {node: '>=6.9.0'} + '@babel/core@7.22.5': dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 @@ -251,11 +3988,8 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/core@7.23.2: - resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} - engines: {node: '>=6.9.0'} + '@babel/core@7.23.2': dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 @@ -274,61 +4008,41 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/generator@7.22.5: - resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.22.5': dependencies: '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 - dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.23.0': dependencies: '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 - dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.23.6': dependencies: '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 - dev: true - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.22.15': dependencies: '@babel/compat-data': 7.22.9 '@babel/helper-validator-option': 7.22.15 browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.5): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -340,47 +4054,27 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - dev: true - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-environment-visitor@7.22.20': {} - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.6 - dev: true - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.23.6 - dev: true - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.23.0': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.22.5): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.23.0(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 @@ -388,13 +4082,8 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2)': dependencies: '@babel/core': 7.23.2 '@babel/helper-environment-visitor': 7.22.20 @@ -402,164 +4091,93 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-plugin-utils@7.22.5': {} - /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.5): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.22.20(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.6': dependencies: '@babel/types': 7.23.6 - dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.22.5': {} - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.23.4': {} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-identifier@7.22.20': {} - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-option@7.22.15': {} - /@babel/helpers@7.22.5: - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.22.5': dependencies: '@babel/template': 7.22.15 '@babel/traverse': 7.23.6 '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/helpers@7.23.2: - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.23.2': dependencies: '@babel/template': 7.22.15 '@babel/traverse': 7.23.6 '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.22.20': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.22.5': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true - /@babel/parser@7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.22.5': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.23.0': dependencies: '@babel/types': 7.23.0 - dev: true - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.23.6': dependencies: '@babel/types': 7.23.6 - dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5)': dependencies: '@babel/compat-data': 7.22.9 '@babel/core': 7.22.5 @@ -567,192 +4185,103 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.5) - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2)': dependencies: '@babel/core': 7.23.2 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.22.5): - resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.5): - resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -764,140 +4293,75 @@ packages: '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 - dev: true - /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.22.5): - resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) - dev: true - /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.5): - resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.5): - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) - dev: true - - /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.5): - resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) + + '@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.5): - resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -905,67 +4369,40 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) '@babel/types': 7.23.0 - dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5)': dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/runtime@7.23.1: - resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} - engines: {node: '>=6.9.0'} + '@babel/runtime@7.23.1': dependencies: regenerator-runtime: 0.14.0 - dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} + '@babel/template@7.22.15': dependencies: '@babel/code-frame': 7.23.5 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - dev: true - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} - engines: {node: '>=6.9.0'} + '@babel/template@7.22.5': dependencies: '@babel/code-frame': 7.22.5 '@babel/parser': 7.22.5 '@babel/types': 7.23.0 - dev: true - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.23.6': dependencies: '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 @@ -979,253 +4416,99 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} - engines: {node: '>=6.9.0'} + '@babel/types@7.23.0': dependencies: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} + '@babel/types@7.23.6': dependencies: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@bcoe/v8-coverage@0.2.3': {} - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@esbuild/android-arm64@0.19.9: - resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm64@0.19.9': optional: true - /@esbuild/android-arm@0.19.9: - resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm@0.19.9': optional: true - /@esbuild/android-x64@0.19.9: - resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-x64@0.19.9': optional: true - /@esbuild/darwin-arm64@0.19.9: - resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-arm64@0.19.9': optional: true - /@esbuild/darwin-x64@0.19.9: - resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-x64@0.19.9': optional: true - /@esbuild/freebsd-arm64@0.19.9: - resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-arm64@0.19.9': optional: true - /@esbuild/freebsd-x64@0.19.9: - resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-x64@0.19.9': optional: true - /@esbuild/linux-arm64@0.19.9: - resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm64@0.19.9': optional: true - /@esbuild/linux-arm@0.19.9: - resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm@0.19.9': optional: true - /@esbuild/linux-ia32@0.19.9: - resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ia32@0.19.9': optional: true - /@esbuild/linux-loong64@0.19.9: - resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-loong64@0.19.9': optional: true - /@esbuild/linux-mips64el@0.19.9: - resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-mips64el@0.19.9': optional: true - /@esbuild/linux-ppc64@0.19.9: - resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ppc64@0.19.9': optional: true - /@esbuild/linux-riscv64@0.19.9: - resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-riscv64@0.19.9': optional: true - /@esbuild/linux-s390x@0.19.9: - resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-s390x@0.19.9': optional: true - /@esbuild/linux-x64@0.19.9: - resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-x64@0.19.9': optional: true - /@esbuild/netbsd-x64@0.19.9: - resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + '@esbuild/netbsd-x64@0.19.9': optional: true - /@esbuild/openbsd-x64@0.19.9: - resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-x64@0.19.9': optional: true - /@esbuild/sunos-x64@0.19.9: - resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + '@esbuild/sunos-x64@0.19.9': optional: true - /@esbuild/win32-arm64@0.19.9: - resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-arm64@0.19.9': optional: true - /@esbuild/win32-ia32@0.19.9: - resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-ia32@0.19.9': optional: true - /@esbuild/win32-x64@0.19.9: - resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-x64@0.19.9': optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.0(eslint@8.55.0)': dependencies: eslint: 8.55.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.10.0': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.3.4 @@ -1238,32 +4521,16 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.55.0': {} - /@graphql-codegen/add@3.2.3(graphql@16.8.1): - resolution: {integrity: sha512-sQOnWpMko4JLeykwyjFTxnhqjd/3NOG2OyMuvK76Wnnwh8DRrNf2VEs2kmSvLl7MndMlOj7Kh5U154dVcvhmKQ==} - 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 + '@graphql-codegen/add@3.2.3(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) graphql: 16.8.1 tslib: 2.4.1 - dev: true - /@graphql-codegen/cli@5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3): - resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} - hasBin: true - peerDependencies: - '@parcel/watcher': ^2.1.0 - 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 - peerDependenciesMeta: - '@parcel/watcher': - optional: true + '@graphql-codegen/cli@5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3)': dependencies: '@babel/generator': 7.22.5 '@babel/template': 7.22.5 @@ -1309,25 +4576,16 @@ packages: - supports-color - typescript - utf-8-validate - dev: true - /@graphql-codegen/core@4.0.0(graphql@16.8.1): - resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} - 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 + '@graphql-codegen/core@4.0.0(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/schema': 10.0.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.5.3 - dev: true - /@graphql-codegen/import-types-preset@3.0.0(graphql@16.8.1): - resolution: {integrity: sha512-8Gl3cg+YCi0xLB5J71QQkqXvrdJVOTitJy+0YupconZwrd9cRWhN3k+SimtMKpzTVBNN96v1R8yvFLdfVF+iZA==} - engines: {node: '>= 16.0.0'} - 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 + '@graphql-codegen/import-types-preset@3.0.0(graphql@16.8.1)': dependencies: '@graphql-codegen/add': 3.2.3(graphql@16.8.1) '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) @@ -1337,12 +4595,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1): - resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} - 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 + '@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 8.13.1(graphql@16.8.1) change-case-all: 1.0.14 @@ -1351,12 +4605,8 @@ packages: import-from: 4.0.0 lodash: 4.17.21 tslib: 2.4.1 - dev: true - /@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1): - resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} - 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 + '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.8.1) change-case-all: 1.0.15 @@ -1365,12 +4615,8 @@ packages: import-from: 4.0.0 lodash: 4.17.21 tslib: 2.4.1 - dev: true - /@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.1): - resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} - 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 + '@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) change-case-all: 1.0.15 @@ -1379,26 +4625,15 @@ packages: import-from: 4.0.0 lodash: 4.17.21 tslib: 2.5.3 - dev: true - /@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1): - resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} - 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 + '@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.5.3 - dev: true - /@graphql-codegen/typescript-graphql-request@6.0.1(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1): - resolution: {integrity: sha512-aScw7ICyscW7bYLh2HyjQU3geCAjvFy6sRIlzgdkeFvcKBdjCil69upkyZAyntnSno2C4ZoUv7sHOpyQ9hQmFQ==} - engines: {node: '>= 16.0.0'} - 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 - graphql-request: ^6.0.0 - graphql-tag: ^2.0.0 + '@graphql-codegen/typescript-graphql-request@6.0.1(graphql-request@6.1.0(graphql@16.8.1))(graphql-tag@2.12.6(graphql@16.8.1))(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) @@ -1410,12 +4645,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-codegen/typescript-operations@4.0.1(graphql@16.8.1): - resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} - 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 + '@graphql-codegen/typescript-operations@4.0.1(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-codegen/typescript': 4.0.1(graphql@16.8.1) @@ -1426,12 +4657,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-codegen/typescript@4.0.1(graphql@16.8.1): - resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@graphql-codegen/typescript@4.0.1(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-codegen/schema-ast': 4.0.0(graphql@16.8.1) @@ -1442,12 +4669,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.1): - resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} - 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 + '@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.1) '@graphql-tools/optimize': 1.4.0(graphql@16.8.1) @@ -1463,12 +4686,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.1): - resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} - 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 + '@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.1)': dependencies: '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-tools/optimize': 2.0.0(graphql@16.8.1) @@ -1484,13 +4703,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1)': dependencies: '@ardatan/sync-fetch': 0.0.1 '@graphql-tools/utils': 10.0.8(graphql@16.8.1) @@ -1499,26 +4713,16 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - encoding - dev: true - /@graphql-tools/batch-execute@9.0.2(graphql@16.8.1): - resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/batch-execute@9.0.2(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-tools/code-file-loader@8.0.3(graphql@16.8.1): - resolution: {integrity: sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/code-file-loader@8.0.3(graphql@16.8.1)': dependencies: '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) @@ -1528,13 +4732,8 @@ packages: unixify: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /@graphql-tools/delegate@10.0.3(graphql@16.8.1): - resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/delegate@10.0.3(graphql@16.8.1)': dependencies: '@graphql-tools/batch-execute': 9.0.2(graphql@16.8.1) '@graphql-tools/executor': 1.2.0(graphql@16.8.1) @@ -1543,13 +4742,8 @@ packages: dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 - dev: true - /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1): - resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) '@types/ws': 8.5.6 @@ -1561,13 +4755,8 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /@graphql-tools/executor-http@1.0.3(@types/node@20.10.4)(graphql@16.8.1): - resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-http@1.0.3(@types/node@20.10.4)(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) '@repeaterjs/repeater': 3.0.4 @@ -1579,13 +4768,8 @@ packages: value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' - dev: true - /@graphql-tools/executor-legacy-ws@1.0.4(graphql@16.8.1): - resolution: {integrity: sha512-b7aGuRekZDS+m3af3BIvMKxu15bmVPMt5eGQVuP2v5pxmbaPTh+iv5mx9b3Plt32z5Ke5tycBnNm5urSFtW8ng==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-legacy-ws@1.0.4(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) '@types/ws': 8.5.6 @@ -1596,13 +4780,8 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /@graphql-tools/executor@1.2.0(graphql@16.8.1): - resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor@1.2.0(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) @@ -1610,13 +4789,8 @@ packages: graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-tools/git-loader@8.0.3(graphql@16.8.1): - resolution: {integrity: sha512-Iz9KbRUAkuOe8JGTS0qssyJ+D5Snle17W+z9anwWrLFrkBhHrRFUy5AdjZqgJuhls0x30QkZBnnCtnHDBdQ4nA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/git-loader@8.0.3(graphql@16.8.1)': dependencies: '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) @@ -1627,13 +4801,8 @@ packages: unixify: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /@graphql-tools/github-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1): - resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/github-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1)': dependencies: '@ardatan/sync-fetch': 0.0.1 '@graphql-tools/executor-http': 1.0.3(@types/node@20.10.4)(graphql@16.8.1) @@ -1647,13 +4816,8 @@ packages: - '@types/node' - encoding - supports-color - dev: true - /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.1)': dependencies: '@graphql-tools/import': 7.0.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) @@ -1661,13 +4825,8 @@ packages: graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 - dev: true - /@graphql-tools/graphql-tag-pluck@8.1.0(graphql@16.8.1): - resolution: {integrity: sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/graphql-tag-pluck@8.1.0(graphql@16.8.1)': dependencies: '@babel/core': 7.23.2 '@babel/parser': 7.23.0 @@ -1679,81 +4838,47 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - supports-color - dev: true - /@graphql-tools/import@7.0.0(graphql@16.8.1): - resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/import@7.0.0(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 resolve-from: 5.0.0 tslib: 2.6.2 - dev: true - /@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 - dev: true - /@graphql-tools/load@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/load@8.0.0(graphql@16.8.1)': dependencies: '@graphql-tools/schema': 10.0.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 p-limit: 3.1.0 tslib: 2.6.2 - dev: true - /@graphql-tools/merge@9.0.0(graphql@16.8.1): - resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/merge@9.0.0(graphql@16.8.1)': dependencies: '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 - dev: true - - /@graphql-tools/optimize@1.4.0(graphql@16.8.1): - resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@1.4.0(graphql@16.8.1)': dependencies: graphql: 16.8.1 tslib: 2.6.2 - dev: true - /@graphql-tools/optimize@2.0.0(graphql@16.8.1): - resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/optimize@2.0.0(graphql@16.8.1)': dependencies: graphql: 16.8.1 tslib: 2.6.2 - dev: true - /@graphql-tools/prisma-loader@8.0.2(@types/node@20.10.4)(graphql@16.8.1): - resolution: {integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/prisma-loader@8.0.2(@types/node@20.10.4)(graphql@16.8.1)': dependencies: '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) @@ -1780,12 +4905,8 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1): - resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1)': dependencies: '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) '@graphql-tools/utils': 9.2.1(graphql@16.8.1) @@ -1794,13 +4915,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1): - resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1)': dependencies: '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) @@ -1809,26 +4925,16 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@graphql-tools/schema@10.0.0(graphql@16.8.1): - resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/schema@10.0.0(graphql@16.8.1)': dependencies: '@graphql-tools/merge': 9.0.0(graphql@16.8.1) '@graphql-tools/utils': 10.0.8(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-tools/url-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1): - resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/url-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1)': dependencies: '@ardatan/sync-fetch': 0.0.1 '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) @@ -1849,45 +4955,27 @@ packages: - bufferutil - encoding - utf-8-validate - dev: true - /@graphql-tools/utils@10.0.8(graphql@16.8.1): - resolution: {integrity: sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@10.0.8(graphql@16.8.1)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) cross-inspect: 1.0.0 dset: 3.1.2 graphql: 16.8.1 tslib: 2.6.2 - dev: true - /@graphql-tools/utils@8.13.1(graphql@16.8.1): - resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@8.13.1(graphql@16.8.1)': dependencies: graphql: 16.8.1 tslib: 2.6.2 - dev: true - /@graphql-tools/utils@9.2.1(graphql@16.8.1): - resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@9.2.1(graphql@16.8.1)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 - dev: true - /@graphql-tools/wrap@10.0.1(graphql@16.8.1): - resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/wrap@10.0.1(graphql@16.8.1)': dependencies: '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) '@graphql-tools/schema': 10.0.0(graphql@16.8.1) @@ -1895,55 +4983,34 @@ packages: graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - 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 || ^17.0.0 + '@graphql-typed-document-node/core@3.2.0(graphql@16.8.1)': dependencies: graphql: 16.8.1 - dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.11.13': dependencies: '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true + '@humanwhocodes/object-schema@2.0.1': {} - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 '@types/node': 20.10.4 @@ -1951,16 +5018,8 @@ packages: jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - dev: true - /@jest/core@29.7.0(ts-node@10.9.2): - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -1974,7 +5033,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1994,38 +5053,26 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.10.4 jest-mock: 29.7.0 - dev: true - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@29.7.0': dependencies: jest-get-type: 29.6.3 - dev: true - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@29.7.0': dependencies: expect: 29.7.0 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 @@ -2033,11 +5080,8 @@ packages: jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/globals@29.7.0': dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -2045,16 +5089,8 @@ packages: jest-mock: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/reporters@29.7.0': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 @@ -2082,47 +5118,32 @@ packages: v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - dev: true - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/source-map@29.6.3': dependencies: '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 graceful-fs: 4.2.11 - dev: true - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 - dev: true - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@29.7.0': dependencies: '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 - dev: true - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@29.7.0': dependencies: '@babel/core': 7.22.5 '@jest/types': 29.6.3 @@ -2141,11 +5162,8 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - dev: true - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 @@ -2153,456 +5171,254 @@ packages: '@types/node': 20.10.4 '@types/yargs': 17.0.24 chalk: 4.1.2 - dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.3': dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 - dev: true - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.0': {} - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.1': {} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/set-array@1.1.2': {} - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + '@jridgewell/source-map@0.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - dev: true - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true + '@jridgewell/sourcemap-codec@1.4.14': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@jridgewell/sourcemap-codec@1.4.15': {} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + '@jridgewell/trace-mapping@0.3.18': dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@noble/curves@1.4.0: - resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + '@noble/curves@1.4.0': dependencies: '@noble/hashes': 1.4.0 - dev: false - /@noble/hashes@1.4.0: - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - dev: false + '@noble/hashes@1.4.0': {} - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true - /@peculiar/asn1-schema@2.3.6: - resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} + '@peculiar/asn1-schema@2.3.6': dependencies: asn1js: 3.0.5 pvtsutils: 1.3.5 tslib: 2.6.2 - dev: true - /@peculiar/json-schema@1.1.12: - resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} - engines: {node: '>=8.0.0'} + '@peculiar/json-schema@1.1.12': dependencies: tslib: 2.6.2 - dev: true - /@peculiar/webcrypto@1.4.3: - resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} - engines: {node: '>=10.12.0'} + '@peculiar/webcrypto@1.4.3': dependencies: '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.5 tslib: 2.6.2 webcrypto-core: 1.7.7 - dev: true - /@repeaterjs/repeater@3.0.4: - resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} - dev: true + '@repeaterjs/repeater@3.0.4': {} - /@rollup/rollup-android-arm-eabi@4.8.0: - resolution: {integrity: sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@rollup/rollup-android-arm-eabi@4.8.0': optional: true - /@rollup/rollup-android-arm64@4.8.0: - resolution: {integrity: sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@rollup/rollup-android-arm64@4.8.0': optional: true - /@rollup/rollup-darwin-arm64@4.8.0: - resolution: {integrity: sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@rollup/rollup-darwin-arm64@4.8.0': optional: true - /@rollup/rollup-darwin-x64@4.8.0: - resolution: {integrity: sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@rollup/rollup-darwin-x64@4.8.0': optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.8.0: - resolution: {integrity: sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm-gnueabihf@4.8.0': optional: true - /@rollup/rollup-linux-arm64-gnu@4.8.0: - resolution: {integrity: sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-gnu@4.8.0': optional: true - /@rollup/rollup-linux-arm64-musl@4.8.0: - resolution: {integrity: sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-musl@4.8.0': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.8.0: - resolution: {integrity: sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.8.0': optional: true - /@rollup/rollup-linux-x64-gnu@4.8.0: - resolution: {integrity: sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-gnu@4.8.0': optional: true - /@rollup/rollup-linux-x64-musl@4.8.0: - resolution: {integrity: sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-musl@4.8.0': optional: true - /@rollup/rollup-win32-arm64-msvc@4.8.0: - resolution: {integrity: sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-arm64-msvc@4.8.0': optional: true - /@rollup/rollup-win32-ia32-msvc@4.8.0: - resolution: {integrity: sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-ia32-msvc@4.8.0': optional: true - /@rollup/rollup-win32-x64-msvc@4.8.0: - resolution: {integrity: sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-x64-msvc@4.8.0': optional: true - /@scure/base@1.1.6: - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - dev: false + '@scure/base@1.1.6': {} - /@scure/bip32@1.4.0: - resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + '@scure/bip32@1.4.0': dependencies: '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@scure/base': 1.1.6 - dev: false - /@scure/bip39@1.3.0: - resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + '@scure/bip39@1.3.0': dependencies: '@noble/hashes': 1.4.0 '@scure/base': 1.1.6 - dev: false - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.27.8': {} - /@sindresorhus/is@4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - dev: false + '@sindresorhus/is@4.6.0': {} - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + '@sinonjs/commons@3.0.0': dependencies: type-detect: 4.0.8 - dev: true - /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sinonjs/fake-timers@10.3.0': dependencies: '@sinonjs/commons': 3.0.0 - dev: true - /@szmarczak/http-timer@4.0.6: - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - dev: false - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true + '@tsconfig/node10@1.0.9': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@types/babel__core@7.20.1: - resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + '@types/babel__core@7.20.1': dependencies: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 - dev: true - /@types/babel__generator@7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + '@types/babel__generator@7.6.4': dependencies: '@babel/types': 7.23.0 - dev: true - /@types/babel__template@7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + '@types/babel__template@7.4.1': dependencies: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 - dev: true - /@types/babel__traverse@7.20.1: - resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + '@types/babel__traverse@7.20.1': dependencies: '@babel/types': 7.23.0 - dev: true - /@types/base-64@1.0.2: - resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} - dev: true + '@types/base-64@1.0.2': {} - /@types/cacheable-request@6.0.3: - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 '@types/node': 20.10.4 '@types/responselike': 1.0.0 - dev: false - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + '@types/eslint-scope@3.7.4': dependencies: '@types/eslint': 8.44.1 '@types/estree': 1.0.1 - dev: true - /@types/eslint@8.44.1: - resolution: {integrity: sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==} + '@types/eslint@8.44.1': dependencies: '@types/estree': 1.0.1 '@types/json-schema': 7.0.12 - dev: true - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true + '@types/estree@1.0.1': {} - /@types/graceful-fs@4.1.6: - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + '@types/graceful-fs@4.1.6': dependencies: '@types/node': 20.10.4 - dev: true - /@types/http-cache-semantics@4.0.1: - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - dev: false + '@types/http-cache-semantics@4.0.1': {} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true + '@types/istanbul-lib-coverage@2.0.4': {} - /@types/istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + '@types/istanbul-lib-report@3.0.0': dependencies: '@types/istanbul-lib-coverage': 2.0.4 - dev: true - /@types/istanbul-reports@3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + '@types/istanbul-reports@3.0.1': dependencies: '@types/istanbul-lib-report': 3.0.0 - dev: true - /@types/jest@29.5.11: - resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} + '@types/jest@29.5.11': dependencies: expect: 29.7.0 pretty-format: 29.7.0 - dev: true - /@types/js-yaml@4.0.6: - resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==} - dev: true + '@types/js-yaml@4.0.6': {} - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true + '@types/json-schema@7.0.12': {} - /@types/json-stable-stringify@1.0.34: - resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} - dev: true + '@types/json-stable-stringify@1.0.34': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/jsonwebtoken@9.0.6: - resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + '@types/jsonwebtoken@9.0.6': dependencies: '@types/node': 20.10.4 - dev: true - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/keyv@3.1.4': dependencies: '@types/node': 20.10.4 - dev: false - /@types/node@20.10.4: - resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} + '@types/node@20.10.4': dependencies: undici-types: 5.26.5 - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + '@types/responselike@1.0.0': dependencies: '@types/node': 20.10.4 - dev: false - /@types/semver@7.5.4: - resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} - dev: true + '@types/semver@7.5.4': {} - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true + '@types/stack-utils@2.0.1': {} - /@types/ws@8.5.6: - resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} + '@types/ws@8.5.6': dependencies: '@types/node': 20.10.4 - dev: true - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - dev: true + '@types/yargs-parser@21.0.0': {} - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + '@types/yargs@17.0.24': dependencies: '@types/yargs-parser': 21.0.0 - dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) @@ -2617,20 +5433,12 @@ packages: natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/scope-manager': 6.14.0 '@typescript-eslint/types': 6.14.0 @@ -2638,52 +5446,31 @@ packages: '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 eslint: 8.55.0 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.14.0': dependencies: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/visitor-keys': 6.14.0 - dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.55.0 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.14.0': {} - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3)': dependencies: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/visitor-keys': 6.14.0 @@ -2692,16 +5479,12 @@ packages: is-glob: 4.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.12 @@ -2714,78 +5497,51 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.14.0': dependencies: '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + '@webassemblyjs/ast@1.11.6': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true + '@webassemblyjs/helper-api-error@1.11.6': {} - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: true + '@webassemblyjs/helper-buffer@1.11.6': {} - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.11.6': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + '@webassemblyjs/helper-wasm-section@1.11.6': dependencies: '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-buffer': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/wasm-gen': 1.11.6 - dev: true - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - dev: true - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true + '@webassemblyjs/utf8@1.11.6': {} - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + '@webassemblyjs/wasm-edit@1.11.6': dependencies: '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-buffer': 1.11.6 @@ -2795,29 +5551,23 @@ packages: '@webassemblyjs/wasm-opt': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 '@webassemblyjs/wast-printer': 1.11.6 - dev: true - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + '@webassemblyjs/wasm-gen@1.11.6': dependencies: '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + '@webassemblyjs/wasm-opt@1.11.6': dependencies: '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-buffer': 1.11.6 '@webassemblyjs/wasm-gen': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 - dev: true - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + '@webassemblyjs/wasm-parser@1.11.6': dependencies: '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 @@ -2825,250 +5575,154 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + '@webassemblyjs/wast-printer@1.11.6': dependencies: '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 - dev: true - /@whatwg-node/events@0.0.3: - resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} - dev: true + '@whatwg-node/events@0.0.3': {} - /@whatwg-node/events@0.1.1: - resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} - engines: {node: '>=16.0.0'} - dev: true + '@whatwg-node/events@0.1.1': {} - /@whatwg-node/fetch@0.8.8: - resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + '@whatwg-node/fetch@0.8.8': dependencies: '@peculiar/webcrypto': 1.4.3 '@whatwg-node/node-fetch': 0.3.6 busboy: 1.6.0 urlpattern-polyfill: 8.0.2 web-streams-polyfill: 3.2.1 - dev: true - /@whatwg-node/fetch@0.9.14: - resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==} - engines: {node: '>=16.0.0'} + '@whatwg-node/fetch@0.9.14': dependencies: '@whatwg-node/node-fetch': 0.5.0 urlpattern-polyfill: 9.0.0 - dev: true - /@whatwg-node/node-fetch@0.3.6: - resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + '@whatwg-node/node-fetch@0.3.6': dependencies: '@whatwg-node/events': 0.0.3 busboy: 1.6.0 fast-querystring: 1.1.2 fast-url-parser: 1.1.3 tslib: 2.6.2 - dev: true - /@whatwg-node/node-fetch@0.5.0: - resolution: {integrity: sha512-q76lDAafvHNGWedNAVHrz/EyYTS8qwRLcwne8SJQdRN5P3HydxU6XROFvJfTML6KZXQX2FDdGY4/SnaNyd7M0Q==} - engines: {node: '>=16.0.0'} + '@whatwg-node/node-fetch@0.5.0': dependencies: '@whatwg-node/events': 0.1.1 busboy: 1.6.0 fast-querystring: 1.1.2 fast-url-parser: 1.1.3 tslib: 2.6.2 - dev: true - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true + '@xtuc/ieee754@1.2.0': {} - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + '@xtuc/long@4.2.2': {} - /acorn-import-assertions@1.9.0(acorn@8.10.0): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 + acorn-import-assertions@1.9.0(acorn@8.10.0): dependencies: acorn: 8.10.0 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.10.0): dependencies: acorn: 8.10.0 - dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@8.2.0: {} - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.10.0: {} - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} + agent-base@7.1.0: dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-sequence-parser@1.1.0: - resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} - dev: true + ansi-sequence-parser@1.1.0: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.0: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.3: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.1 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - dev: true - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.1: dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 @@ -3076,55 +5730,32 @@ packages: get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true + asap@2.0.6: {} - /asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} - engines: {node: '>=12.0.0'} + asn1js@3.0.5: dependencies: pvtsutils: 1.3.5 pvutils: 1.1.3 tslib: 2.6.2 - dev: true - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + astral-regex@2.0.0: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + asynckit@0.4.0: {} - /auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} - dev: true + auto-bind@4.0.0: {} - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.5: {} - /axios@1.6.2: - resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + axios@1.6.2: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false - /babel-jest@29.7.0(@babel/core@7.22.5): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@29.7.0(@babel/core@7.22.5): dependencies: '@babel/core': 7.22.5 '@jest/transform': 29.7.0 @@ -3136,11 +5767,8 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -3149,26 +5777,17 @@ packages: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.0 '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.20.1 - dev: true - /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: - resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} - dev: true + babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): dependencies: '@babel/core': 7.22.5 '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) @@ -3183,12 +5802,8 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - dev: true - /babel-preset-fbjs@3.4.0(@babel/core@7.22.5): - resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-fbjs@3.4.0(@babel/core@7.22.5): dependencies: '@babel/core': 7.22.5 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) @@ -3218,129 +5833,76 @@ packages: '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 - dev: true - /babel-preset-jest@29.6.3(@babel/core@7.22.5): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-jest@29.6.3(@babel/core@7.22.5): dependencies: '@babel/core': 7.22.5 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.21.9: dependencies: caniuse-lite: 1.0.30001517 electron-to-chromium: 1.4.467 node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) - dev: true - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 - dev: true - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: true + buffer-equal-constant-time@1.0.1: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /bundle-require@4.0.2(esbuild@0.19.9): - resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.17' + bundle-require@4.0.2(esbuild@0.19.9): dependencies: esbuild: 0.19.9 load-tsconfig: 0.2.5 - dev: true - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: true - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + cac@6.7.14: {} - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - dev: false + cacheable-lookup@5.0.4: {} - /cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + cacheable-request@7.0.4: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -3349,68 +5911,43 @@ packages: lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 - dev: false - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.2: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camel-case@4.1.2: dependencies: pascal-case: 3.1.2 tslib: 2.6.2 - dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-lite@1.0.30001517: - resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} - dev: true + caniuse-lite@1.0.30001517: {} - /capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + capital-case@1.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /change-case-all@1.0.14: - resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} + change-case-all@1.0.14: dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -3422,10 +5959,8 @@ packages: title-case: 3.0.3 upper-case: 2.0.2 upper-case-first: 2.0.2 - dev: true - /change-case-all@1.0.15: - resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + change-case-all@1.0.15: dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -3437,10 +5972,8 @@ packages: title-case: 3.0.3 upper-case: 2.0.2 upper-case-first: 2.0.2 - dev: true - /change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + change-case@4.1.2: dependencies: camel-case: 4.1.2 capital-case: 1.0.4 @@ -3454,20 +5987,12 @@ packages: sentence-case: 3.0.4 snake-case: 3.0.4 tslib: 2.6.2 - dev: true - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true + char-regex@1.0.2: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -3478,185 +6003,104 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 - dev: true - /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: true + chrome-trace-event@1.0.3: {} - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - dev: true + ci-info@3.8.0: {} - /cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true + cjs-module-lexer@1.2.2: {} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.1: {} - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 - dev: true - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cli-width@3.0.0: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@6.0.0: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone-response@1.0.3: dependencies: mimic-response: 1.0.1 - dev: false - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /collect-v8-coverage@1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true + collect-v8-coverage@1.0.1: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + colorette@2.0.20: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: false - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@4.1.1: {} - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true + common-tags@1.8.2: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true + confusing-browser-globals@1.0.11: {} - /constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + constant-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case: 2.0.2 - dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true + convert-source-map@1.9.0: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cosmiconfig@8.3.6(typescript@5.3.3): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@8.3.6(typescript@5.3.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: typescript: 5.3.3 - dev: true - /create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true + create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3664,226 +6108,117 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.1.8: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /cross-inspect@1.0.0: - resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} - engines: {node: '>=16.0.0'} + cross-inspect@1.0.0: dependencies: tslib: 2.6.2 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} - dev: true + dataloader@2.2.2: {} - /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: true + debounce@1.2.1: {} - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.2 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: false - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - dev: true + dedent@1.5.1: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: false + defer-to-connect@2.0.1: {} - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} + define-properties@1.2.0: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false + delayed-stream@1.0.0: {} - /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dev: true + dependency-graph@0.11.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + detect-newline@3.1.0: {} - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diff-sequences@29.6.3: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: true - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: true + dotenv@16.3.1: {} - /dset@3.1.2: - resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} - engines: {node: '>=4'} - dev: true + dset@3.1.2: {} - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 - dev: true - /electron-to-chromium@1.4.467: - resolution: {integrity: sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg==} - dev: true + electron-to-chromium@1.4.467: {} - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + emittery@0.13.1: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: false - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.15.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} - engines: {node: '>= 0.4'} + es-abstract@1.22.1: dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.1 @@ -3924,41 +6259,26 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.11 - dev: true - /es-module-lexer@1.3.0: - resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} - dev: true + es-module-lexer@1.3.0: {} - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.1: dependencies: get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 - dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + es-shim-unscopables@1.0.0: dependencies: has: 1.0.3 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild@0.19.9: - resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.19.9: optionalDependencies: '@esbuild/android-arm': 0.19.9 '@esbuild/android-arm64': 0.19.9 @@ -3982,117 +6302,56 @@ packages: '@esbuild/win32-arm64': 0.19.9 '@esbuild/win32-ia32': 0.19.9 '@esbuild/win32-x64': 0.19.9 - dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true + escalade@3.1.1: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true + escape-string-regexp@2.0.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0): - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.55.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.1 - dev: true - /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint-plugin-import@2.29.0)(eslint@8.55.0): - resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 - '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 + eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3))(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0): dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0)(eslint@8.55.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) - dev: true + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0) - /eslint-config-prettier@9.1.0(eslint@8.55.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.55.0): dependencies: eslint: 8.55.0 - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0): dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4101,7 +6360,7 @@ packages: doctrine: 2.1.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4111,37 +6370,26 @@ packages: object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.14.2 + optionalDependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.55.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/regexpp': 4.10.0 @@ -4183,64 +6431,34 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: false + eventemitter3@5.0.1: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + events@3.3.0: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4251,95 +6469,60 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit@0.1.2: {} - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 jest-matcher-utils: 29.7.0 jest-message-util: 29.7.0 jest-util: 29.7.0 - dev: true - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /extract-files@11.0.0: - resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} - engines: {node: ^12.20 || >= 14.13} - dev: true + extract-files@11.0.0: {} - /fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: true + fast-decode-uri-component@1.0.1: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} + fast-glob@3.2.12: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-querystring@1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 - dev: true - /fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + fast-url-parser@1.1.3: dependencies: punycode: 1.4.1 - dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} - dev: true + fbjs-css-vars@1.0.2: {} - /fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fbjs@3.0.5: dependencies: cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 @@ -4350,180 +6533,101 @@ packages: ua-parser-js: 1.0.36 transitivePeerDependencies: - encoding - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.0.4 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.0.4: dependencies: flatted: 3.2.7 rimraf: 3.0.2 - dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flatted@3.2.7: {} - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.6: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: false - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.2: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.1: {} - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.5: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.2.1: dependencies: function-bind: 1.1.1 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true + get-package-type@0.1.0: {} - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - dev: false - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + glob@7.1.6: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4531,10 +6635,8 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4542,30 +6644,18 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} - engines: {node: '>=8'} + globals@13.20.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.0 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -4573,17 +6663,12 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.1 - dev: true - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 @@ -4596,25 +6681,12 @@ packages: lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 - dev: false - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /graphql-config@5.0.3(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3): - resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} - engines: {node: '>= 16.0.0'} - peerDependencies: - cosmiconfig-toml-loader: ^1.0.0 - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - cosmiconfig-toml-loader: - optional: true + graphql-config@5.0.3(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3): dependencies: '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) @@ -4634,210 +6706,116 @@ packages: - encoding - typescript - utf-8-validate - dev: true - /graphql-request@6.1.0(graphql@16.8.1): - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} - peerDependencies: - graphql: 14 - 16 + graphql-request@6.1.0(graphql@16.8.1): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) cross-fetch: 3.1.8 graphql: 16.8.1 transitivePeerDependencies: - encoding - dev: true - /graphql-tag@2.12.6(graphql@16.8.1): - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - 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 + graphql-tag@2.12.6(graphql@16.8.1): dependencies: graphql: 16.8.1 tslib: 2.6.2 - dev: true - /graphql-ws@5.14.2(graphql@16.8.1): - resolution: {integrity: sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==} - engines: {node: '>=10'} - peerDependencies: - graphql: '>=0.11 <=16' + graphql-ws@5.14.2(graphql@16.8.1): dependencies: graphql: 16.8.1 - dev: true - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - dev: true + graphql@16.8.1: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.0: dependencies: get-intrinsic: 1.2.1 - dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.1: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 - dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + has@1.0.3: dependencies: function-bind: 1.1.1 - dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + hasown@2.0.0: dependencies: function-bind: 1.1.2 - dev: true - /header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + header-case@2.0.4: dependencies: capital-case: 1.0.4 tslib: 2.6.2 - dev: true - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: false + http-cache-semantics@4.1.1: {} - /http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.0: dependencies: agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: false - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.2: dependencies: agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ignore@5.2.4: {} - /immutable@3.7.6: - resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} - engines: {node: '>=0.8.0'} - dev: true + immutable@3.7.6: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} - dev: true + import-from@4.0.0: {} - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} + inquirer@8.2.6: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -4854,243 +6832,137 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 6.2.0 - dev: true - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} + internal-slot@1.0.5: dependencies: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 - dev: true - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - dev: true - /is-absolute@1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} + is-absolute@1.0.0: dependencies: is-relative: 1.0.0 is-windows: 1.0.2 - dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.2: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + is-core-module@2.12.1: dependencies: has: 1.0.3 - dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.0 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + is-generator-fn@2.1.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-lower-case@2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + is-lower-case@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.2: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true - /is-relative@1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} + is-relative@1.0.0: dependencies: is-unc-path: 1.0.0 - dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.2 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.12: dependencies: which-typed-array: 1.1.11 - dev: true - /is-unc-path@1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-upper-case@2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + is-upper-case@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.2 - dev: true - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@5.0.0(ws@8.14.2): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' + isomorphic-ws@5.0.0(ws@8.14.2): dependencies: ws: 8.14.2 - dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.0: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.22.5 '@babel/parser': 7.23.0 @@ -5099,11 +6971,8 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} - engines: {node: '>=10'} + istanbul-lib-instrument@6.0.1: dependencies: '@babel/core': 7.22.5 '@babel/parser': 7.23.0 @@ -5112,48 +6981,33 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + istanbul-lib-report@3.0.0: dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} + istanbul-reports@3.1.5: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 - dev: true - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 - dev: true - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -5178,26 +7032,17 @@ packages: transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5206,24 +7051,12 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true + jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): dependencies: '@babel/core': 7.22.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 babel-jest: 29.7.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 @@ -5243,43 +7076,33 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.10.4 ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-diff@29.7.0: dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@29.7.0: dependencies: detect-newline: 3.1.0 - dev: true - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@29.7.0: dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 jest-get-type: 29.6.3 jest-util: 29.7.0 pretty-format: 29.7.0 - dev: true - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -5287,16 +7110,10 @@ packages: '@types/node': 20.10.4 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-get-type@29.6.3: {} - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 @@ -5311,29 +7128,20 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 - dev: true - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@29.7.0: dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 jest-diff: 29.7.0 jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.22.13 '@jest/types': 29.6.3 @@ -5344,47 +7152,27 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 - dev: true - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.10.4 jest-util: 29.7.0 - dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: jest-resolve: 29.7.0 - dev: true - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@29.6.3: {} - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@29.7.0: dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@29.7.0: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -5395,11 +7183,8 @@ packages: resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 - dev: true - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@29.7.0: dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 @@ -5424,11 +7209,8 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - dev: true - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -5454,11 +7236,8 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-snapshot@29.7.0: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.23.0 @@ -5482,11 +7261,8 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.10.4 @@ -5494,11 +7270,8 @@ packages: ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@29.7.0: dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -5506,11 +7279,8 @@ packages: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 - dev: true - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@29.7.0: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 @@ -5520,144 +7290,81 @@ packages: emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 - dev: true - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: dependencies: '@types/node': 20.10.4 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@29.7.0: dependencies: '@types/node': 20.10.4 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true + jiti@1.21.0: {} - /jose@5.2.3: - resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} + jose@5.2.3: {} - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - dev: true + joycon@3.1.1: {} - /js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - dev: false + js-base64@3.7.7: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: false + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json-stable-stringify@1.0.2: - resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} + json-stable-stringify@1.0.2: dependencies: jsonify: 0.0.1 - dev: true - /json-to-pretty-yaml@1.2.2: - resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} - engines: {node: '>= 0.2.0'} + json-to-pretty-yaml@1.2.2: dependencies: remedial: 1.0.8 remove-trailing-spaces: 1.0.8 - dev: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true + jsonc-parser@3.2.0: {} - /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: true + jsonify@0.0.1: {} - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -5669,69 +7376,38 @@ packages: lodash.once: 4.1.1 ms: 2.1.2 semver: 7.5.4 - dev: true - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: true - /jwt-decode@4.0.0: - resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} - engines: {node: '>=18'} - dev: false + jwt-decode@4.0.0: {} - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + keyv@4.5.3: dependencies: json-buffer: 3.0.1 - dev: false - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + kleur@3.0.3: {} - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + leven@3.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true + lilconfig@2.1.0: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /listr2@4.0.5: - resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} - engines: {node: '>=12'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@4.0.5: dependencies: cli-truncate: 2.1.0 colorette: 2.0.20 @@ -5741,394 +7417,218 @@ packages: rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 - dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + load-tsconfig@0.2.5: {} - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true + loader-runner@4.3.0: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - dev: true + lodash.includes@4.3.0: {} - /lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - dev: true + lodash.isboolean@3.0.3: {} - /lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - dev: true + lodash.isinteger@4.0.4: {} - /lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - dev: true + lodash.isnumber@3.0.3: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true + lodash.once@4.1.1: {} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true + lodash.sortby@4.7.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + log-update@4.0.0: dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - dev: true - /lower-case-first@2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + lower-case-first@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: false + lowercase-keys@2.0.0: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - dev: true - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + lunr@2.3.9: {} + + make-dir@3.1.0: dependencies: semver: 6.3.1 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} - dev: true + map-cache@0.2.2: {} - /marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - dev: true + marked@4.3.0: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /meros@1.3.0(@types/node@20.10.4): - resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} - engines: {node: '>=13'} - peerDependencies: - '@types/node': '>=13' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: + meros@1.3.0(@types/node@20.10.4): + optionalDependencies: '@types/node': 20.10.4 - dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: false + mimic-response@1.0.1: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: false + mimic-response@3.1.0: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@4.2.3: - resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} - engines: {node: '>=10'} + minimatch@4.2.3: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + mute-stream@0.0.8: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.6.2 - dev: true - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true + node-int64@0.4.0: {} - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} - dev: true + node-releases@2.0.12: {} - /normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} + normalize-path@2.1.1: dependencies: remove-trailing-separator: 1.1.0 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: false + normalize-url@6.1.0: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - dev: true + nullthrows@1.1.1: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true + object-inspect@1.12.3: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.4: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} + object.entries@1.1.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.1: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 get-intrinsic: 1.2.1 - dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + object.values@1.1.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -6136,11 +7636,8 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -6151,409 +7648,226 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - dev: false + p-cancelable@2.1.1: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + param-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-filepath@1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} + parse-filepath@1.0.2: dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: true - /path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-root-regex@0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} - dev: true + path-root-regex@0.1.2: {} - /path-root@0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} + path-root@0.1.1: dependencies: path-root-regex: 0.1.2 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.5: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /poseidon-lite@0.2.0: - resolution: {integrity: sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==} - dev: false + poseidon-lite@0.2.0: {} - /postcss-load-config@4.0.1(ts-node@10.9.2): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss-load-config@4.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): dependencies: lilconfig: 2.1.0 - ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) yaml: 2.3.4 - dev: true + optionalDependencies: + ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.1.1: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true - /promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + promise@7.3.1: dependencies: asap: 2.0.6 - dev: true - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + proxy-from-env@1.1.0: {} - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: false - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true + punycode@1.4.1: {} - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true + punycode@2.3.0: {} - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - dev: true + pure-rand@6.0.4: {} - /pvtsutils@1.3.5: - resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + pvtsutils@1.3.5: dependencies: tslib: 2.6.2 - dev: true - /pvutils@1.1.3: - resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} - engines: {node: '>=6.0.0'} - dev: true + pvutils@1.1.3: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: false + quick-lru@5.1.1: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true + react-is@18.2.0: {} - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - dev: true + regenerator-runtime@0.14.0: {} - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.0: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 functions-have-names: 1.2.3 - dev: true - /relay-runtime@12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + relay-runtime@12.0.0: dependencies: '@babel/runtime': 7.23.1 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: - encoding - dev: true - /remedial@1.0.8: - resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} - dev: true + remedial@1.0.8: {} - /remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true + remove-trailing-separator@1.1.0: {} - /remove-trailing-spaces@1.0.8: - resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} - dev: true + remove-trailing-spaces@1.0.8: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true + require-main-filename@2.0.0: {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: false + resolve-alpn@1.2.1: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true + resolve.exports@2.0.2: {} - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true + resolve@1.22.2: dependencies: is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 - dev: false - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true + rfdc@1.3.0: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rollup@4.8.0: - resolution: {integrity: sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.8.0: optionalDependencies: '@rollup/rollup-android-arm-eabi': 4.8.0 '@rollup/rollup-android-arm64': 4.8.0 @@ -6569,310 +7883,186 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.8.0 '@rollup/rollup-win32-x64-msvc': 4.8.0 fsevents: 2.3.2 - dev: true - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + run-async@2.4.1: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.6.2 - dev: true - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} - engines: {node: '>=0.4'} + safe-array-concat@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} + schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true - /scuid@1.1.0: - resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} - dev: true + scuid@1.1.0: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - dev: true - /sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + sentence-case@3.0.4: dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 - dev: true - /serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + serialize-javascript@6.0.1: dependencies: randombytes: 2.1.0 - dev: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true + set-blocking@2.0.0: {} - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true + setimmediate@1.0.5: {} - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /shiki@0.14.3: - resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + shiki@0.14.3: dependencies: ansi-sequence-parser: 1.1.0 jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signedsource@1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} - dev: true + signedsource@1.0.0: {} - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.6.2 - dev: true - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map@0.7.4: {} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - dev: true - /sponge-case@1.0.1: - resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + sponge-case@1.0.1: dependencies: tslib: 2.6.2 - dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: true + streamsearch@1.1.0: {} - /string-env-interpolation@1.0.1: - resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} - dev: true + string-env-interpolation@1.0.1: {} - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + string.prototype.trimend@1.0.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + string.prototype.trimstart@1.0.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.22.1 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} - engines: {node: '>=8'} - hasBin: true + sucrase@3.32.0: dependencies: '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 @@ -6881,194 +8071,98 @@ packages: mz: 2.7.0 pirates: 4.0.5 ts-interface-checker: 0.1.13 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /swap-case@2.0.2: - resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + swap-case@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /terser-webpack-plugin@5.3.9(esbuild@0.19.9)(webpack@5.88.2): - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true + terser-webpack-plugin@5.3.9(esbuild@0.19.9)(webpack@5.88.2(esbuild@0.19.9)): dependencies: '@jridgewell/trace-mapping': 0.3.18 - esbuild: 0.19.9 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.19.2 webpack: 5.88.2(esbuild@0.19.9) - dev: true + optionalDependencies: + esbuild: 0.19.9 - /terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} - engines: {node: '>=10'} - hasBin: true + terser@5.19.2: dependencies: '@jridgewell/source-map': 0.3.5 acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /title-case@3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + title-case@3.0.3: dependencies: tslib: 2.6.2 - dev: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@1.0.1: dependencies: punycode: 2.3.0 - dev: true - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /ts-api-utils@1.0.3(typescript@5.3.3): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.0.3(typescript@5.3.3): dependencies: typescript: 5.3.3 - dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + ts-interface-checker@0.1.13: {} - /ts-jest@29.1.1(@babel/core@7.22.5)(esbuild@0.19.9)(jest@29.7.0)(typescript@5.3.3): - resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true + ts-jest@29.1.1(@babel/core@7.22.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.5))(esbuild@0.19.9)(jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)))(typescript@5.3.3): dependencies: - '@babel/core': 7.22.5 bs-logger: 0.2.6 - esbuild: 0.19.9 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -7076,14 +8170,13 @@ packages: semver: 7.5.4 typescript: 5.3.3 yargs-parser: 21.1.1 - dev: true + optionalDependencies: + '@babel/core': 7.22.5 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.22.5) + esbuild: 0.19.9 - /ts-loader@9.5.1(typescript@5.3.3)(webpack@5.88.2): - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 + ts-loader@9.5.1(typescript@5.3.3)(webpack@5.88.2(esbuild@0.19.9)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.15.0 @@ -7092,25 +8185,10 @@ packages: source-map: 0.7.4 typescript: 5.3.3 webpack: 5.88.2(esbuild@0.19.9) - dev: true - /ts-log@2.2.5: - resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} - dev: true + ts-log@2.2.5: {} - /ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -7127,47 +8205,21 @@ packages: typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: true + tslib@2.4.1: {} - /tslib@2.5.3: - resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} - dev: true + tslib@2.5.3: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true + tslib@2.6.2: {} - /tsup@8.0.1(ts-node@10.9.2)(typescript@5.3.3): - resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true + tsup@8.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3))(typescript@5.3.3): dependencies: bundle-require: 4.0.2(esbuild@0.19.9) cac: 6.7.14 @@ -7177,250 +8229,150 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1(ts-node@10.9.2) + postcss-load-config: 4.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) resolve-from: 5.0.0 rollup: 4.8.0 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - ts-node - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.0: dependencies: call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true - /typedoc@0.25.4(typescript@5.3.3): - resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} - engines: {node: '>= 16'} - hasBin: true - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x + typedoc@0.25.4(typescript@5.3.3): dependencies: lunr: 2.3.9 marked: 4.3.0 minimatch: 9.0.3 shiki: 0.14.3 typescript: 5.3.3 - dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.3.3: {} - /ua-parser-js@1.0.36: - resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} - dev: true + ua-parser-js@1.0.36: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /unc-path-regex@0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} - dev: true + unc-path-regex@0.1.2: {} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@5.26.5: {} - /unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} + unixify@1.0.0: dependencies: normalize-path: 2.1.1 - dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.11(browserslist@4.21.9): dependencies: browserslist: 4.21.9 escalade: 3.1.1 picocolors: 1.0.0 - dev: true - /upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + upper-case-first@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + upper-case@2.0.2: dependencies: tslib: 2.6.2 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.0 - dev: true - /urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} - dev: true + urlpattern-polyfill@8.0.2: {} - /urlpattern-polyfill@9.0.0: - resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} - dev: true + urlpattern-polyfill@9.0.0: {} - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@9.1.0: dependencies: '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 - dev: true - /value-or-promise@1.0.12: - resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} - engines: {node: '>=12'} - dev: true + value-or-promise@1.0.12: {} - /vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - dev: true + vscode-oniguruma@1.7.0: {} - /vscode-textmate@8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: true + vscode-textmate@8.0.0: {} - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.0: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - dev: true + web-streams-polyfill@3.2.1: {} - /webcrypto-core@1.7.7: - resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + webcrypto-core@1.7.7: dependencies: '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 tslib: 2.6.2 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true + webidl-conversions@4.0.2: {} - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack@5.88.2(esbuild@0.19.9): - resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.88.2(esbuild@0.19.9): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 1.0.1 @@ -7443,147 +8395,88 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(esbuild@0.19.9)(webpack@5.88.2) + terser-webpack-plugin: 5.3.9(esbuild@0.19.9)(webpack@5.88.2(esbuild@0.19.9)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true + which-module@2.0.1: {} - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.11: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.14.2: {} - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true + y18n@4.0.3: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - dev: true + yaml-ast-parser@0.0.43: {} - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.4: {} - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: true - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + yargs@15.4.1: dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -7596,11 +8489,8 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -7609,14 +8499,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} From c4274241b5f2ef14c95188467166708d04a2fb22 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 30 May 2024 18:32:37 -0400 Subject: [PATCH 123/136] update pnpm lock --- pnpm-lock.yaml | 10664 ++++++++++++++++++++++------------------------- 1 file changed, 4967 insertions(+), 5697 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2bb2d4550..435cfbd88 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,726 +1,1131 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -importers: - - .: - dependencies: - '@aptos-labs/aptos-cli': - specifier: ^0.1.2 - version: 0.1.2 - '@aptos-labs/aptos-client': - specifier: ^0.1.0 - version: 0.1.0 - '@noble/curves': - specifier: ^1.4.0 - version: 1.4.0 - '@noble/hashes': - specifier: ^1.4.0 - version: 1.4.0 - '@scure/bip32': - specifier: ^1.4.0 - version: 1.4.0 - '@scure/bip39': - specifier: ^1.3.0 - version: 1.3.0 - eventemitter3: - specifier: ^5.0.1 - version: 5.0.1 - form-data: - specifier: ^4.0.0 - version: 4.0.0 - js-base64: - specifier: ^3.7.7 - version: 3.7.7 - jwt-decode: - specifier: ^4.0.0 - version: 4.0.0 - poseidon-lite: - specifier: ^0.2.0 - version: 0.2.0 - devDependencies: - '@babel/traverse': - specifier: ^7.23.6 - version: 7.23.6 - '@graphql-codegen/cli': - specifier: ^5.0.0 - version: 5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3) - '@graphql-codegen/import-types-preset': - specifier: ^3.0.0 - version: 3.0.0(graphql@16.8.1) - '@graphql-codegen/typescript': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@graphql-codegen/typescript-graphql-request': - specifier: ^6.0.1 - version: 6.0.1(graphql-request@6.1.0(graphql@16.8.1))(graphql-tag@2.12.6(graphql@16.8.1))(graphql@16.8.1) - '@graphql-codegen/typescript-operations': - specifier: ^4.0.1 - version: 4.0.1(graphql@16.8.1) - '@types/base-64': - specifier: ^1.0.2 - version: 1.0.2 - '@types/jest': - specifier: ^29.5.11 - version: 29.5.11 - '@types/jsonwebtoken': - specifier: ^9.0.6 - version: 9.0.6 - '@types/node': - specifier: ^20.10.4 - version: 20.10.4 - '@typescript-eslint/eslint-plugin': - specifier: ^6.14.0 - version: 6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: ^6.14.0 - version: 6.14.0(eslint@8.55.0)(typescript@5.3.3) - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - eslint: - specifier: ^8.55.0 - version: 8.55.0 - eslint-config-airbnb-base: - specifier: ^15.0.0 - version: 15.0.0(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0) - eslint-config-airbnb-typescript: - specifier: ^17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3))(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.55.0) - eslint-plugin-import: - specifier: ^2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0) - graphql: - specifier: ^16.8.1 - version: 16.8.1 - graphql-request: - specifier: ^6.1.0 - version: 6.1.0(graphql@16.8.1) - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 - prettier: - specifier: ^3.1.1 - version: 3.1.1 - tree-kill: - specifier: ^1.2.2 - version: 1.2.2 - ts-jest: - specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.22.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.5))(esbuild@0.19.9)(jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)))(typescript@5.3.3) - ts-loader: - specifier: ^9.5.1 - version: 9.5.1(typescript@5.3.3)(webpack@5.88.2(esbuild@0.19.9)) - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) - tsup: - specifier: ^8.0.1 - version: 8.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3))(typescript@5.3.3) - typedoc: - specifier: ^0.25.4 - version: 0.25.4(typescript@5.3.3) - typescript: - specifier: ^5.3.3 - version: 5.3.3 +dependencies: + '@aptos-labs/aptos-cli': + specifier: ^0.1.2 + version: 0.1.8 + '@aptos-labs/aptos-client': + specifier: ^0.1.0 + version: 0.1.0 + '@noble/curves': + specifier: ^1.4.0 + version: 1.4.0 + '@noble/hashes': + specifier: ^1.4.0 + version: 1.4.0 + '@scure/bip32': + specifier: ^1.4.0 + version: 1.4.0 + '@scure/bip39': + specifier: ^1.3.0 + version: 1.3.0 + eventemitter3: + specifier: ^5.0.1 + version: 5.0.1 + form-data: + specifier: ^4.0.0 + version: 4.0.0 + js-base64: + specifier: ^3.7.7 + version: 3.7.7 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 + poseidon-lite: + specifier: ^0.2.0 + version: 0.2.0 + +devDependencies: + '@babel/traverse': + specifier: ^7.23.6 + version: 7.24.6 + '@graphql-codegen/cli': + specifier: ^5.0.0 + version: 5.0.2(@types/node@20.12.13)(graphql@16.8.1)(typescript@5.4.5) + '@graphql-codegen/import-types-preset': + specifier: ^3.0.0 + version: 3.0.0(graphql@16.8.1) + '@graphql-codegen/typescript': + specifier: ^4.0.1 + version: 4.0.7(graphql@16.8.1) + '@graphql-codegen/typescript-graphql-request': + specifier: ^6.0.1 + version: 6.2.0(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1) + '@graphql-codegen/typescript-operations': + specifier: ^4.0.1 + version: 4.2.1(graphql@16.8.1) + '@types/base-64': + specifier: ^1.0.2 + version: 1.0.2 + '@types/jest': + specifier: ^29.5.11 + version: 29.5.12 + '@types/jsonwebtoken': + specifier: ^9.0.6 + version: 9.0.6 + '@types/node': + specifier: ^20.10.4 + version: 20.12.13 + '@typescript-eslint/eslint-plugin': + specifier: ^6.14.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^6.14.0 + version: 6.21.0(eslint@8.57.0)(typescript@5.4.5) + dotenv: + specifier: ^16.3.1 + version: 16.4.5 + eslint: + specifier: ^8.55.0 + version: 8.57.0 + eslint-config-airbnb-base: + specifier: ^15.0.0 + version: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-config-airbnb-typescript: + specifier: ^17.1.0 + version: 17.1.0(@typescript-eslint/eslint-plugin@6.21.0)(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-import: + specifier: ^2.29.0 + version: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + graphql: + specifier: ^16.8.1 + version: 16.8.1 + graphql-request: + specifier: ^6.1.0 + version: 6.1.0(graphql@16.8.1) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + prettier: + specifier: ^3.1.1 + version: 3.2.5 + tree-kill: + specifier: ^1.2.2 + version: 1.2.2 + ts-jest: + specifier: ^29.1.1 + version: 29.1.4(@babel/core@7.24.6)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.12.13)(typescript@5.4.5) + tsup: + specifier: ^8.0.1 + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.5) + typedoc: + specifier: ^0.25.4 + version: 0.25.13(typescript@5.4.5) + typescript: + specifier: ^5.3.3 + version: 5.4.5 packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@aptos-labs/aptos-cli@0.1.2': - resolution: {integrity: sha512-MCi+9xPDG/Fx6c6b9ACqyQBYJLHqKJQKB8lay/1sUNJ2mNBB2OU1Lkmd5pmjUG1JbZ5cg2Fmgid5iMKdTnphhA==} + /@aptos-labs/aptos-cli@0.1.8: + resolution: {integrity: sha512-xSWDchqoDR4aR74xNoJZgOzIFtn+EKFGGFLG0vOb+6Ce8Jgg1Ui0Pqhvwbx6Z36dDxfKv0F4M7bnurvWpwAjXA==} hasBin: true + dev: false - '@aptos-labs/aptos-client@0.1.0': + /@aptos-labs/aptos-client@0.1.0: resolution: {integrity: sha512-q3s6pPq8H2buGp+tPuIRInWsYOuhSEwuNJPwd2YnsiID3YSLihn2ug39ktDJAcSOprUcp7Nid8WK7hKqnUmSdA==} engines: {node: '>=15.10.0'} + dependencies: + axios: 1.6.2 + got: 11.8.6 + transitivePeerDependencies: + - debug + dev: false - '@ardatan/relay-compiler@12.0.0': + /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true peerDependencies: graphql: '*' + dependencies: + '@babel/core': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/runtime': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + babel-preset-fbjs: 3.4.0(@babel/core@7.24.6) + chalk: 4.1.2 + fb-watchman: 2.0.2 + fbjs: 3.0.5 + glob: 7.2.3 + graphql: 16.8.1 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true - '@ardatan/sync-fetch@0.0.1': + /@ardatan/sync-fetch@0.0.1: resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true - '@babel/code-frame@7.22.13': - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.22.5': - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.23.5': - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.22.9': - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.22.5': - resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.23.2': - resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + /@babel/code-frame@7.24.6: + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.6 + picocolors: 1.0.1 + dev: true - '@babel/generator@7.22.5': - resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + /@babel/compat-data@7.24.6: + resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} engines: {node: '>=6.9.0'} + dev: true - '@babel/generator@7.23.0': - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + /@babel/core@7.24.6: + resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helpers': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/generator@7.23.6': - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.6: + resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/helper-annotate-as-pure@7.24.6: + resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-compilation-targets@7.22.15': - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + /@babel/helper-compilation-targets@7.24.6: + resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true - '@babel/helper-create-class-features-plugin@7.22.15': - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-create-class-features-plugin@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-member-expression-to-functions': 7.24.6 + '@babel/helper-optimise-call-expression': 7.24.6 + '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + semver: 6.3.1 + dev: true - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + /@babel/helper-environment-visitor@7.24.6: + resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + /@babel/helper-function-name@7.24.6: + resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + dev: true - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-hoist-variables@7.24.6: + resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-member-expression-to-functions@7.23.0': - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + /@babel/helper-member-expression-to-functions@7.24.6: + resolution: {integrity: sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-module-imports@7.22.15': - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.6: + resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-module-transforms@7.23.0': - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + dev: true - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + /@babel/helper-optimise-call-expression@7.24.6: + resolution: {integrity: sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-plugin-utils@7.22.5': - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.6: + resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-replace-supers@7.22.20': - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + /@babel/helper-replace-supers@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-member-expression-to-functions': 7.24.6 + '@babel/helper-optimise-call-expression': 7.24.6 + dev: true - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.22.5': - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.23.4': - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-simple-access@7.24.6: + resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.6: + resolution: {integrity: sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helper-validator-option@7.22.15': - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-split-export-declaration@7.24.6: + resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/helpers@7.22.5': - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + /@babel/helper-string-parser@7.24.6: + resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helpers@7.23.2': - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + /@babel/helper-validator-identifier@7.24.6: + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} + dev: true - '@babel/highlight@7.22.20': - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/helper-validator-option@7.24.6: + resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} engines: {node: '>=6.9.0'} + dev: true - '@babel/highlight@7.22.5': - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/helpers@7.24.6: + resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + dev: true - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.6: + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + dev: true - '@babel/parser@7.22.5': - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.23.0': - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.23.6': - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.24.6: + resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.24.6 + dev: true - '@babel/plugin-proposal-class-properties@7.18.6': + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.6): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-proposal-object-rest-spread@7.20.7': + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.6): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.24.6 + '@babel/core': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-transform-parameters': 7.24.6(@babel/core@7.24.6) + dev: true - '@babel/plugin-syntax-async-generators@7.8.4': + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.6): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-bigint@7.8.3': + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.6): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-class-properties@7.12.13': + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.6): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-flow@7.22.5': - resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + /@babel/plugin-syntax-flow@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-gNkksSdV8RbsCoHF9sjVYrHfYACMl/8U32UfUhJ9+84/ASXw8dlx+eHyyF0m6ncQJ9IBSxfuCkB36GJqYdXTOA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-import-assertions@7.22.5': - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + /@babel/plugin-syntax-import-assertions@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-import-meta@7.10.4': + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.6): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-json-strings@7.8.3': + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.6): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-jsx@7.22.5': - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + /@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.6): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-numeric-separator@7.10.4': + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.6): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-object-rest-spread@7.8.3': + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.6): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-optional-catch-binding@7.8.3': + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.6): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-optional-chaining@7.8.3': + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.6): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-top-level-await@7.14.5': + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.6): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-syntax-typescript@7.22.5': - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-arrow-functions@7.22.5': - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-block-scoped-functions@7.22.5': - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + /@babel/plugin-transform-block-scoped-functions@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-block-scoping@7.23.0': - resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + /@babel/plugin-transform-block-scoping@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-classes@7.22.15': - resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + /@babel/plugin-transform-classes@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) + '@babel/helper-split-export-declaration': 7.24.6 + globals: 11.12.0 + dev: true - '@babel/plugin-transform-computed-properties@7.22.5': - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/template': 7.24.6 + dev: true - '@babel/plugin-transform-destructuring@7.23.0': - resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + /@babel/plugin-transform-destructuring@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-flow-strip-types@7.22.5': - resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + /@babel/plugin-transform-flow-strip-types@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-1l8b24NoCpaQ13Vi6FtLG1nv6kNoi8PWvQb1AYO7GHZDpFfBYc3lbXArx1lP2KRt8b4pej1eWc/zrRmsQTfOdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-flow': 7.24.6(@babel/core@7.24.6) + dev: true - '@babel/plugin-transform-for-of@7.22.15': - resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + /@babel/plugin-transform-for-of@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + dev: true - '@babel/plugin-transform-function-name@7.22.5': - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + /@babel/plugin-transform-function-name@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-literals@7.22.5': - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + /@babel/plugin-transform-literals@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-member-expression-literals@7.22.5': - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + /@babel/plugin-transform-member-expression-literals@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-modules-commonjs@7.23.0': - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + /@babel/plugin-transform-modules-commonjs@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + dev: true - '@babel/plugin-transform-object-super@7.22.5': - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + /@babel/plugin-transform-object-super@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) + dev: true - '@babel/plugin-transform-parameters@7.22.15': - resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + /@babel/plugin-transform-parameters@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-property-literals@7.22.5': - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + /@babel/plugin-transform-property-literals@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-react-display-name@7.22.5': - resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} + /@babel/plugin-transform-react-display-name@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-react-jsx@7.22.15': - resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} + /@babel/plugin-transform-react-jsx@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/types': 7.24.6 + dev: true - '@babel/plugin-transform-shorthand-properties@7.22.5': - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + /@babel/plugin-transform-shorthand-properties@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/plugin-transform-spread@7.22.5': - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + /@babel/plugin-transform-spread@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + dev: true - '@babel/plugin-transform-template-literals@7.22.5': - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + /@babel/plugin-transform-template-literals@7.24.6(@babel/core@7.24.6): + resolution: {integrity: sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + dev: true - '@babel/runtime@7.23.1': - resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.22.15': - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.22.5': - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + /@babel/runtime@7.24.6: + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true - '@babel/traverse@7.23.6': - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + /@babel/template@7.24.6: + resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + dev: true - '@babel/types@7.23.0': - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/traverse@7.24.6: + resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/types@7.23.6': - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.24.6: + resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + to-fast-properties: 2.0.0 + dev: true - '@bcoe/v8-coverage@0.2.3': + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true - '@cspotcode/source-map-support@0.8.1': + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-arm64@0.19.9': - resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-arm@0.19.9': - resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-x64@0.19.9': - resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-arm64@0.19.9': - resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-x64@0.19.9': - resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-arm64@0.19.9': - resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-x64@0.19.9': - resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm64@0.19.9': - resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm@0.19.9': - resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ia32@0.19.9': - resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-loong64@0.19.9': - resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-mips64el@0.19.9': - resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ppc64@0.19.9': - resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-riscv64@0.19.9': - resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-s390x@0.19.9': - resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-x64@0.19.9': - resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/netbsd-x64@0.19.9': - resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/openbsd-x64@0.19.9': - resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/sunos-x64@0.19.9': - resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-arm64@0.19.9': - resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-ia32@0.19.9': - resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-x64@0.19.9': - resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@eslint-community/eslint-utils@4.4.0': + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true - '@eslint-community/regexpp@4.10.0': + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true - '@eslint/eslintrc@2.1.4': + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true - '@eslint/js@8.55.0': - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - '@graphql-codegen/add@3.2.3': + /@graphql-codegen/add@3.2.3(graphql@16.8.1): resolution: {integrity: sha512-sQOnWpMko4JLeykwyjFTxnhqjd/3NOG2OyMuvK76Wnnwh8DRrNf2VEs2kmSvLl7MndMlOj7Kh5U154dVcvhmKQ==} 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 + dependencies: + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.4.1 + dev: true + + /@graphql-codegen/add@5.0.2(graphql@16.8.1): + resolution: {integrity: sha512-ouBkSvMFUhda5VoKumo/ZvsZM9P5ZTyDsI8LW18VxSNWOjrTeLXBWHG8Gfaai0HwhflPtCYVABbriEcOmrRShQ==} + 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 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: true - '@graphql-codegen/cli@5.0.0': - resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} + /@graphql-codegen/cli@5.0.2(@types/node@20.12.13)(graphql@16.8.1)(typescript@5.4.5): + resolution: {integrity: sha512-MBIaFqDiLKuO4ojN6xxG9/xL9wmfD3ZjZ7RsPjwQnSHBCUXnEkdKvX+JVpx87Pq29Ycn8wTJUguXnTZ7Di0Mlw==} hasBin: true peerDependencies: '@parcel/watcher': ^2.1.0 @@ -728,3912 +1133,198 @@ packages: peerDependenciesMeta: '@parcel/watcher': optional: true + dependencies: + '@babel/generator': 7.24.6 + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + '@graphql-codegen/client-preset': 4.2.6(graphql@16.8.1) + '@graphql-codegen/core': 4.0.2(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-tools/apollo-engine-loader': 8.0.1(graphql@16.8.1) + '@graphql-tools/code-file-loader': 8.1.2(graphql@16.8.1) + '@graphql-tools/git-loader': 8.0.6(graphql@16.8.1) + '@graphql-tools/github-loader': 8.0.1(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/graphql-file-loader': 8.0.1(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.1(graphql@16.8.1) + '@graphql-tools/load': 8.0.2(graphql@16.8.1) + '@graphql-tools/prisma-loader': 8.0.4(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@whatwg-node/fetch': 0.8.8 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.4.5) + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.8.1 + graphql-config: 5.0.3(@types/node@20.12.13)(graphql@16.8.1)(typescript@5.4.5) + inquirer: 8.2.6 + is-glob: 4.0.3 + jiti: 1.21.0 + json-to-pretty-yaml: 1.2.2 + listr2: 4.0.5 + log-symbols: 4.1.0 + micromatch: 4.0.7 + shell-quote: 1.8.1 + string-env-interpolation: 1.0.1 + ts-log: 2.2.5 + tslib: 2.6.2 + yaml: 2.4.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - supports-color + - typescript + - utf-8-validate + dev: true + + /@graphql-codegen/client-preset@4.2.6(graphql@16.8.1): + resolution: {integrity: sha512-e7SzPb+nxNJfsD0uG+NSyzIeTtCXTouX5VThmcCoqGMDLgF5Lo7932B3HtZCvzmzqcXxRjJ81CmkA2LhlqIbCw==} + 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 + dependencies: + '@babel/helper-plugin-utils': 7.24.6 + '@babel/template': 7.24.6 + '@graphql-codegen/add': 5.0.2(graphql@16.8.1) + '@graphql-codegen/gql-tag-operations': 4.0.7(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/typed-document-node': 5.0.7(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.7(graphql@16.8.1) + '@graphql-codegen/typescript-operations': 4.2.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) + '@graphql-tools/documents': 1.0.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/core@4.0.2(graphql@16.8.1): + resolution: {integrity: sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==} + 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 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-tools/schema': 10.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + dev: true - '@graphql-codegen/core@4.0.0': - resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} + /@graphql-codegen/gql-tag-operations@4.0.7(graphql@16.8.1): + resolution: {integrity: sha512-2I69+IDC8pqAohH6cgKse/vPfJ/4TRTJX96PkAKz8S4RD54PUHtBmzCdBInIFEP/vQuH5mFUAaIKXXjznmGOsg==} 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 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true - '@graphql-codegen/import-types-preset@3.0.0': + /@graphql-codegen/import-types-preset@3.0.0(graphql@16.8.1): resolution: {integrity: sha512-8Gl3cg+YCi0xLB5J71QQkqXvrdJVOTitJy+0YupconZwrd9cRWhN3k+SimtMKpzTVBNN96v1R8yvFLdfVF+iZA==} engines: {node: '>= 16.0.0'} 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 + dependencies: + '@graphql-codegen/add': 3.2.3(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true - '@graphql-codegen/plugin-helpers@2.7.2': + /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1): resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} 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 + dependencies: + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + change-case-all: 1.0.14 + common-tags: 1.8.2 + graphql: 16.8.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.4.1 + dev: true - '@graphql-codegen/plugin-helpers@3.1.2': + /@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1): resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} 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 - - '@graphql-codegen/plugin-helpers@5.0.1': - resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} - 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 - - '@graphql-codegen/schema-ast@4.0.0': - resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} - 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 - - '@graphql-codegen/typescript-graphql-request@6.0.1': - resolution: {integrity: sha512-aScw7ICyscW7bYLh2HyjQU3geCAjvFy6sRIlzgdkeFvcKBdjCil69upkyZAyntnSno2C4ZoUv7sHOpyQ9hQmFQ==} - engines: {node: '>= 16.0.0'} - 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 - graphql-request: ^6.0.0 - graphql-tag: ^2.0.0 - - '@graphql-codegen/typescript-operations@4.0.1': - resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} - 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 - - '@graphql-codegen/typescript@4.0.1': - resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - - '@graphql-codegen/visitor-plugin-common@2.13.1': - resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} - 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 - - '@graphql-codegen/visitor-plugin-common@4.0.1': - resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} - 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 - - '@graphql-tools/apollo-engine-loader@8.0.0': - resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/batch-execute@9.0.2': - resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/code-file-loader@8.0.3': - resolution: {integrity: sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/delegate@10.0.3': - resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/executor-graphql-ws@1.1.0': - resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/executor-http@1.0.3': - resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/executor-legacy-ws@1.0.4': - resolution: {integrity: sha512-b7aGuRekZDS+m3af3BIvMKxu15bmVPMt5eGQVuP2v5pxmbaPTh+iv5mx9b3Plt32z5Ke5tycBnNm5urSFtW8ng==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/executor@1.2.0': - resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/git-loader@8.0.3': - resolution: {integrity: sha512-Iz9KbRUAkuOe8JGTS0qssyJ+D5Snle17W+z9anwWrLFrkBhHrRFUy5AdjZqgJuhls0x30QkZBnnCtnHDBdQ4nA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/github-loader@8.0.0': - resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/graphql-file-loader@8.0.0': - resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/graphql-tag-pluck@8.1.0': - resolution: {integrity: sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/import@7.0.0': - resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/json-file-loader@8.0.0': - resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/load@8.0.0': - resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/merge@9.0.0': - resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/optimize@1.4.0': - resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/optimize@2.0.0': - resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/prisma-loader@8.0.2': - resolution: {integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/relay-operation-optimizer@6.5.18': - resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/relay-operation-optimizer@7.0.0': - resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/schema@10.0.0': - resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/url-loader@8.0.0': - resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/utils@10.0.8': - resolution: {integrity: sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/utils@8.13.1': - resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/utils@9.2.1': - resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/wrap@10.0.1': - resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - 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 || ^17.0.0 - - '@humanwhocodes/config-array@0.11.13': - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.1': - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.0': - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.5': - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - - '@jridgewell/sourcemap-codec@1.4.14': - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.18': - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@noble/curves@1.4.0': - resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} - - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@peculiar/asn1-schema@2.3.6': - resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} - - '@peculiar/json-schema@1.1.12': - resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} - engines: {node: '>=8.0.0'} - - '@peculiar/webcrypto@1.4.3': - resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} - engines: {node: '>=10.12.0'} - - '@repeaterjs/repeater@3.0.4': - resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} - - '@rollup/rollup-android-arm-eabi@4.8.0': - resolution: {integrity: sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.8.0': - resolution: {integrity: sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.8.0': - resolution: {integrity: sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.8.0': - resolution: {integrity: sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.8.0': - resolution: {integrity: sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.8.0': - resolution: {integrity: sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.8.0': - resolution: {integrity: sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.8.0': - resolution: {integrity: sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.8.0': - resolution: {integrity: sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.8.0': - resolution: {integrity: sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.8.0': - resolution: {integrity: sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.8.0': - resolution: {integrity: sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.8.0': - resolution: {integrity: sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==} - cpu: [x64] - os: [win32] - - '@scure/base@1.1.6': - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - - '@scure/bip32@1.4.0': - resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} - - '@scure/bip39@1.3.0': - resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@sinonjs/commons@3.0.0': - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@tsconfig/node10@1.0.9': - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/babel__core@7.20.1': - resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} - - '@types/babel__generator@7.6.4': - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} - - '@types/babel__template@7.4.1': - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} - - '@types/babel__traverse@7.20.1': - resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} - - '@types/base-64@1.0.2': - resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/eslint-scope@3.7.4': - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} - - '@types/eslint@8.44.1': - resolution: {integrity: sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==} - - '@types/estree@1.0.1': - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - - '@types/graceful-fs@4.1.6': - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} - - '@types/http-cache-semantics@4.0.1': - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - - '@types/istanbul-lib-coverage@2.0.4': - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - - '@types/istanbul-lib-report@3.0.0': - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} - - '@types/istanbul-reports@3.0.1': - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} - - '@types/jest@29.5.11': - resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} - - '@types/js-yaml@4.0.6': - resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==} - - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - - '@types/json-stable-stringify@1.0.34': - resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/jsonwebtoken@9.0.6': - resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - - '@types/node@20.10.4': - resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} - - '@types/responselike@1.0.0': - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - - '@types/semver@7.5.4': - resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} - - '@types/stack-utils@2.0.1': - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - - '@types/ws@8.5.6': - resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} - - '@types/yargs-parser@21.0.0': - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - - '@types/yargs@17.0.24': - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} - - '@typescript-eslint/eslint-plugin@6.14.0': - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@6.14.0': - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.14.0': - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.14.0': - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.14.0': - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.14.0': - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.14.0': - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.14.0': - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@webassemblyjs/ast@1.11.6': - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} - - '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - - '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - - '@webassemblyjs/helper-buffer@1.11.6': - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - - '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - - '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - - '@webassemblyjs/helper-wasm-section@1.11.6': - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} - - '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - - '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - - '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - - '@webassemblyjs/wasm-edit@1.11.6': - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} - - '@webassemblyjs/wasm-gen@1.11.6': - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} - - '@webassemblyjs/wasm-opt@1.11.6': - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} - - '@webassemblyjs/wasm-parser@1.11.6': - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} - - '@webassemblyjs/wast-printer@1.11.6': - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} - - '@whatwg-node/events@0.0.3': - resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} - - '@whatwg-node/events@0.1.1': - resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} - engines: {node: '>=16.0.0'} - - '@whatwg-node/fetch@0.8.8': - resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} - - '@whatwg-node/fetch@0.9.14': - resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==} - engines: {node: '>=16.0.0'} - - '@whatwg-node/node-fetch@0.3.6': - resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} - - '@whatwg-node/node-fetch@0.5.0': - resolution: {integrity: sha512-q76lDAafvHNGWedNAVHrz/EyYTS8qwRLcwne8SJQdRN5P3HydxU6XROFvJfTML6KZXQX2FDdGY4/SnaNyd7M0Q==} - engines: {node: '>=16.0.0'} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-sequence-parser@1.1.0: - resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} - engines: {node: '>= 0.4'} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - - asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} - engines: {node: '>=12.0.0'} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} - - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - - axios@1.6.2: - resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: - resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} - - babel-preset-current-node-syntax@1.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-fbjs@3.4.0: - resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - bundle-require@4.0.2: - resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.17' - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001517: - resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} - - capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - change-case-all@1.0.14: - resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} - - change-case-all@1.0.15: - resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} - - change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - - chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - - ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - - cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} - engines: {node: '>=6'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - - constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - - cross-inspect@1.0.0: - resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} - engines: {node: '>=16.0.0'} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} - - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - - dset@3.1.2: - resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} - engines: {node: '>=4'} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - electron-to-chromium@1.4.467: - resolution: {integrity: sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.3.0: - resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} - - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.19.9: - resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-airbnb-base@15.0.0: - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - - eslint-config-airbnb-typescript@17.1.0: - resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 - '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.29.0: - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - - extract-files@11.0.0: - resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} - engines: {node: ^12.20 || >= 14.13} - - fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-querystring@1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - - fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} - - fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} - - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} - engines: {node: '>=8'} - - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - graphql-config@5.0.3: - resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} - engines: {node: '>= 16.0.0'} - peerDependencies: - cosmiconfig-toml-loader: ^1.0.0 - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - cosmiconfig-toml-loader: - optional: true - - graphql-request@6.1.0: - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} - peerDependencies: - graphql: 14 - 16 - - graphql-tag@2.12.6: - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - 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 - - graphql-ws@5.14.2: - resolution: {integrity: sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==} - engines: {node: '>=10'} - peerDependencies: - graphql: '>=0.11 <=16' - - graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - - header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - - http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - immutable@3.7.6: - resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} - engines: {node: '>=0.8.0'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} - - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} - - internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} - - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - - is-absolute@1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} - - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-lower-case@2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} - - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-relative@1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} - - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - - is-unc-path@1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-upper-case@2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isomorphic-ws@5.0.0: - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' - - istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - - jose@5.2.3: - resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} - - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - - js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json-stable-stringify@1.0.2: - resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} - - json-to-pretty-yaml@1.2.2: - resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} - engines: {node: '>= 0.2.0'} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - - jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - - jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - - jwt-decode@4.0.0: - resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} - engines: {node: '>=18'} - - keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - listr2@4.0.5: - resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} - engines: {node: '>=12'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lower-case-first@2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} - - marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - meros@1.3.0: - resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} - engines: {node: '>=13'} - peerDependencies: - '@types/node': '>=13' - peerDependenciesMeta: - '@types/node': - optional: true - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@4.2.3: - resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} - engines: {node: '>=10'} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} - - normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-filepath@1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - - path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-root-regex@0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} - - path-root@0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - poseidon-lite@0.2.0: - resolution: {integrity: sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==} - - postcss-load-config@4.0.1: - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} - engines: {node: '>=14'} - hasBin: true - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - - pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - - pvtsutils@1.3.5: - resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} - - pvutils@1.1.3: - resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} - engines: {node: '>=6.0.0'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - - regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} - engines: {node: '>= 0.4'} - - relay-runtime@12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} - - remedial@1.0.8: - resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} - - remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - - remove-trailing-spaces@1.0.8: - resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - - rollup@4.8.0: - resolution: {integrity: sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - - safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - - scuid@1.1.0: - resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - - sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - - serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - - shiki@0.14.3: - resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} - - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signedsource@1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - - sponge-case@1.0.1: - resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - string-env-interpolation@1.0.1: - resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - - string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} - engines: {node: '>=8'} - hasBin: true - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - swap-case@2.0.2: - resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - terser-webpack-plugin@5.3.9: - resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} - engines: {node: '>=10'} - hasBin: true - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - title-case@3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} - - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-api-utils@1.0.3: - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - ts-jest@29.1.1: - resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-loader@9.5.1: - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - - ts-log@2.2.5: - resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} - - tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - - tslib@2.5.3: - resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} - - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - tsup@8.0.1: - resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typedoc@0.25.4: - resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} - engines: {node: '>= 16'} - hasBin: true - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x - - typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - - ua-parser-js@1.0.36: - resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - unc-path-regex@0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} - - update-browserslist-db@1.0.11: - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} - - upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} - - urlpattern-polyfill@9.0.0: - resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} - engines: {node: '>=10.12.0'} - - value-or-promise@1.0.12: - resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} - engines: {node: '>=12'} - - vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - - vscode-textmate@8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - - webcrypto-core@1.7.7: - resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack@5.88.2: - resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - - yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - - '@aptos-labs/aptos-cli@0.1.2': {} - - '@aptos-labs/aptos-client@0.1.0': - dependencies: - axios: 1.6.2 - got: 11.8.6 - transitivePeerDependencies: - - debug - - '@ardatan/relay-compiler@12.0.0(graphql@16.8.1)': - dependencies: - '@babel/core': 7.22.5 - '@babel/generator': 7.23.0 - '@babel/parser': 7.23.0 - '@babel/runtime': 7.23.1 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.0 - babel-preset-fbjs: 3.4.0(@babel/core@7.22.5) - chalk: 4.1.2 - fb-watchman: 2.0.2 - fbjs: 3.0.5 - glob: 7.2.3 - graphql: 16.8.1 - immutable: 3.7.6 - invariant: 2.2.4 - nullthrows: 1.1.1 - relay-runtime: 12.0.0 - signedsource: 1.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - encoding - - supports-color - - '@ardatan/sync-fetch@0.0.1': - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - '@babel/code-frame@7.22.13': - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - - '@babel/code-frame@7.22.5': - dependencies: - '@babel/highlight': 7.22.5 - - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - '@babel/compat-data@7.22.9': {} - - '@babel/core@7.22.5': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.5) - '@babel/helpers': 7.22.5 - '@babel/parser': 7.23.0 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.0 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/core@7.23.2': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.0 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.0 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.22.5': - dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - - '@babel/generator@7.23.0': - dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - - '@babel/generator@7.23.6': - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - - '@babel/helper-annotate-as-pure@7.22.5': - dependencies: - '@babel/types': 7.23.0 - - '@babel/helper-compilation-targets@7.22.15': - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.9 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.23.6 - - '@babel/helper-member-expression-to-functions@7.23.0': - dependencies: - '@babel/types': 7.23.0 - - '@babel/helper-module-imports@7.22.15': - dependencies: - '@babel/types': 7.23.0 - - '@babel/helper-module-transforms@7.23.0(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - '@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2)': - dependencies: - '@babel/core': 7.23.2 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - '@babel/helper-optimise-call-expression@7.22.5': - dependencies: - '@babel/types': 7.23.0 - - '@babel/helper-plugin-utils@7.22.5': {} - - '@babel/helper-replace-supers@7.22.20(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - - '@babel/helper-simple-access@7.22.5': - dependencies: - '@babel/types': 7.23.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - dependencies: - '@babel/types': 7.23.0 - - '@babel/helper-split-export-declaration@7.22.6': - dependencies: - '@babel/types': 7.23.6 - - '@babel/helper-string-parser@7.22.5': {} - - '@babel/helper-string-parser@7.23.4': {} - - '@babel/helper-validator-identifier@7.22.20': {} - - '@babel/helper-validator-option@7.22.15': {} - - '@babel/helpers@7.22.5': - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.0 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.23.2': - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.0 - transitivePeerDependencies: - - supports-color - - '@babel/highlight@7.22.20': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/highlight@7.22.5': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/highlight@7.23.4': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/parser@7.22.5': - dependencies: - '@babel/types': 7.23.0 - - '@babel/parser@7.23.0': - dependencies: - '@babel/types': 7.23.0 - - '@babel/parser@7.23.6': - dependencies: - '@babel/types': 7.23.6 - - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5)': - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.5) - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2)': - dependencies: - '@babel/core': 7.23.2 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - - '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 - - '@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) - - '@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - - '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.5) - - '@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/types': 7.23.0 - - '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - - '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5)': - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/runtime@7.23.1': - dependencies: - regenerator-runtime: 0.14.0 - - '@babel/template@7.22.15': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - - '@babel/template@7.22.5': - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.23.0 - - '@babel/traverse@7.23.6': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.23.0': - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.23.6': - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@bcoe/v8-coverage@0.2.3': {} - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild/android-arm64@0.19.9': - optional: true - - '@esbuild/android-arm@0.19.9': - optional: true - - '@esbuild/android-x64@0.19.9': - optional: true - - '@esbuild/darwin-arm64@0.19.9': - optional: true - - '@esbuild/darwin-x64@0.19.9': - optional: true - - '@esbuild/freebsd-arm64@0.19.9': - optional: true - - '@esbuild/freebsd-x64@0.19.9': - optional: true - - '@esbuild/linux-arm64@0.19.9': - optional: true - - '@esbuild/linux-arm@0.19.9': - optional: true - - '@esbuild/linux-ia32@0.19.9': - optional: true - - '@esbuild/linux-loong64@0.19.9': - optional: true - - '@esbuild/linux-mips64el@0.19.9': - optional: true - - '@esbuild/linux-ppc64@0.19.9': - optional: true - - '@esbuild/linux-riscv64@0.19.9': - optional: true - - '@esbuild/linux-s390x@0.19.9': - optional: true - - '@esbuild/linux-x64@0.19.9': - optional: true - - '@esbuild/netbsd-x64@0.19.9': - optional: true - - '@esbuild/openbsd-x64@0.19.9': - optional: true - - '@esbuild/sunos-x64@0.19.9': - optional: true - - '@esbuild/win32-arm64@0.19.9': - optional: true - - '@esbuild/win32-ia32@0.19.9': - optional: true - - '@esbuild/win32-x64@0.19.9': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.55.0)': - dependencies: - eslint: 8.55.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.10.0': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.20.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.55.0': {} - - '@graphql-codegen/add@3.2.3(graphql@16.8.1)': - dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.4.1 - - '@graphql-codegen/cli@5.0.0(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3)': - dependencies: - '@babel/generator': 7.22.5 - '@babel/template': 7.22.5 - '@babel/types': 7.23.0 - '@graphql-codegen/core': 4.0.0(graphql@16.8.1) - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/code-file-loader': 8.0.3(graphql@16.8.1) - '@graphql-tools/git-loader': 8.0.3(graphql@16.8.1) - '@graphql-tools/github-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/load': 8.0.0(graphql@16.8.1) - '@graphql-tools/prisma-loader': 8.0.2(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@whatwg-node/fetch': 0.8.8 - chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.3.3) - debounce: 1.2.1 - detect-indent: 6.1.0 - graphql: 16.8.1 - graphql-config: 5.0.3(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3) - inquirer: 8.2.6 - is-glob: 4.0.3 - jiti: 1.21.0 - json-to-pretty-yaml: 1.2.2 - listr2: 4.0.5 - log-symbols: 4.1.0 - micromatch: 4.0.5 - shell-quote: 1.8.1 - string-env-interpolation: 1.0.1 - ts-log: 2.2.5 - tslib: 2.6.2 - yaml: 2.3.4 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - cosmiconfig-toml-loader - - encoding - - enquirer - - supports-color - - typescript - - utf-8-validate - - '@graphql-codegen/core@4.0.0(graphql@16.8.1)': - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/schema': 10.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.5.3 - - '@graphql-codegen/import-types-preset@3.0.0(graphql@16.8.1)': - dependencies: - '@graphql-codegen/add': 3.2.3(graphql@16.8.1) - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) - graphql: 16.8.1 - tslib: 2.6.2 - transitivePeerDependencies: - - encoding - - supports-color - - '@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 8.13.1(graphql@16.8.1) - change-case-all: 1.0.14 + '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.8.1 import-from: 4.0.0 lodash: 4.17.21 tslib: 2.4.1 + dev: true - '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1)': + /@graphql-codegen/plugin-helpers@5.0.4(graphql@16.8.1): + resolution: {integrity: sha512-MOIuHFNWUnFnqVmiXtrI+4UziMTYrcquljaI5f/T/Bc7oO7sXcfkAvgkNWEEi9xWreYwvuer3VHCuPI/lAFWbw==} + 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 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.8.1 import-from: 4.0.0 lodash: 4.17.21 - tslib: 2.4.1 + tslib: 2.6.2 + dev: true - '@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.1)': + /@graphql-codegen/schema-ast@4.0.2(graphql@16.8.1): + resolution: {integrity: sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==} + 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 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - change-case-all: 1.0.15 - common-tags: 1.8.2 + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 - import-from: 4.0.0 - lodash: 4.17.21 - tslib: 2.5.3 + tslib: 2.6.2 + dev: true - '@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1)': + /@graphql-codegen/typed-document-node@5.0.7(graphql@16.8.1): + resolution: {integrity: sha512-rgFh96hAbNwPUxLVlRcNhGaw2+y7ZGx7giuETtdO8XzPasTQGWGRkZ3wXQ5UUiTX4X3eLmjnuoXYKT7HoxSznQ==} + 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 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 graphql: 16.8.1 - tslib: 2.5.3 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true - '@graphql-codegen/typescript-graphql-request@6.0.1(graphql-request@6.1.0(graphql@16.8.1))(graphql-tag@2.12.6(graphql@16.8.1))(graphql@16.8.1)': + /@graphql-codegen/typescript-graphql-request@6.2.0(graphql-request@6.1.0)(graphql-tag@2.12.6)(graphql@16.8.1): + resolution: {integrity: sha512-nkp5tr4PrC/+2QkQqi+IB+bc7AavUnUvXPW8MC93HZRvwfMGy6m2Oo7b9JCPZ3vhNpqT2VDWOn/zIZXKz6zJAw==} + engines: {node: '>= 16.0.0'} + 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 + graphql-request: ^6.0.0 + graphql-tag: ^2.0.0 dependencies: '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) @@ -4645,32 +1336,44 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-codegen/typescript-operations@4.0.1(graphql@16.8.1)': + /@graphql-codegen/typescript-operations@4.2.1(graphql@16.8.1): + resolution: {integrity: sha512-LhEPsaP+AI65zfK2j6CBAL4RT0bJL/rR9oRWlvwtHLX0t7YQr4CP4BXgvvej9brYdedAxHGPWeV1tPHy5/z9KQ==} + 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 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-codegen/typescript': 4.0.1(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.7(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 - tslib: 2.5.3 + tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-codegen/typescript@4.0.1(graphql@16.8.1)': + /@graphql-codegen/typescript@4.0.7(graphql@16.8.1): + resolution: {integrity: sha512-Gn+JNvQBJhBqH7s83piAJ6UeU/MTj9GXWFO9bdbl8PMLCAM1uFAtg04iHfkGCtDKXcUg5a3Dt/SZG85uk5KuhA==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-codegen/schema-ast': 4.0.0(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) + '@graphql-codegen/schema-ast': 4.0.2(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 5.2.0(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 - tslib: 2.5.3 + tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.1)': + /@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.1): + resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} + 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 dependencies: '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.1) '@graphql-tools/optimize': 1.4.0(graphql@16.8.1) @@ -4686,129 +1389,194 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.1)': + /@graphql-codegen/visitor-plugin-common@5.2.0(graphql@16.8.1): + resolution: {integrity: sha512-0p8AwmARaZCAlDFfQu6Sz+JV6SjbPDx3y2nNM7WAAf0au7Im/GpJ7Ke3xaIYBc1b2rTZ+DqSTJI/zomENGD9NA==} + 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 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.8.1) '@graphql-tools/optimize': 2.0.0(graphql@16.8.1) - '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 7.0.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 graphql: 16.8.1 graphql-tag: 2.12.6(graphql@16.8.1) parse-filepath: 1.0.2 - tslib: 2.5.3 + tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1)': + /@graphql-tools/apollo-engine-loader@8.0.1(graphql@16.8.1): + resolution: {integrity: sha512-NaPeVjtrfbPXcl+MLQCJLWtqe2/E4bbAqcauEOQ+3sizw1Fc2CNmhHRF8a6W4D0ekvTRRXAMptXYgA2uConbrA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@whatwg-node/fetch': 0.9.14 + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.17 graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: - encoding + dev: true - '@graphql-tools/batch-execute@9.0.2(graphql@16.8.1)': + /@graphql-tools/batch-execute@9.0.4(graphql@16.8.1): + resolution: {integrity: sha512-kkebDLXgDrep5Y0gK1RN3DMUlLqNhg60OAz0lTCqrYeja6DshxLtLkj+zV4mVbBA4mQOEoBmw6g1LZs3dA84/w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 + dev: true - '@graphql-tools/code-file-loader@8.0.3(graphql@16.8.1)': + /@graphql-tools/code-file-loader@8.1.2(graphql@16.8.1): + resolution: {integrity: sha512-GrLzwl1QV2PT4X4TEEfuTmZYzIZHLqoTGBjczdUzSqgCCcqwWzLB3qrJxFQfI8e5s1qZ1bhpsO9NoMn7tvpmyA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.3.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - supports-color + dev: true - '@graphql-tools/delegate@10.0.3(graphql@16.8.1)': + /@graphql-tools/delegate@10.0.11(graphql@16.8.1): + resolution: {integrity: sha512-+sKeecdIVXhFB/66e5yjeKYZ3Lpn52yNG637ElVhciuLGgFc153rC6l6zcuNd9yx5wMrNx35U/h3HsMIEI3xNw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/batch-execute': 9.0.2(graphql@16.8.1) - '@graphql-tools/executor': 1.2.0(graphql@16.8.1) - '@graphql-tools/schema': 10.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/batch-execute': 9.0.4(graphql@16.8.1) + '@graphql-tools/executor': 1.2.6(graphql@16.8.1) + '@graphql-tools/schema': 10.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 + dev: true + + /@graphql-tools/documents@1.0.1(graphql@16.8.1): + resolution: {integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.8.1 + lodash.sortby: 4.7.0 + tslib: 2.6.2 + dev: true - '@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1)': + /@graphql-tools/executor-graphql-ws@1.1.2(graphql@16.8.1): + resolution: {integrity: sha512-+9ZK0rychTH1LUv4iZqJ4ESbmULJMTsv3XlFooPUngpxZkk00q6LqHKJRrsLErmQrVaC7cwQCaRBJa0teK17Lg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@types/ws': 8.5.6 + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@types/ws': 8.5.10 graphql: 16.8.1 - graphql-ws: 5.14.2(graphql@16.8.1) - isomorphic-ws: 5.0.0(ws@8.14.2) + graphql-ws: 5.16.0(graphql@16.8.1) + isomorphic-ws: 5.0.0(ws@8.17.0) tslib: 2.6.2 - ws: 8.14.2 + ws: 8.17.0 transitivePeerDependencies: - bufferutil - utf-8-validate + dev: true - '@graphql-tools/executor-http@1.0.3(@types/node@20.10.4)(graphql@16.8.1)': + /@graphql-tools/executor-http@1.0.9(@types/node@20.12.13)(graphql@16.8.1): + resolution: {integrity: sha512-+NXaZd2MWbbrWHqU4EhXcrDbogeiCDmEbrAN+rMn4Nu2okDjn2MTFDbTIab87oEubQCH4Te1wDkWPKrzXup7+Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@repeaterjs/repeater': 3.0.4 - '@whatwg-node/fetch': 0.9.14 + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/fetch': 0.9.17 extract-files: 11.0.0 graphql: 16.8.1 - meros: 1.3.0(@types/node@20.10.4) + meros: 1.3.0(@types/node@20.12.13) tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' + dev: true - '@graphql-tools/executor-legacy-ws@1.0.4(graphql@16.8.1)': + /@graphql-tools/executor-legacy-ws@1.0.6(graphql@16.8.1): + resolution: {integrity: sha512-lDSxz9VyyquOrvSuCCnld3256Hmd+QI2lkmkEv7d4mdzkxkK4ddAWW1geQiWrQvWmdsmcnGGlZ7gDGbhEExwqg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@types/ws': 8.5.6 + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@types/ws': 8.5.10 graphql: 16.8.1 - isomorphic-ws: 5.0.0(ws@8.14.2) + isomorphic-ws: 5.0.0(ws@8.17.0) tslib: 2.6.2 - ws: 8.14.2 + ws: 8.17.0 transitivePeerDependencies: - bufferutil - utf-8-validate + dev: true - '@graphql-tools/executor@1.2.0(graphql@16.8.1)': + /@graphql-tools/executor@1.2.6(graphql@16.8.1): + resolution: {integrity: sha512-+1kjfqzM5T2R+dCw7F4vdJ3CqG+fY/LYJyhNiWEFtq0ToLwYzR/KKyD8YuzTirEjSxWTVlcBh7endkx5n5F6ew==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) - '@repeaterjs/repeater': 3.0.4 + '@repeaterjs/repeater': 3.0.6 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 + dev: true - '@graphql-tools/git-loader@8.0.3(graphql@16.8.1)': + /@graphql-tools/git-loader@8.0.6(graphql@16.8.1): + resolution: {integrity: sha512-FQFO4H5wHAmHVyuUQrjvPE8re3qJXt50TWHuzrK3dEaief7JosmlnkLMDMbMBwtwITz9u1Wpl6doPhT2GwKtlw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.3.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 is-glob: 4.0.3 - micromatch: 4.0.5 + micromatch: 4.0.7 tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - supports-color + dev: true - '@graphql-tools/github-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1)': + /@graphql-tools/github-loader@8.0.1(@types/node@20.12.13)(graphql@16.8.1): + resolution: {integrity: sha512-W4dFLQJ5GtKGltvh/u1apWRFKBQOsDzFxO9cJkOYZj1VzHCpRF43uLST4VbCfWve+AwBqOuKr7YgkHoxpRMkcg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 1.0.3(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@whatwg-node/fetch': 0.9.14 + '@graphql-tools/executor-http': 1.0.9(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.3.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.17 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 @@ -4816,85 +1584,127 @@ snapshots: - '@types/node' - encoding - supports-color + dev: true - '@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.1)': + /@graphql-tools/graphql-file-loader@8.0.1(graphql@16.8.1): + resolution: {integrity: sha512-7gswMqWBabTSmqbaNyWSmRRpStWlcCkBc73E6NZNlh4YNuiyKOwbvSkOUYFOqFMfEL+cFsXgAvr87Vz4XrYSbA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 7.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/import': 7.0.1(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 + dev: true - '@graphql-tools/graphql-tag-pluck@8.1.0(graphql@16.8.1)': + /@graphql-tools/graphql-tag-pluck@8.3.1(graphql@16.8.1): + resolution: {integrity: sha512-ujits9tMqtWQQq4FI4+qnVPpJvSEn7ogKtyN/gfNT+ErIn6z1e4gyVGQpTK5sgAUXq1lW4gU/5fkFFC5/sL2rQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/parser': 7.23.0 - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) - '@babel/traverse': 7.23.6 - '@babel/types': 7.23.0 - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/plugin-syntax-import-assertions': 7.24.6(@babel/core@7.24.6) + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: - supports-color + dev: true - '@graphql-tools/import@7.0.0(graphql@16.8.1)': + /@graphql-tools/import@7.0.1(graphql@16.8.1): + resolution: {integrity: sha512-935uAjAS8UAeXThqHfYVr4HEAp6nHJ2sximZKO1RzUTq5WoALMAhhGARl0+ecm6X+cqNUwIChJbjtaa6P/ML0w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 resolve-from: 5.0.0 tslib: 2.6.2 + dev: true - '@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1)': + /@graphql-tools/json-file-loader@8.0.1(graphql@16.8.1): + resolution: {integrity: sha512-lAy2VqxDAHjVyqeJonCP6TUemrpYdDuKt25a10X6zY2Yn3iFYGnuIDQ64cv3ytyGY6KPyPB+Kp+ZfOkNDG3FQA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 unixify: 1.0.0 + dev: true - '@graphql-tools/load@8.0.0(graphql@16.8.1)': + /@graphql-tools/load@8.0.2(graphql@16.8.1): + resolution: {integrity: sha512-S+E/cmyVmJ3CuCNfDuNF2EyovTwdWfQScXv/2gmvJOti2rGD8jTt9GYVzXaxhblLivQR9sBUCNZu/w7j7aXUCA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 10.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/schema': 10.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 p-limit: 3.1.0 tslib: 2.6.2 + dev: true - '@graphql-tools/merge@9.0.0(graphql@16.8.1)': + /@graphql-tools/merge@9.0.4(graphql@16.8.1): + resolution: {integrity: sha512-MivbDLUQ+4Q8G/Hp/9V72hbn810IJDEZQ57F01sHnlrrijyadibfVhaQfW/pNH+9T/l8ySZpaR/DpL5i+ruZ+g==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 + dev: true - '@graphql-tools/optimize@1.4.0(graphql@16.8.1)': + /@graphql-tools/optimize@1.4.0(graphql@16.8.1): + resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 16.8.1 tslib: 2.6.2 + dev: true - '@graphql-tools/optimize@2.0.0(graphql@16.8.1)': + /@graphql-tools/optimize@2.0.0(graphql@16.8.1): + resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 16.8.1 tslib: 2.6.2 + dev: true - '@graphql-tools/prisma-loader@8.0.2(@types/node@20.10.4)(graphql@16.8.1)': + /@graphql-tools/prisma-loader@8.0.4(@types/node@20.12.13)(graphql@16.8.1): + resolution: {integrity: sha512-hqKPlw8bOu/GRqtYr0+dINAI13HinTVYBDqhwGAPIFmLr5s+qKskzgCiwbsckdrb5LWVFmVZc+UXn80OGiyBzg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@types/js-yaml': 4.0.6 - '@types/json-stable-stringify': 1.0.34 - '@whatwg-node/fetch': 0.9.14 + '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@types/js-yaml': 4.0.9 + '@whatwg-node/fetch': 0.9.17 chalk: 4.1.2 debug: 4.3.4 - dotenv: 16.3.1 + dotenv: 16.4.5 graphql: 16.8.1 graphql-request: 6.1.0(graphql@16.8.1) - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - jose: 5.2.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + jose: 5.3.0 js-yaml: 4.1.0 - json-stable-stringify: 1.0.2 lodash: 4.17.21 scuid: 1.1.0 tslib: 2.6.2 @@ -4905,8 +1715,12 @@ snapshots: - encoding - supports-color - utf-8-validate + dev: true - '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1)': + /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1): + resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) '@graphql-tools/utils': 9.2.1(graphql@16.8.1) @@ -4915,125 +1729,199 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1)': + /@graphql-tools/relay-operation-optimizer@7.0.1(graphql@16.8.1): + resolution: {integrity: sha512-y0ZrQ/iyqWZlsS/xrJfSir3TbVYJTYmMOu4TaSz6F4FRDTQ3ie43BlKkhf04rC28pnUOS4BO9pDcAo1D30l5+A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color + dev: true - '@graphql-tools/schema@10.0.0(graphql@16.8.1)': + /@graphql-tools/schema@10.0.4(graphql@16.8.1): + resolution: {integrity: sha512-HuIwqbKxPaJujox25Ra4qwz0uQzlpsaBOzO6CVfzB/MemZdd+Gib8AIvfhQArK0YIN40aDran/yi+E5Xf0mQww==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 9.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/merge': 9.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 + dev: true - '@graphql-tools/url-loader@8.0.0(@types/node@20.10.4)(graphql@16.8.1)': + /@graphql-tools/url-loader@8.0.2(@types/node@20.12.13)(graphql@16.8.1): + resolution: {integrity: sha512-1dKp2K8UuFn7DFo1qX5c1cyazQv2h2ICwA9esHblEqCYrgf69Nk8N7SODmsfWg94OEaI74IqMoM12t7eIGwFzQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) - '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) - '@graphql-tools/executor-http': 1.0.3(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/executor-legacy-ws': 1.0.4(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) - '@types/ws': 8.5.6 - '@whatwg-node/fetch': 0.9.14 + '@graphql-tools/delegate': 10.0.11(graphql@16.8.1) + '@graphql-tools/executor-graphql-ws': 1.1.2(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.9(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 1.0.6(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.5(graphql@16.8.1) + '@types/ws': 8.5.10 + '@whatwg-node/fetch': 0.9.17 graphql: 16.8.1 - isomorphic-ws: 5.0.0(ws@8.14.2) + isomorphic-ws: 5.0.0(ws@8.17.0) tslib: 2.6.2 value-or-promise: 1.0.12 - ws: 8.14.2 + ws: 8.17.0 transitivePeerDependencies: - '@types/node' - bufferutil - encoding - utf-8-validate + dev: true - '@graphql-tools/utils@10.0.8(graphql@16.8.1)': + /@graphql-tools/utils@10.2.1(graphql@16.8.1): + resolution: {integrity: sha512-U8OMdkkEt3Vp3uYHU2pMc6mwId7axVAcSSmcqJcUmWNPqY2pfee5O655ybTI2kNPWAe58Zu6gLu4Oi4QT4BgWA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) cross-inspect: 1.0.0 - dset: 3.1.2 + dset: 3.1.3 graphql: 16.8.1 tslib: 2.6.2 + dev: true - '@graphql-tools/utils@8.13.1(graphql@16.8.1)': + /@graphql-tools/utils@8.13.1(graphql@16.8.1): + resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 16.8.1 tslib: 2.6.2 + dev: true - '@graphql-tools/utils@9.2.1(graphql@16.8.1)': + /@graphql-tools/utils@9.2.1(graphql@16.8.1): + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 + dev: true - '@graphql-tools/wrap@10.0.1(graphql@16.8.1)': + /@graphql-tools/wrap@10.0.5(graphql@16.8.1): + resolution: {integrity: sha512-Cbr5aYjr3HkwdPvetZp1cpDWTGdD1Owgsb3z/ClzhmrboiK86EnQDxDvOJiQkDCPWE9lNBwj8Y4HfxroY0D9DQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) - '@graphql-tools/schema': 10.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) + '@graphql-tools/delegate': 10.0.11(graphql@16.8.1) + '@graphql-tools/schema': 10.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 + dev: true - '@graphql-typed-document-node/core@3.2.0(graphql@16.8.1)': + /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + 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 || ^17.0.0 dependencies: graphql: 16.8.1 + dev: true - '@humanwhocodes/config-array@0.11.13': + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color + dev: true - '@humanwhocodes/module-importer@1.0.1': {} + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true - '@humanwhocodes/object-schema@2.0.1': {} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true - '@istanbuljs/load-nyc-config@1.1.0': + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 + dev: true - '@istanbuljs/schema@0.1.3': {} + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true - '@jest/console@29.7.0': + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 + dev: true - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3))': + /@jest/core@29.7.0(ts-node@10.9.2): + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + jest-config: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -5045,7 +1933,7 @@ snapshots: jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 @@ -5053,35 +1941,50 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - '@jest/environment@29.7.0': + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 jest-mock: 29.7.0 + dev: true - '@jest/expect-utils@29.7.0': + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.6.3 + dev: true - '@jest/expect@29.7.0': + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: expect: 29.7.0 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/fake-timers@29.7.0': + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.4 + '@types/node': 20.12.13 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 + dev: true - '@jest/globals@29.7.0': + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -5089,65 +1992,88 @@ snapshots: jest-mock: 29.7.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/reporters@29.7.0': + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.10.4 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.12.13 chalk: 4.1.2 - collect-v8-coverage: 1.0.1 + collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.1 - istanbul-lib-report: 3.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.2 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.7 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.0 + v8-to-istanbul: 9.2.0 transitivePeerDependencies: - supports-color + dev: true - '@jest/schemas@29.6.3': + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 + dev: true - '@jest/source-map@29.6.3': + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 + dev: true - '@jest/test-result@29.7.0': + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true - '@jest/test-sequencer@29.7.0': + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 + dev: true - '@jest/transform@29.7.0': + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.24.6 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -5156,798 +2082,1326 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.5 + micromatch: 4.0.7 + pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - '@jest/types@29.6.3': + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.10.4 - '@types/yargs': 17.0.24 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.12.13 + '@types/yargs': 17.0.32 chalk: 4.1.2 + dev: true - '@jridgewell/gen-mapping@0.3.3': + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@jridgewell/resolve-uri@3.1.0': {} - - '@jridgewell/resolve-uri@3.1.1': {} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/set-array@1.1.2': {} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/source-map@0.3.5': + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - - '@jridgewell/sourcemap-codec@1.4.14': {} + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@jridgewell/sourcemap-codec@1.4.15': {} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true - '@jridgewell/trace-mapping@0.3.18': + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true - '@jridgewell/trace-mapping@0.3.9': + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@kamilkisiela/fast-url-parser@1.1.4: + resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==} + dev: true - '@noble/curves@1.4.0': + /@noble/curves@1.4.0: + resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} dependencies: '@noble/hashes': 1.4.0 + dev: false - '@noble/hashes@1.4.0': {} + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: false - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true - '@nodelib/fs.stat@2.0.5': {} + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 + dev: true - '@peculiar/asn1-schema@2.3.6': + /@peculiar/asn1-schema@2.3.8: + resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} dependencies: asn1js: 3.0.5 pvtsutils: 1.3.5 tslib: 2.6.2 + dev: true - '@peculiar/json-schema@1.1.12': + /@peculiar/json-schema@1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} dependencies: tslib: 2.6.2 + dev: true - '@peculiar/webcrypto@1.4.3': + /@peculiar/webcrypto@1.5.0: + resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==} + engines: {node: '>=10.12.0'} dependencies: - '@peculiar/asn1-schema': 2.3.6 + '@peculiar/asn1-schema': 2.3.8 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.5 tslib: 2.6.2 - webcrypto-core: 1.7.7 + webcrypto-core: 1.8.0 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@repeaterjs/repeater@3.0.6: + resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + dev: true + + /@rollup/rollup-android-arm-eabi@4.18.0: + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.18.0: + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true - '@repeaterjs/repeater@3.0.4': {} + /@rollup/rollup-darwin-arm64@4.18.0: + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-android-arm-eabi@4.8.0': + /@rollup/rollup-darwin-x64@4.18.0: + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-android-arm64@4.8.0': + /@rollup/rollup-linux-arm-gnueabihf@4.18.0: + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-darwin-arm64@4.8.0': + /@rollup/rollup-linux-arm-musleabihf@4.18.0: + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-darwin-x64@4.8.0': + /@rollup/rollup-linux-arm64-gnu@4.18.0: + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.8.0': + /@rollup/rollup-linux-arm64-musl@4.18.0: + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm64-gnu@4.8.0': + /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-arm64-musl@4.8.0': + /@rollup/rollup-linux-riscv64-gnu@4.18.0: + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-riscv64-gnu@4.8.0': + /@rollup/rollup-linux-s390x-gnu@4.18.0: + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-x64-gnu@4.8.0': + /@rollup/rollup-linux-x64-gnu@4.18.0: + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-linux-x64-musl@4.8.0': + /@rollup/rollup-linux-x64-musl@4.18.0: + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-win32-arm64-msvc@4.8.0': + /@rollup/rollup-win32-arm64-msvc@4.18.0: + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-win32-ia32-msvc@4.8.0': + /@rollup/rollup-win32-ia32-msvc@4.18.0: + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - '@rollup/rollup-win32-x64-msvc@4.8.0': + /@rollup/rollup-win32-x64-msvc@4.18.0: + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - '@scure/base@1.1.6': {} + /@scure/base@1.1.6: + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + dev: false - '@scure/bip32@1.4.0': + /@scure/bip32@1.4.0: + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} dependencies: '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@scure/base': 1.1.6 + dev: false - '@scure/bip39@1.3.0': + /@scure/bip39@1.3.0: + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} dependencies: '@noble/hashes': 1.4.0 '@scure/base': 1.1.6 + dev: false - '@sinclair/typebox@0.27.8': {} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true - '@sindresorhus/is@4.6.0': {} + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: false - '@sinonjs/commons@3.0.0': + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 + dev: true - '@sinonjs/fake-timers@10.3.0': + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 + dev: true - '@szmarczak/http-timer@4.0.6': + /@szmarczak/http-timer@4.0.6: + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 + dev: false - '@tsconfig/node10@1.0.9': {} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true - '@tsconfig/node12@1.0.11': {} + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true - '@tsconfig/node14@1.0.3': {} + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true - '@tsconfig/node16@1.0.4': {} + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true - '@types/babel__core@7.20.1': + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.20.1 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + dev: true - '@types/babel__generator@7.6.4': + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.6 + dev: true - '@types/babel__template@7.4.1': + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + dev: true - '@types/babel__traverse@7.20.1': + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.6 + dev: true - '@types/base-64@1.0.2': {} + /@types/base-64@1.0.2: + resolution: {integrity: sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==} + dev: true - '@types/cacheable-request@6.0.3': + /@types/cacheable-request@6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: - '@types/http-cache-semantics': 4.0.1 + '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.10.4 - '@types/responselike': 1.0.0 + '@types/node': 20.12.13 + '@types/responselike': 1.0.3 + dev: false - '@types/eslint-scope@3.7.4': + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.44.1 - '@types/estree': 1.0.1 + '@types/eslint': 8.56.10 + '@types/estree': 1.0.5 + dev: true - '@types/eslint@8.44.1': + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} dependencies: - '@types/estree': 1.0.1 - '@types/json-schema': 7.0.12 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true - '@types/estree@1.0.1': {} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true - '@types/graceful-fs@4.1.6': + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 + dev: true - '@types/http-cache-semantics@4.0.1': {} + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: false - '@types/istanbul-lib-coverage@2.0.4': {} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true - '@types/istanbul-lib-report@3.0.0': + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 + dev: true - '@types/istanbul-reports@3.0.1': + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: - '@types/istanbul-lib-report': 3.0.0 + '@types/istanbul-lib-report': 3.0.3 + dev: true - '@types/jest@29.5.11': + /@types/jest@29.5.12: + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 + dev: true - '@types/js-yaml@4.0.6': {} - - '@types/json-schema@7.0.12': {} + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + dev: true - '@types/json-stable-stringify@1.0.34': {} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true - '@types/json5@0.0.29': {} + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true - '@types/jsonwebtoken@9.0.6': + /@types/jsonwebtoken@9.0.6: + resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 + dev: true - '@types/keyv@3.1.4': + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 + dev: false - '@types/node@20.10.4': + /@types/node@20.12.13: + resolution: {integrity: sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==} dependencies: undici-types: 5.26.5 - '@types/responselike@1.0.0': + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 + dev: false - '@types/semver@7.5.4': {} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true - '@types/stack-utils@2.0.1': {} + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true - '@types/ws@8.5.6': + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 + dev: true - '@types/yargs-parser@21.0.0': {} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true - '@types/yargs@17.0.24': + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.3 + dev: true - '@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3)': + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.57.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3)': + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 - eslint: 8.55.0 - optionalDependencies: - typescript: 5.3.3 + eslint: 8.57.0 + typescript: 5.4.5 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/scope-manager@6.14.0': + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true - '@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3)': + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 - eslint: 8.55.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/types@6.14.0': {} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true - '@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3)': + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 + minimatch: 9.0.3 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color + dev: true - '@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3)': + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.4 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.55.0 - semver: 7.5.4 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.57.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript + dev: true - '@typescript-eslint/visitor-keys@6.14.0': + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 + dev: true - '@ungap/structured-clone@1.2.0': {} + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true - '@webassemblyjs/ast@1.11.6': + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true - '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true - '@webassemblyjs/helper-api-error@1.11.6': {} + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true - '@webassemblyjs/helper-buffer@1.11.6': {} + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + dev: true - '@webassemblyjs/helper-numbers@1.11.6': + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 + dev: true - '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true - '@webassemblyjs/helper-wasm-section@1.11.6': + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + dev: true - '@webassemblyjs/ieee754@1.11.6': + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 + dev: true - '@webassemblyjs/leb128@1.11.6': + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 + dev: true - '@webassemblyjs/utf8@1.11.6': {} + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true - '@webassemblyjs/wasm-edit@1.11.6': + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + dev: true - '@webassemblyjs/wasm-gen@1.11.6': + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 + dev: true - '@webassemblyjs/wasm-opt@1.11.6': + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + dev: true - '@webassemblyjs/wasm-parser@1.11.6': + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 + dev: true - '@webassemblyjs/wast-printer@1.11.6': + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 + dev: true - '@whatwg-node/events@0.0.3': {} + /@whatwg-node/events@0.0.3: + resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + dev: true - '@whatwg-node/events@0.1.1': {} + /@whatwg-node/events@0.1.1: + resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} + engines: {node: '>=16.0.0'} + dev: true - '@whatwg-node/fetch@0.8.8': + /@whatwg-node/fetch@0.8.8: + resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} dependencies: - '@peculiar/webcrypto': 1.4.3 + '@peculiar/webcrypto': 1.5.0 '@whatwg-node/node-fetch': 0.3.6 busboy: 1.6.0 urlpattern-polyfill: 8.0.2 - web-streams-polyfill: 3.2.1 + web-streams-polyfill: 3.3.3 + dev: true - '@whatwg-node/fetch@0.9.14': + /@whatwg-node/fetch@0.9.17: + resolution: {integrity: sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==} + engines: {node: '>=16.0.0'} dependencies: - '@whatwg-node/node-fetch': 0.5.0 - urlpattern-polyfill: 9.0.0 + '@whatwg-node/node-fetch': 0.5.11 + urlpattern-polyfill: 10.0.0 + dev: true - '@whatwg-node/node-fetch@0.3.6': + /@whatwg-node/node-fetch@0.3.6: + resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} dependencies: '@whatwg-node/events': 0.0.3 busboy: 1.6.0 fast-querystring: 1.1.2 fast-url-parser: 1.1.3 tslib: 2.6.2 + dev: true - '@whatwg-node/node-fetch@0.5.0': + /@whatwg-node/node-fetch@0.5.11: + resolution: {integrity: sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==} + engines: {node: '>=16.0.0'} dependencies: + '@kamilkisiela/fast-url-parser': 1.1.4 '@whatwg-node/events': 0.1.1 busboy: 1.6.0 fast-querystring: 1.1.2 - fast-url-parser: 1.1.3 tslib: 2.6.2 + dev: true - '@xtuc/ieee754@1.2.0': {} + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true - '@xtuc/long@4.2.2': {} + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true - acorn-import-assertions@1.9.0(acorn@8.10.0): + /acorn-import-assertions@1.9.0(acorn@8.11.3): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 + dev: true - acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 + dev: true - acorn-walk@8.2.0: {} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true - acorn@8.10.0: {} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true - agent-base@7.1.0: + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true - aggregate-error@3.1.0: + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 + dev: true - ajv-keywords@3.5.2(ajv@6.12.6): + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 dependencies: ajv: 6.12.6 + dev: true - ajv@6.12.6: + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 + dev: true - ansi-escapes@4.3.2: + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true - ansi-regex@5.0.1: {} + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true - ansi-sequence-parser@1.1.0: {} + /ansi-sequence-parser@1.1.1: + resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + dev: true - ansi-styles@3.2.1: + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true - ansi-styles@4.3.0: + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true - ansi-styles@5.2.0: {} + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true - any-promise@1.3.0: {} + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true - anymatch@3.1.3: + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + dev: true - arg@4.1.3: {} + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true - argparse@1.0.10: + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: true - argparse@2.0.1: {} + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true - array-buffer-byte-length@1.0.0: + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true - array-includes@3.1.7: + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 + dev: true - array-union@2.1.0: {} + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true - array.prototype.findlastindex@1.2.3: + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flat@1.3.2: + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flatmap@1.3.2: + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true - arraybuffer.prototype.slice@1.0.1: + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.0 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - - asap@2.0.6: {} + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true - asn1js@3.0.5: + /asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} dependencies: pvtsutils: 1.3.5 pvutils: 1.1.3 tslib: 2.6.2 + dev: true - astral-regex@2.0.0: {} + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true - asynckit@0.4.0: {} + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false - auto-bind@4.0.0: {} + /auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: true - available-typed-arrays@1.0.5: {} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true - axios@1.6.2: + /axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + dev: false - babel-jest@29.7.0(@babel/core@7.22.5): + /babel-jest@29.7.0(@babel/core@7.24.6): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.24.6 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.1 + '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.22.5) + babel-preset-jest: 29.6.3(@babel/core@7.24.6) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.6 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + dev: true - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - '@types/babel__core': 7.20.1 - '@types/babel__traverse': 7.20.1 - - babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} - - babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): - dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - - babel-preset-fbjs@3.4.0(@babel/core@7.22.5): - dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.22.5) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.22.5) - '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.22.5) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.5) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.5) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.5) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + dev: true + + /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.6): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.6) + dev: true + + /babel-preset-fbjs@3.4.0(@babel/core@7.24.6): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.6) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.24.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.6) + '@babel/plugin-syntax-flow': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-transform-arrow-functions': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-block-scoped-functions': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-block-scoping': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-classes': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-computed-properties': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-destructuring': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-flow-strip-types': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-for-of': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-function-name': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-member-expression-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-modules-commonjs': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-object-super': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-parameters': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-property-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-react-display-name': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-shorthand-properties': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-spread': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-template-literals': 7.24.6(@babel/core@7.24.6) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + dev: true - babel-preset-jest@29.6.3(@babel/core@7.22.5): + /babel-preset-jest@29.6.3(@babel/core@7.24.6): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.24.6 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) + dev: true - balanced-match@1.0.2: {} + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true - base64-js@1.5.1: {} + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true - binary-extensions@2.2.0: {} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true - bl@4.1.0: + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true - brace-expansion@1.1.11: + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true - brace-expansion@2.0.1: + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: true - braces@3.0.2: + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 + dev: true - browserslist@4.21.9: + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - caniuse-lite: 1.0.30001517 - electron-to-chromium: 1.4.467 - node-releases: 2.0.12 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + caniuse-lite: 1.0.30001625 + electron-to-chromium: 1.4.787 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + dev: true - bs-logger@0.2.6: + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 + dev: true - bser@2.1.1: + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + dev: true - buffer-equal-constant-time@1.0.1: {} + /buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: true - buffer-from@1.1.2: {} + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true - buffer@5.7.1: + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true - bundle-require@4.0.2(esbuild@0.19.9): + /bundle-require@4.1.0(esbuild@0.19.12): + resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' dependencies: - esbuild: 0.19.9 + esbuild: 0.19.12 load-tsconfig: 0.2.5 + dev: true - busboy@1.6.0: + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 + dev: true - cac@6.7.14: {} + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true - cacheable-lookup@5.0.4: {} + /cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: false - cacheable-request@7.0.4: + /cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} dependencies: clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 + dev: false - call-bind@1.0.2: + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true - callsites@3.1.0: {} + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true - camel-case@4.1.2: + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 tslib: 2.6.2 + dev: true - camelcase@5.3.1: {} + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true - camelcase@6.3.0: {} + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true - caniuse-lite@1.0.30001517: {} + /caniuse-lite@1.0.30001625: + resolution: {integrity: sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==} + dev: true - capital-case@1.0.4: + /capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 + dev: true - chalk@2.4.2: + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true - chalk@4.1.2: + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true - change-case-all@1.0.14: + /change-case-all@1.0.14: + resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -5959,8 +3413,10 @@ snapshots: title-case: 3.0.3 upper-case: 2.0.2 upper-case-first: 2.0.2 + dev: true - change-case-all@1.0.15: + /change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -5972,8 +3428,10 @@ snapshots: title-case: 3.0.3 upper-case: 2.0.2 upper-case-first: 2.0.2 + dev: true - change-case@4.1.2: + /change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} dependencies: camel-case: 4.1.2 capital-case: 1.0.4 @@ -5987,120 +3445,205 @@ snapshots: sentence-case: 3.0.4 snake-case: 3.0.4 tslib: 2.6.2 + dev: true - char-regex@1.0.2: {} + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true - chardet@0.7.0: {} + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true - chokidar@3.5.3: + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 + dev: true - chrome-trace-event@1.0.3: {} + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + dev: true - ci-info@3.8.0: {} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true - cjs-module-lexer@1.2.2: {} + /cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + dev: true - clean-stack@2.2.0: {} + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true - cli-cursor@3.1.0: + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 + dev: true - cli-spinners@2.9.1: {} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true - cli-truncate@2.1.0: + /cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 + dev: true - cli-width@3.0.0: {} + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true - cliui@6.0.0: + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + dev: true - cliui@8.0.1: + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: true - clone-response@1.0.3: + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 + dev: false - clone@1.0.4: {} + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true - co@4.6.0: {} + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true - collect-v8-coverage@1.0.1: {} + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true - color-convert@1.9.3: + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true - color-convert@2.0.1: + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true - color-name@1.1.3: {} + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true - color-name@1.1.4: {} + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true - colorette@2.0.20: {} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true - combined-stream@1.0.8: + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: false - commander@2.20.3: {} + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true - commander@4.1.1: {} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true - common-tags@1.8.2: {} + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true - concat-map@0.0.1: {} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true - confusing-browser-globals@1.0.11: {} + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true - constant-case@3.0.4: + /constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case: 2.0.2 + dev: true - convert-source-map@1.9.0: {} - - convert-source-map@2.0.0: {} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true - cosmiconfig@8.3.6(typescript@5.3.3): + /cosmiconfig@8.3.6(typescript@5.4.5): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - optionalDependencies: - typescript: 5.3.3 + typescript: 5.4.5 + dev: true - create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): + /create-jest@29.7.0(@types/node@20.12.13)(ts-node@10.9.2): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + jest-config: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -6108,294 +3651,562 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - create-require@1.1.1: {} + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true - cross-fetch@3.1.8: + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding + dev: true - cross-inspect@1.0.0: + /cross-inspect@1.0.0: + resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} + engines: {node: '>=16.0.0'} dependencies: tslib: 2.6.2 + dev: true - cross-spawn@7.0.3: + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true - dataloader@2.2.2: {} + /dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + dev: true - debounce@1.2.1: {} + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: true - debug@3.2.7: + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - ms: 2.1.2 + ms: 2.1.3 + dev: true - debug@4.3.4: + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.2 + dev: true - decamelize@1.2.0: {} + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true - decompress-response@6.0.0: + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 + dev: false - dedent@1.5.1: {} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true - deep-is@0.1.4: {} + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true - deepmerge@4.3.1: {} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true - defaults@1.0.4: + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: true + + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: false - defer-to-connect@2.0.1: {} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true - define-properties@1.2.0: + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 + dev: true - delayed-stream@1.0.0: {} + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false - dependency-graph@0.11.0: {} + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dev: true - detect-indent@6.1.0: {} + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true - detect-newline@3.1.0: {} + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true - diff-sequences@29.6.3: {} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - diff@4.0.2: {} + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true - dir-glob@3.0.1: + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true - doctrine@2.1.0: + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 + dev: true - doctrine@3.0.0: + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 + dev: true - dot-case@3.0.4: + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 tslib: 2.6.2 + dev: true + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true - dotenv@16.3.1: {} + /dset@3.1.3: + resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} + engines: {node: '>=4'} + dev: true - dset@3.1.2: {} + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true - ecdsa-sig-formatter@1.0.11: + /ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 + dev: true + + /electron-to-chromium@1.4.787: + resolution: {integrity: sha512-d0EFmtLPjctczO3LogReyM2pbBiiZbnsKnGF+cdZhsYzHm/A0GV7W94kqzLD8SN4O3f3iHlgLUChqghgyznvCQ==} + dev: true - electron-to-chromium@1.4.467: {} + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true - emittery@0.13.1: {} + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true - emoji-regex@8.0.0: {} + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true - end-of-stream@1.4.4: + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + dev: false - enhanced-resolve@5.15.0: + /enhanced-resolve@5.16.1: + resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + dev: true - error-ex@1.3.2: + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true - es-abstract@1.22.1: + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true - es-module-lexer@1.3.0: {} + /es-module-lexer@1.5.3: + resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + dev: true - es-set-tostringtag@2.0.1: + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - has-tostringtag: 1.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true - es-shim-unscopables@1.0.0: + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.3 + hasown: 2.0.2 + dev: true - es-to-primitive@1.2.1: + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 + dev: true - esbuild@0.19.9: + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.19.9 - '@esbuild/android-arm64': 0.19.9 - '@esbuild/android-x64': 0.19.9 - '@esbuild/darwin-arm64': 0.19.9 - '@esbuild/darwin-x64': 0.19.9 - '@esbuild/freebsd-arm64': 0.19.9 - '@esbuild/freebsd-x64': 0.19.9 - '@esbuild/linux-arm': 0.19.9 - '@esbuild/linux-arm64': 0.19.9 - '@esbuild/linux-ia32': 0.19.9 - '@esbuild/linux-loong64': 0.19.9 - '@esbuild/linux-mips64el': 0.19.9 - '@esbuild/linux-ppc64': 0.19.9 - '@esbuild/linux-riscv64': 0.19.9 - '@esbuild/linux-s390x': 0.19.9 - '@esbuild/linux-x64': 0.19.9 - '@esbuild/netbsd-x64': 0.19.9 - '@esbuild/openbsd-x64': 0.19.9 - '@esbuild/sunos-x64': 0.19.9 - '@esbuild/win32-arm64': 0.19.9 - '@esbuild/win32-ia32': 0.19.9 - '@esbuild/win32-x64': 0.19.9 - - escalade@3.1.1: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0): + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.55.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0) - object.assign: 4.1.4 - object.entries: 1.1.6 + eslint: 8.57.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + object.assign: 4.1.5 + object.entries: 1.1.8 semver: 6.3.1 + dev: true - eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3))(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0): + /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.21.0)(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 + '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0))(eslint@8.55.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0) + dev: true - eslint-config-prettier@9.1.0(eslint@8.55.0): + /eslint-config-prettier@9.1.0(eslint@8.57.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' dependencies: - eslint: 8.55.0 + eslint: 8.57.0 + dev: true - eslint-import-resolver-node@0.3.9: + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color + dev: true - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color + dev: true - eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint@8.55.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.55.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) - hasown: 2.0.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 - optionalDependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: true - eslint-scope@5.1.1: + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 + dev: true - eslint-scope@7.2.2: + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + dev: true - eslint-visitor-keys@3.4.3: {} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - eslint@8.55.0: + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -6414,9 +4225,9 @@ snapshots: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -6426,39 +4237,69 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color + dev: true - espree@9.6.1: + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 + dev: true - esprima@4.0.1: {} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true - esquery@1.5.0: + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 + dev: true - esrecurse@4.3.0: + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 + dev: true - estraverse@4.3.0: {} + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true - estraverse@5.3.0: {} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true - esutils@2.0.3: {} + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true - eventemitter3@5.0.1: {} + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false - events@3.3.0: {} + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true - execa@5.1.1: + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -6469,60 +4310,95 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: true - exit@0.1.2: {} + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true - expect@29.7.0: + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 jest-matcher-utils: 29.7.0 jest-message-util: 29.7.0 jest-util: 29.7.0 + dev: true - external-editor@3.1.0: + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + dev: true - extract-files@11.0.0: {} + /extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: true - fast-decode-uri-component@1.0.1: {} + /fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: true - fast-deep-equal@3.1.3: {} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true - fast-glob@3.2.12: + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 + dev: true - fast-json-stable-stringify@2.1.0: {} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true - fast-levenshtein@2.0.6: {} + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true - fast-querystring@1.1.2: + /fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} dependencies: fast-decode-uri-component: 1.0.1 + dev: true - fast-url-parser@1.1.3: + /fast-url-parser@1.1.3: + resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: punycode: 1.4.1 + dev: true - fastq@1.15.0: + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 + dev: true - fb-watchman@2.0.2: + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 + dev: true - fbjs-css-vars@1.0.2: {} + /fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: true - fbjs@3.0.5: + /fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} dependencies: cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 @@ -6530,113 +4406,204 @@ snapshots: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.36 + ua-parser-js: 1.0.38 transitivePeerDependencies: - encoding + dev: true - figures@3.2.0: + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 + dev: true - file-entry-cache@6.0.1: + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 + dev: true - fill-range@7.0.1: + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true - find-up@4.1.0: + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true - find-up@5.0.0: + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true - flat-cache@3.0.4: + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 + dev: true - flatted@3.2.7: {} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true - follow-redirects@1.15.6: {} + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false - for-each@0.3.3: + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true - form-data@4.0.0: + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: false - fs.realpath@1.0.0: {} + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true - fsevents@2.3.2: + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true optional: true - function-bind@1.1.1: {} - - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true - function.prototype.name@1.1.5: + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 functions-have-names: 1.2.3 + dev: true - functions-have-names@1.2.3: {} + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true - gensync@1.0.0-beta.2: {} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true - get-caller-file@2.0.5: {} + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true - get-intrinsic@1.2.1: + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true - get-package-type@0.1.0: {} + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true - get-stream@5.2.0: + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} dependencies: pump: 3.0.0 + dev: false - get-stream@6.0.1: {} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true - get-symbol-description@1.0.0: + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true - glob-parent@6.0.2: + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: true - glob-to-regexp@0.4.1: {} + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true - glob@7.1.6: + /glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + foreground-child: 3.1.1 + jackspeak: 3.1.2 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + dev: true - glob@7.2.3: + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6644,36 +4611,54 @@ snapshots: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true - globals@11.12.0: {} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true - globals@13.20.0: + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 + dev: true - globalthis@1.0.3: + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 + gopd: 1.0.1 + dev: true - globby@11.1.0: + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 + dev: true - gopd@1.0.1: + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 + dev: true - got@11.8.6: + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.0 + '@types/responselike': 1.0.3 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -6681,20 +4666,33 @@ snapshots: lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 + dev: false - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true - graphemer@1.4.0: {} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true - graphql-config@5.0.3(@types/node@20.10.4)(graphql@16.8.1)(typescript@5.3.3): + /graphql-config@5.0.3(@types/node@20.12.13)(graphql@16.8.1)(typescript@5.4.5): + resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} + engines: {node: '>= 16.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true dependencies: - '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/load': 8.0.0(graphql@16.8.1) - '@graphql-tools/merge': 9.0.0(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.0(@types/node@20.10.4)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.8(graphql@16.8.1) - cosmiconfig: 8.3.6(typescript@5.3.3) + '@graphql-tools/graphql-file-loader': 8.0.1(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.1(graphql@16.8.1) + '@graphql-tools/load': 8.0.2(graphql@16.8.1) + '@graphql-tools/merge': 9.0.4(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.2(@types/node@20.12.13)(graphql@16.8.1) + '@graphql-tools/utils': 10.2.1(graphql@16.8.1) + cosmiconfig: 8.3.6(typescript@5.4.5) graphql: 16.8.1 jiti: 1.21.0 minimatch: 4.2.3 @@ -6706,116 +4704,204 @@ snapshots: - encoding - typescript - utf-8-validate + dev: true - graphql-request@6.1.0(graphql@16.8.1): + /graphql-request@6.1.0(graphql@16.8.1): + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) cross-fetch: 3.1.8 graphql: 16.8.1 transitivePeerDependencies: - encoding + dev: true - graphql-tag@2.12.6(graphql@16.8.1): + /graphql-tag@2.12.6(graphql@16.8.1): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + 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 dependencies: graphql: 16.8.1 tslib: 2.6.2 + dev: true - graphql-ws@5.14.2(graphql@16.8.1): + /graphql-ws@5.16.0(graphql@16.8.1): + resolution: {integrity: sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' dependencies: graphql: 16.8.1 + dev: true - graphql@16.8.1: {} + /graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true - has-bigints@1.0.2: {} + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true - has-flag@3.0.0: {} + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true - has-flag@4.0.0: {} + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true - has-property-descriptors@1.0.0: + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.1 + es-define-property: 1.0.0 + dev: true - has-proto@1.0.1: {} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true - has-symbols@1.0.3: {} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true - has-tostringtag@1.0.0: + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true - has@1.0.3: - dependencies: - function-bind: 1.1.1 - - hasown@2.0.0: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true - header-case@2.0.4: + /header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} dependencies: capital-case: 1.0.4 tslib: 2.6.2 + dev: true - html-escaper@2.0.2: {} + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true - http-cache-semantics@4.1.1: {} + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false - http-proxy-agent@7.0.0: + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true - http2-wrapper@1.0.3: + /http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + dev: false - https-proxy-agent@7.0.2: + /https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true - human-signals@2.1.0: {} + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true - iconv-lite@0.4.24: + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: true - ieee754@1.2.1: {} + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true - ignore@5.2.4: {} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true - immutable@3.7.6: {} + /immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + dev: true - import-fresh@3.3.0: + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true - import-from@4.0.0: {} + /import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: true - import-local@3.1.0: + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + dev: true - imurmurhash@0.1.4: {} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true - indent-string@4.0.0: {} + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true - inflight@1.0.6: + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true - inherits@2.0.4: {} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true - inquirer@8.2.6: + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -6832,191 +4918,326 @@ snapshots: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 6.2.0 + dev: true - internal-slot@1.0.5: + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true - invariant@2.2.4: + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 + dev: true - is-absolute@1.0.0: + /is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} dependencies: is-relative: 1.0.0 is-windows: 1.0.2 + dev: true - is-array-buffer@3.0.2: + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true - is-arrayish@0.2.1: {} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true - is-bigint@1.0.4: + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: true - is-binary-path@2.1.0: + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 + dev: true - is-boolean-object@1.1.2: + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-callable@1.2.7: {} + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true - is-core-module@2.12.1: + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.3 + hasown: 2.0.2 + dev: true - is-core-module@2.13.1: + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} dependencies: - hasown: 2.0.0 + is-typed-array: 1.1.13 + dev: true - is-date-object@1.0.5: + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true - is-fullwidth-code-point@3.0.0: {} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true - is-generator-fn@2.1.0: {} + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true - is-interactive@1.0.0: {} + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true - is-lower-case@2.0.2: + /is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} dependencies: tslib: 2.6.2 + dev: true - is-negative-zero@2.0.2: {} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true - is-number-object@1.0.7: + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true - is-path-inside@3.0.3: {} + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true - is-regex@1.1.4: + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-relative@1.0.0: + /is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} dependencies: is-unc-path: 1.0.0 + dev: true - is-shared-array-buffer@1.0.2: + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 + dev: true - is-stream@2.0.1: {} + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true - is-string@1.0.7: + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-symbol@1.0.4: + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true - is-typed-array@1.1.12: + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 + dev: true - is-unc-path@1.0.0: + /is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} dependencies: unc-path-regex: 0.1.2 + dev: true - is-unicode-supported@0.1.0: {} + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true - is-upper-case@2.0.2: + /is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} dependencies: tslib: 2.6.2 + dev: true - is-weakref@1.0.2: + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 + dev: true - is-windows@1.0.2: {} + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true - isarray@2.0.5: {} + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true - isexe@2.0.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true - isomorphic-ws@5.0.0(ws@8.14.2): + /isomorphic-ws@5.0.0(ws@8.17.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' dependencies: - ws: 8.14.2 + ws: 8.17.0 + dev: true - istanbul-lib-coverage@3.2.0: {} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true - istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.23.0 + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-instrument@6.0.1: + /istanbul-lib-instrument@6.0.2: + resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + engines: {node: '>=10'} dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.23.0 + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.2 transitivePeerDependencies: - supports-color + dev: true - istanbul-lib-report@3.0.0: + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 supports-color: 7.2.0 + dev: true - istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color + dev: true - istanbul-reports@3.1.5: + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 + dev: true + + /jackspeak@3.1.2: + resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true - jest-changed-files@29.7.0: + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 + dev: true - jest-circus@29.7.0: + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -7026,23 +5247,32 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.4 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true - jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): + /jest-cli@29.7.0(@types/node@20.12.13)(ts-node@10.9.2): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + create-jest: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + jest-config: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -7051,15 +5281,27 @@ snapshots: - babel-plugin-macros - supports-color - ts-node + dev: true - jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): + /jest-config@29.7.0(@types/node@20.12.13)(ts-node@10.9.2): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.24.6 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.22.5) + '@types/node': 20.12.13 + babel-jest: 29.7.0(@babel/core@7.24.6) chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -7071,108 +5313,153 @@ snapshots: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.10.4 - ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.12.13)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true - jest-diff@29.7.0: + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true - jest-docblock@29.7.0: + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 + dev: true - jest-each@29.7.0: + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 jest-get-type: 29.6.3 jest-util: 29.7.0 pretty-format: 29.7.0 + dev: true - jest-environment-node@29.7.0: + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 jest-mock: 29.7.0 jest-util: 29.7.0 + dev: true - jest-get-type@29.6.3: {} + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - jest-haste-map@29.7.0: + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.6 - '@types/node': 20.10.4 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.12.13 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 + dev: true - jest-leak-detector@29.7.0: + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true - jest-matcher-utils@29.7.0: + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 jest-diff: 29.7.0 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true - jest-message-util@29.7.0: + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.6 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.7 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 + dev: true - jest-mock@29.7.0: + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 jest-util: 29.7.0 + dev: true - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: jest-resolve: 29.7.0 + dev: true - jest-regex-util@29.6.3: {} + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true - jest-resolve-dependencies@29.7.0: + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color + dev: true - jest-resolve@29.7.0: + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -7180,18 +5467,21 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.2 + resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 + dev: true - jest-runner@29.7.0: + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -7209,8 +5499,11 @@ snapshots: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color + dev: true - jest-runtime@29.7.0: + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -7219,10 +5512,10 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1 + cjs-module-lexer: 1.3.1 + collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 @@ -7236,18 +5529,21 @@ snapshots: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color + dev: true - jest-snapshot@29.7.0: + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.22.5 - '@babel/generator': 7.23.0 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) - '@babel/types': 7.23.0 + '@babel/core': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-typescript': 7.24.6(@babel/core@7.24.6) + '@babel/types': 7.24.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -7258,20 +5554,26 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color + dev: true - jest-util@29.7.0: + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 + dev: true - jest-validate@29.7.0: + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -7279,92 +5581,148 @@ snapshots: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 + dev: true - jest-watcher@29.7.0: + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.12.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 + dev: true - jest-worker@27.5.1: + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true - jest-worker@29.7.0: + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.12.13 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true - jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): + /jest@29.7.0(@types/node@20.12.13)(ts-node@10.9.2): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + jest-cli: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node + dev: true - jiti@1.21.0: {} + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true - jose@5.2.3: {} + /jose@5.3.0: + resolution: {integrity: sha512-IChe9AtAE79ru084ow8jzkN2lNrG3Ntfiv65Cvj9uOCE2m5LNsdHG+9EbxWxAoWRF9TgDOqLN5jm08++owDVRg==} + dev: true - joycon@3.1.1: {} + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true - js-base64@3.7.7: {} + /js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + dev: false - js-tokens@4.0.0: {} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true - js-yaml@3.14.1: + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: true - js-yaml@4.1.0: + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 + dev: true - jsesc@2.5.2: {} - - json-buffer@3.0.1: {} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true - json-parse-even-better-errors@2.3.1: {} + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-schema-traverse@0.4.1: {} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true - json-stable-stringify-without-jsonify@1.0.1: {} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true - json-stable-stringify@1.0.2: - dependencies: - jsonify: 0.0.1 + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true - json-to-pretty-yaml@1.2.2: + /json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} dependencies: remedial: 1.0.8 remove-trailing-spaces: 1.0.8 + dev: true - json5@1.0.2: + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true dependencies: minimist: 1.2.8 + dev: true - json5@2.2.3: {} - - jsonc-parser@3.2.0: {} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true - jsonify@0.0.1: {} + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + dev: true - jsonwebtoken@9.0.2: + /jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -7374,1017 +5732,1849 @@ snapshots: lodash.isplainobject: 4.0.6 lodash.isstring: 4.0.1 lodash.once: 4.1.1 - ms: 2.1.2 - semver: 7.5.4 + ms: 2.1.3 + semver: 7.6.2 + dev: true - jwa@1.4.1: + /jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 + dev: true - jws@3.2.2: + /jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 + dev: true - jwt-decode@4.0.0: {} + /jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + dev: false - keyv@4.5.3: + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 - kleur@3.0.3: {} + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true - leven@3.1.0: {} + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true - levn@0.4.1: + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true - lilconfig@2.1.0: {} + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true - lines-and-columns@1.2.4: {} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true - listr2@4.0.5: + /listr2@4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true dependencies: cli-truncate: 2.1.0 colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.0 + rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 + dev: true - load-tsconfig@0.2.5: {} + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - loader-runner@4.3.0: {} + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true - locate-path@5.0.0: + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + dev: true - locate-path@6.0.0: + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true - lodash.includes@4.3.0: {} + /lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: true - lodash.isboolean@3.0.3: {} + /lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: true - lodash.isinteger@4.0.4: {} + /lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: true - lodash.isnumber@3.0.3: {} + /lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: true - lodash.isplainobject@4.0.6: {} + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true - lodash.isstring@4.0.1: {} + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: true - lodash.memoize@4.1.2: {} + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true - lodash.merge@4.6.2: {} + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true - lodash.once@4.1.1: {} + /lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: true - lodash.sortby@4.7.0: {} + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true - lodash@4.17.21: {} + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true - log-symbols@4.1.0: + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + dev: true - log-update@4.0.0: + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 + dev: true - loose-envify@1.4.0: + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 + dev: true - lower-case-first@2.0.2: + /lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} dependencies: tslib: 2.6.2 + dev: true - lower-case@2.0.2: + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.6.2 + dev: true + + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: false - lowercase-keys@2.0.0: {} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + dev: true - lru-cache@5.1.1: + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lunr@2.3.9: {} + /lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + dev: true - make-dir@3.1.0: + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} dependencies: - semver: 6.3.1 + semver: 7.6.2 + dev: true - make-error@1.3.6: {} + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true - makeerror@1.0.12: + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 + dev: true - map-cache@0.2.2: {} + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true - marked@4.3.0: {} + /marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + dev: true - merge-stream@2.0.0: {} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true - merge2@1.4.1: {} + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true - meros@1.3.0(@types/node@20.10.4): - optionalDependencies: - '@types/node': 20.10.4 + /meros@1.3.0(@types/node@20.12.13): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.12.13 + dev: true - micromatch@4.0.5: + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 + dev: true - mime-db@1.52.0: {} + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} - mime-types@2.1.35: + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - mimic-fn@2.1.0: {} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true - mimic-response@1.0.1: {} + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: false - mimic-response@3.1.0: {} + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false - minimatch@3.1.2: + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true - minimatch@4.2.3: + /minimatch@4.2.3: + resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} + engines: {node: '>=10'} dependencies: brace-expansion: 1.1.11 + dev: true - minimatch@9.0.3: + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true - minimist@1.2.8: {} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true - ms@2.1.2: {} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true - mute-stream@0.0.8: {} + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true - mz@2.7.0: + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: true - natural-compare@1.4.0: {} + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true - neo-async@2.6.2: {} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true - no-case@3.0.4: + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 tslib: 2.6.2 + dev: true - node-fetch@2.7.0: + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true dependencies: whatwg-url: 5.0.0 + dev: true - node-int64@0.4.0: {} + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true - node-releases@2.0.12: {} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true - normalize-path@2.1.1: + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 + dev: true - normalize-path@3.0.0: {} + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true - normalize-url@6.1.0: {} + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false - npm-run-path@4.0.1: + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: true - nullthrows@1.1.1: {} + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: true - object-assign@4.1.1: {} + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true - object-inspect@1.12.3: {} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true - object-keys@1.1.1: {} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true - object.assign@4.1.4: + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.7 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: true - object.entries@1.1.6: + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true - object.fromentries@2.0.7: + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true - object.groupby@1.0.1: + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true - object.values@1.1.7: + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true - once@1.4.0: + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - onetime@5.1.2: + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: true - optionator@0.9.3: + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 + dev: true - ora@5.4.1: + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} dependencies: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true - os-tmpdir@1.0.2: {} + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true - p-cancelable@2.1.1: {} + /p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + dev: false - p-limit@2.3.0: + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 + dev: true - p-limit@3.1.0: + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true - p-locate@4.1.0: + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + dev: true - p-locate@5.0.0: + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: true - p-map@4.0.0: + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 + dev: true - p-try@2.2.0: {} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true - param-case@3.0.4: + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 tslib: 2.6.2 + dev: true - parent-module@1.0.1: + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true - parse-filepath@1.0.2: + /parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 + dev: true - parse-json@5.2.0: + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.6 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true - pascal-case@3.1.2: + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 tslib: 2.6.2 + dev: true - path-case@3.0.4: + /path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} dependencies: dot-case: 3.0.4 tslib: 2.6.2 + dev: true - path-exists@4.0.0: {} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true - path-is-absolute@1.0.1: {} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true - path-key@3.1.1: {} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true - path-parse@1.0.7: {} + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true - path-root-regex@0.1.2: {} + /path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + dev: true - path-root@0.1.1: + /path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} dependencies: path-root-regex: 0.1.2 + dev: true - path-type@4.0.0: {} + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true - picocolors@1.0.0: {} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + dev: true - picomatch@2.3.1: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true - pirates@4.0.5: {} + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true - pkg-dir@4.2.0: + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true + + /poseidon-lite@0.2.0: + resolution: {integrity: sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==} + dev: false - poseidon-lite@0.2.0: {} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true - postcss-load-config@4.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)): + /postcss-load-config@4.0.2(ts-node@10.9.2): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true dependencies: - lilconfig: 2.1.0 - yaml: 2.3.4 - optionalDependencies: - ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + lilconfig: 3.1.1 + ts-node: 10.9.2(@types/node@20.12.13)(typescript@5.4.5) + yaml: 2.4.2 + dev: true - prelude-ls@1.2.1: {} + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true - prettier@3.1.1: {} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + dev: true - pretty-format@29.7.0: + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 + dev: true - promise@7.3.1: + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: asap: 2.0.6 + dev: true - prompts@2.4.2: + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + dev: true - proxy-from-env@1.1.0: {} + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false - pump@3.0.0: + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: false - punycode@1.4.1: {} + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true - punycode@2.3.0: {} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true - pure-rand@6.0.4: {} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + dev: true - pvtsutils@1.3.5: + /pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} dependencies: tslib: 2.6.2 + dev: true - pvutils@1.1.3: {} + /pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: true - queue-microtask@1.2.3: {} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true - quick-lru@5.1.1: {} + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false - randombytes@2.1.0: + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 + dev: true - react-is@18.2.0: {} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: true - readable-stream@3.6.2: + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: true - readdirp@3.6.0: + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + dev: true - regenerator-runtime@0.14.0: {} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true - regexp.prototype.flags@1.5.0: + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true - relay-runtime@12.0.0: + /relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - '@babel/runtime': 7.23.1 + '@babel/runtime': 7.24.6 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: - encoding + dev: true - remedial@1.0.8: {} + /remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + dev: true - remove-trailing-separator@1.1.0: {} + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true - remove-trailing-spaces@1.0.8: {} + /remove-trailing-spaces@1.0.8: + resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + dev: true - require-directory@2.1.1: {} + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true - require-main-filename@2.0.0: {} + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true - resolve-alpn@1.2.1: {} + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: false - resolve-cwd@3.0.0: + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + dev: true - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true - resolve.exports@2.0.2: {} + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true - resolve@1.22.2: - dependencies: - is-core-module: 2.12.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true - resolve@1.22.8: + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - responselike@2.0.1: + /responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 + dev: false - restore-cursor@3.1.0: + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true - reusify@1.0.4: {} + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true - rfdc@1.3.0: {} + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + dev: true - rimraf@3.0.2: + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: true - rollup@4.8.0: + /rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.8.0 - '@rollup/rollup-android-arm64': 4.8.0 - '@rollup/rollup-darwin-arm64': 4.8.0 - '@rollup/rollup-darwin-x64': 4.8.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.8.0 - '@rollup/rollup-linux-arm64-gnu': 4.8.0 - '@rollup/rollup-linux-arm64-musl': 4.8.0 - '@rollup/rollup-linux-riscv64-gnu': 4.8.0 - '@rollup/rollup-linux-x64-gnu': 4.8.0 - '@rollup/rollup-linux-x64-musl': 4.8.0 - '@rollup/rollup-win32-arm64-msvc': 4.8.0 - '@rollup/rollup-win32-ia32-msvc': 4.8.0 - '@rollup/rollup-win32-x64-msvc': 4.8.0 - fsevents: 2.3.2 - - run-async@2.4.1: {} - - run-parallel@1.2.0: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + dev: true + + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true - rxjs@7.8.1: + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.2 + dev: true - safe-array-concat@1.0.0: + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 + dev: true - safe-buffer@5.2.1: {} + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true - safe-regex-test@1.0.0: + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 + dev: true - safer-buffer@2.1.2: {} + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true - schema-utils@3.3.0: + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true - scuid@1.1.0: {} + /scuid@1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + dev: true - semver@6.3.1: {} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + dev: true - sentence-case@3.0.4: + /sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} dependencies: no-case: 3.0.4 tslib: 2.6.2 upper-case-first: 2.0.2 + dev: true - serialize-javascript@6.0.1: + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: randombytes: 2.1.0 + dev: true + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true - set-blocking@2.0.0: {} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true - setimmediate@1.0.5: {} + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true - shebang-command@2.0.0: + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true - shebang-regex@3.0.0: {} + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true - shell-quote@1.8.1: {} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true - shiki@0.14.3: + /shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} dependencies: - ansi-sequence-parser: 1.1.0 - jsonc-parser: 3.2.0 + ansi-sequence-parser: 1.1.1 + jsonc-parser: 3.2.1 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 + dev: true - side-channel@1.0.4: + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true - signal-exit@3.0.7: {} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true - signedsource@1.0.0: {} + /signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + dev: true - sisteransi@1.0.5: {} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true - slash@3.0.0: {} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true - slice-ansi@3.0.0: + /slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + dev: true - slice-ansi@4.0.0: + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + dev: true - snake-case@3.0.4: + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 tslib: 2.6.2 + dev: true - source-map-support@0.5.13: + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true - source-map-support@0.5.21: + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true - source-map@0.6.1: {} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true - source-map@0.7.4: {} + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true - source-map@0.8.0-beta.0: + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 + dev: true - sponge-case@1.0.1: + /sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} dependencies: tslib: 2.6.2 + dev: true - sprintf-js@1.0.3: {} + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true - stack-utils@2.0.6: + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 + dev: true - streamsearch@1.1.0: {} + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: true - string-env-interpolation@1.0.1: {} + /string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + dev: true - string-length@4.0.2: + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 + dev: true - string-width@4.2.3: + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true - string.prototype.trim@1.2.7: + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true - string.prototype.trimend@1.0.6: + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true - string.prototype.trimstart@1.0.6: + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true - string_decoder@1.3.0: + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: true - strip-ansi@6.0.1: + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true - strip-bom@3.0.0: {} + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true - strip-bom@4.0.0: {} + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true - strip-final-newline@2.0.0: {} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true - strip-json-comments@3.1.1: {} + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true - sucrase@3.32.0: + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 7.1.6 + glob: 10.4.1 lines-and-columns: 1.2.4 mz: 2.7.0 - pirates: 4.0.5 + pirates: 4.0.6 ts-interface-checker: 0.1.13 + dev: true - supports-color@5.5.0: + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true - supports-color@7.2.0: + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true - supports-color@8.1.1: + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true - supports-preserve-symlinks-flag@1.0.0: {} + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true - swap-case@2.0.2: + /swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} dependencies: tslib: 2.6.2 + dev: true - tapable@2.2.1: {} + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true - terser-webpack-plugin@5.3.9(esbuild@0.19.9)(webpack@5.88.2(esbuild@0.19.9)): + /terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.91.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.19.12 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.19.2 - webpack: 5.88.2(esbuild@0.19.9) - optionalDependencies: - esbuild: 0.19.9 + serialize-javascript: 6.0.2 + terser: 5.31.0 + webpack: 5.91.0(esbuild@0.19.12) + dev: true - terser@5.19.2: + /terser@5.31.0: + resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + engines: {node: '>=10'} + hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + '@jridgewell/source-map': 0.3.6 + acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 + dev: true - test-exclude@6.0.0: + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 + dev: true - text-table@0.2.0: {} + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true - thenify-all@1.6.0: + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: true - thenify@3.3.1: + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: true - through@2.3.8: {} + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true - title-case@3.0.3: + /title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} dependencies: tslib: 2.6.2 + dev: true - tmp@0.0.33: + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 + dev: true - tmpl@1.0.5: {} + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true - to-fast-properties@2.0.0: {} + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true - tr46@0.0.3: {} + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true - tr46@1.0.1: + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 + dev: true - tree-kill@1.2.2: {} + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true - ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.3.0(typescript@5.4.5): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 + dev: true - ts-interface-checker@0.1.13: {} + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true - ts-jest@29.1.1(@babel/core@7.22.5)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.5))(esbuild@0.19.9)(jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)))(typescript@5.3.3): + /ts-jest@29.1.4(@babel/core@7.24.6)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true dependencies: + '@babel/core': 7.24.6 bs-logger: 0.2.6 + esbuild: 0.19.12 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + jest: 29.7.0(@types/node@20.12.13)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.3.3 + semver: 7.6.2 + typescript: 5.4.5 yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.22.5 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.22.5) - esbuild: 0.19.9 + dev: true - ts-loader@9.5.1(typescript@5.3.3)(webpack@5.88.2(esbuild@0.19.9)): + /ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.15.0 - micromatch: 4.0.5 - semver: 7.5.4 + enhanced-resolve: 5.16.1 + micromatch: 4.0.7 + semver: 7.6.2 source-map: 0.7.4 - typescript: 5.3.3 - webpack: 5.88.2(esbuild@0.19.9) + typescript: 5.4.5 + webpack: 5.91.0(esbuild@0.19.12) + dev: true - ts-log@2.2.5: {} + /ts-log@2.2.5: + resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} + dev: true - ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.12.13)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.4 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/node': 20.12.13 + acorn: 8.11.3 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true - tsconfig-paths@3.14.2: + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 + dev: true - tslib@2.4.1: {} - - tslib@2.5.3: {} + /tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: true - tslib@2.6.2: {} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true - tsup@8.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3))(typescript@5.3.3): + /tsup@8.0.2(ts-node@10.9.2)(typescript@5.4.5): + resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true dependencies: - bundle-require: 4.0.2(esbuild@0.19.9) + bundle-require: 4.1.0(esbuild@0.19.12) cac: 6.7.14 - chokidar: 3.5.3 + chokidar: 3.6.0 debug: 4.3.4 - esbuild: 0.19.9 + esbuild: 0.19.12 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1(ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3)) + postcss-load-config: 4.0.2(ts-node@10.9.2) resolve-from: 5.0.0 - rollup: 4.8.0 + rollup: 4.18.0 source-map: 0.8.0-beta.0 - sucrase: 3.32.0 + sucrase: 3.35.0 tree-kill: 1.2.2 - optionalDependencies: - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - ts-node + dev: true - type-check@0.4.0: + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 + dev: true - type-detect@4.0.8: {} + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true - type-fest@0.20.2: {} + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true - type-fest@0.21.3: {} + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true - typed-array-buffer@1.0.0: + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true - typed-array-byte-length@1.0.0: + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true - typed-array-byte-offset@1.0.0: + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true - typed-array-length@1.0.4: + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true - typedoc@0.25.4(typescript@5.3.3): + /typedoc@0.25.13(typescript@5.4.5): + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.3 - shiki: 0.14.3 - typescript: 5.3.3 + minimatch: 9.0.4 + shiki: 0.14.7 + typescript: 5.4.5 + dev: true - typescript@5.3.3: {} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true - ua-parser-js@1.0.36: {} + /ua-parser-js@1.0.38: + resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} + dev: true - unbox-primitive@1.0.2: + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: true - unc-path-regex@0.1.2: {} + /unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true - undici-types@5.26.5: {} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - unixify@1.0.0: + /unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} dependencies: normalize-path: 2.1.1 + dev: true - update-browserslist-db@1.0.11(browserslist@4.21.9): + /update-browserslist-db@1.0.16(browserslist@4.23.0): + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.9 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + dev: true - upper-case-first@2.0.2: + /upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} dependencies: tslib: 2.6.2 + dev: true - upper-case@2.0.2: + /upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} dependencies: tslib: 2.6.2 + dev: true - uri-js@4.4.1: + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 + dev: true - urlpattern-polyfill@8.0.2: {} + /urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + dev: true - urlpattern-polyfill@9.0.0: {} + /urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + dev: true - util-deprecate@1.0.2: {} + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true - v8-compile-cache-lib@3.0.1: {} + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true - v8-to-istanbul@9.1.0: + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.18 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: true - value-or-promise@1.0.12: {} + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: true - vscode-oniguruma@1.7.0: {} + /vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + dev: true - vscode-textmate@8.0.0: {} + /vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + dev: true - walker@1.0.8: + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 + dev: true - watchpack@2.4.0: + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + dev: true - wcwidth@1.0.1: + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: true - web-streams-polyfill@3.2.1: {} + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: true - webcrypto-core@1.7.7: + /webcrypto-core@1.8.0: + resolution: {integrity: sha512-kR1UQNH8MD42CYuLzvibfakG5Ew5seG85dMMoAM/1LqvckxaF6pUiidLuraIu4V+YCIFabYecUZAW0TuxAoaqw==} dependencies: - '@peculiar/asn1-schema': 2.3.6 + '@peculiar/asn1-schema': 2.3.8 '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 tslib: 2.6.2 + dev: true - webidl-conversions@3.0.1: {} + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true - webidl-conversions@4.0.2: {} + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true - webpack-sources@3.2.3: {} + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true - webpack@5.88.2(esbuild@0.19.9): + /webpack@5.91.0(esbuild@0.19.12): + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.1 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.10.0 - acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.9 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.0 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.16.1 + es-module-lexer: 1.5.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -8395,88 +7585,158 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(esbuild@0.19.9)(webpack@5.88.2(esbuild@0.19.9)) - watchpack: 2.4.0 + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.91.0) + watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js + dev: true - whatwg-url@5.0.0: + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: true - whatwg-url@7.1.0: + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 + dev: true - which-boxed-primitive@1.0.2: + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: true - which-module@2.0.1: {} + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true - which-typed-array@1.1.11: + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - which@2.0.2: + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 + dev: true + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true - wrap-ansi@6.2.0: + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - wrap-ansi@7.0.0: + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true - wrappy@1.0.2: {} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@4.0.2: + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true - ws@8.14.2: {} - - y18n@4.0.3: {} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true - y18n@5.0.8: {} + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true - yallist@3.1.1: {} + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true - yallist@4.0.0: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true - yaml-ast-parser@0.0.43: {} + /yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + dev: true - yaml@2.3.4: {} + /yaml@2.4.2: + resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + engines: {node: '>= 14'} + hasBin: true + dev: true - yargs-parser@18.1.3: + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 + dev: true - yargs-parser@21.1.1: {} + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true - yargs@15.4.1: + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -8489,17 +7749,27 @@ snapshots: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 + dev: true - yargs@17.7.2: + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + dev: true - yn@3.1.1: {} + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true - yocto-queue@0.1.0: {} + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true From ade61c1578cbb720de0dd9dcf79cca9e2b931fd3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 31 May 2024 14:49:35 -0400 Subject: [PATCH 124/136] address gabis comments --- src/account/KeylessAccount.ts | 5 ++--- src/bcs/deserializer.ts | 14 ++++---------- src/bcs/serializer.ts | 7 +++---- src/core/crypto/cryptoHashable.ts | 4 ++-- .../transactionBuilder/signingMessage.ts | 4 ++-- tests/unit/signingMessage.test.ts | 4 ++-- 6 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index e6bd16006..e7117b239 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -23,7 +23,7 @@ import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/acc import { Deserializer, Serializable, Serializer } from "../bcs"; import { deriveTransactionType } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; -import { AptsoDomainSeparator, CryptoHashable } from "../core/crypto/cryptoHashable"; +import { CryptoHashable } from "../core/crypto/cryptoHashable"; import { base64UrlDecode } from "../utils/helpers"; /** @@ -327,13 +327,12 @@ export class TransactionAndProof extends CryptoHashable { /** * The domain separator prefix used when hashing. */ - domainSeparator: AptsoDomainSeparator; + readonly domainSeparator = "APTOS::TransactionAndProof"; constructor(transaction: AnyRawTransactionInstance, proof?: ZkProof) { super(); this.transaction = transaction; this.proof = proof; - this.domainSeparator = "APTOS::TransactionAndProof"; } serialize(serializer: Serializer): void { diff --git a/src/bcs/deserializer.ts b/src/bcs/deserializer.ts index 784d48ff2..947ef47be 100644 --- a/src/bcs/deserializer.ts +++ b/src/bcs/deserializer.ts @@ -69,11 +69,8 @@ export class Deserializer { * ``` */ deserializeOptionStr(): string | undefined { - const exists = this.deserializeUleb128AsU32(); - if (exists === 1) { - return this.deserializeStr(); - } - return undefined; + const exists = this.deserializeBool(); + return exists ? this.deserializeStr() : undefined; } /** @@ -95,11 +92,8 @@ export class Deserializer { * @returns the deserialized value of class type T */ deserializeOption(cls: Deserializable): T | undefined { - const exists = this.deserializeUleb128AsU32(); - if (exists === 1) { - return this.deserialize(cls); - } - return undefined; + const exists = this.deserializeBool(); + return exists ? this.deserialize(cls) : undefined; } /** diff --git a/src/bcs/serializer.ts b/src/bcs/serializer.ts index a3f2655b0..8f19aa3ba 100644 --- a/src/bcs/serializer.ts +++ b/src/bcs/serializer.ts @@ -336,10 +336,9 @@ export class Serializer { * ``` */ serializeOption(value?: T): void { - if (value === undefined) { - this.serializeU32AsUleb128(0); - } else { - this.serializeU32AsUleb128(1); + const hasValue = value !== undefined; + this.serializeBool(hasValue); + if (hasValue) { value.serialize(this); } } diff --git a/src/core/crypto/cryptoHashable.ts b/src/core/crypto/cryptoHashable.ts index 2a6529c5d..0689674e8 100644 --- a/src/core/crypto/cryptoHashable.ts +++ b/src/core/crypto/cryptoHashable.ts @@ -1,9 +1,9 @@ import { generateSigningMessage } from "../../transactions/transactionBuilder/signingMessage"; import { Serializable } from "../../bcs/serializer"; -export type AptsoDomainSeparator = `APTOS::${string}`; +export type AptosDomainSeparator = `APTOS::${string}`; export abstract class CryptoHashable extends Serializable { - abstract readonly domainSeparator: AptsoDomainSeparator; + abstract readonly domainSeparator: AptosDomainSeparator; /** * Hashes the bcs serialized from of the class. This is the typescript corollary to the BCSCryptoHash macro in aptos-core. diff --git a/src/transactions/transactionBuilder/signingMessage.ts b/src/transactions/transactionBuilder/signingMessage.ts index 0041b112e..7fe20bb76 100644 --- a/src/transactions/transactionBuilder/signingMessage.ts +++ b/src/transactions/transactionBuilder/signingMessage.ts @@ -8,7 +8,7 @@ import { sha3_256 as sha3Hash } from "@noble/hashes/sha3"; import { RAW_TRANSACTION_SALT, RAW_TRANSACTION_WITH_DATA_SALT } from "../../utils/const"; import { FeePayerRawTransaction, MultiAgentRawTransaction } from "../instances"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../types"; -import { Serializable } from "../../bcs/serializer"; +import { Serializable } from "../../bcs"; /** * Derive the raw transaction type - FeePayerRawTransaction or MultiAgentRawTransaction or RawTransaction @@ -61,7 +61,7 @@ export function generateSigningMessage(bytes: Uint8Array, domainSeparator: strin } /** - * @deprected + * @deprecated * Use CryptoHashable instead by having your class implement it and call hash() to get the signing message. * * Generates the 'signing message' form of a serilizable value. It bcs serializes the value and uses the name of diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index f9da63fe8..5160927d5 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { Account, Ed25519PrivateKey, Serializer, generateSigningMessageForTransaction } from "../../src"; -import { AptsoDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHashable"; +import { AptosDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHashable"; import { getAptosClient } from "../e2e/helper"; import { ed25519 } from "./helper"; @@ -71,7 +71,7 @@ describe("generateSigningMessage ", () => { test("generates the proper message for serializable", async () => { class TestClass extends CryptoHashable { - domainSeparator: AptsoDomainSeparator; + domainSeparator: AptosDomainSeparator; data: string; From f664f3ca00450f9343a613a6ea1e49b34fc2dd7e Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 31 May 2024 19:14:37 -0400 Subject: [PATCH 125/136] Remove cryptoHashable --- src/account/EphemeralKeyPair.ts | 18 +++++------------- src/account/KeylessAccount.ts | 14 +++++++++++--- src/core/crypto/cryptoHashable.ts | 16 ---------------- tests/unit/signingMessage.test.ts | 29 +---------------------------- 4 files changed, 17 insertions(+), 60 deletions(-) delete mode 100644 src/core/crypto/cryptoHashable.ts diff --git a/src/account/EphemeralKeyPair.ts b/src/account/EphemeralKeyPair.ts index a0e4ffb75..38d64f2ea 100644 --- a/src/account/EphemeralKeyPair.ts +++ b/src/account/EphemeralKeyPair.ts @@ -60,7 +60,11 @@ export class EphemeralKeyPair extends Serializable { // Generate the blinder if not provided this.blinder = blinder !== undefined ? Hex.fromHexInput(blinder).toUint8Array() : generateBlinder(); // Calculate the nonce - this.nonce = this.generateNonce(); + const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); + fields.push(BigInt(this.expiryDateSecs)); + fields.push(bytesToBigIntLE(this.blinder)); + const nonceHash = poseidonHash(fields); + this.nonce = nonceHash.toString(); } /** @@ -124,18 +128,6 @@ export class EphemeralKeyPair extends Serializable { return new EphemeralKeyPair({ privateKey, expiryDateSecs: args?.expiryDateSecs }); } - /** - * From the ephemeral public key, expiry timestamp, and blinder, calculate the nonce to be used at authentication via OIDC. - * @returns string - */ - private generateNonce(): string { - const fields = padAndPackBytesWithLen(this.publicKey.bcsToBytes(), 93); - fields.push(BigInt(this.expiryDateSecs)); - fields.push(bytesToBigIntLE(this.blinder)); - const nonceHash = poseidonHash(fields); - return nonceHash.toString(); - } - /** * Sign the given message with the private key. * @param data in HexInput format diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index e7117b239..919dbcd8e 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -21,9 +21,8 @@ import { EphemeralKeyPair } from "./EphemeralKeyPair"; import { Hex } from "../core/hex"; import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account"; import { Deserializer, Serializable, Serializer } from "../bcs"; -import { deriveTransactionType } from "../transactions/transactionBuilder/signingMessage"; +import { deriveTransactionType, generateSigningMessage } from "../transactions/transactionBuilder/signingMessage"; import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types"; -import { CryptoHashable } from "../core/crypto/cryptoHashable"; import { base64UrlDecode } from "../utils/helpers"; /** @@ -313,7 +312,7 @@ export class KeylessAccount extends Serializable implements Account { * A container class to hold a transaction and a proof. It implements CryptoHashable which is used to create * the signing message for Keyless transactions. We sign over the proof to ensure non-malleability. */ -export class TransactionAndProof extends CryptoHashable { +class TransactionAndProof extends Serializable { /** * The transaction to sign. */ @@ -339,6 +338,15 @@ export class TransactionAndProof extends CryptoHashable { serializer.serializeFixedBytes(this.transaction.bcsToBytes()); serializer.serializeOption(this.proof); } + + /** + * Hashes the bcs serialized from of the class. This is the typescript corollary to the BCSCryptoHash macro in aptos-core. + * + * @returns Uint8Array + */ + hash(): Uint8Array { + return generateSigningMessage(this.bcsToBytes(), this.domainSeparator); + } } export type ProofFetchSuccess = { diff --git a/src/core/crypto/cryptoHashable.ts b/src/core/crypto/cryptoHashable.ts deleted file mode 100644 index 0689674e8..000000000 --- a/src/core/crypto/cryptoHashable.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { generateSigningMessage } from "../../transactions/transactionBuilder/signingMessage"; -import { Serializable } from "../../bcs/serializer"; - -export type AptosDomainSeparator = `APTOS::${string}`; -export abstract class CryptoHashable extends Serializable { - abstract readonly domainSeparator: AptosDomainSeparator; - - /** - * Hashes the bcs serialized from of the class. This is the typescript corollary to the BCSCryptoHash macro in aptos-core. - * - * @returns Uint8Array - */ - hash(): Uint8Array { - return generateSigningMessage(this.bcsToBytes(), this.domainSeparator); - } -} diff --git a/tests/unit/signingMessage.test.ts b/tests/unit/signingMessage.test.ts index 5160927d5..8df7971f2 100644 --- a/tests/unit/signingMessage.test.ts +++ b/tests/unit/signingMessage.test.ts @@ -1,8 +1,7 @@ // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 -import { Account, Ed25519PrivateKey, Serializer, generateSigningMessageForTransaction } from "../../src"; -import { AptosDomainSeparator, CryptoHashable } from "../../src/core/crypto/cryptoHashable"; +import { Account, Ed25519PrivateKey, generateSigningMessageForTransaction } from "../../src"; import { getAptosClient } from "../e2e/helper"; import { ed25519 } from "./helper"; @@ -68,30 +67,4 @@ describe("generateSigningMessage ", () => { ]), ); }); - - test("generates the proper message for serializable", async () => { - class TestClass extends CryptoHashable { - domainSeparator: AptosDomainSeparator; - - data: string; - - constructor() { - super(); - this.data = "test"; - this.domainSeparator = "APTOS::TestClass"; - } - - serialize(serializer: Serializer): void { - serializer.serializeStr(this.data); - } - } - - const signingMessage = new TestClass().hash(); - expect(signingMessage).toEqual( - new Uint8Array([ - 134, 234, 208, 191, 5, 202, 254, 220, 58, 89, 147, 141, 29, 129, 67, 235, 85, 247, 253, 242, 60, 51, 32, 219, - 33, 228, 237, 43, 170, 195, 204, 116, 4, 116, 101, 115, 116, - ]), - ); - }); }); From ab93d3b403126146d896432241f4e37b81fa3160 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 13:58:25 -0400 Subject: [PATCH 126/136] rename keyless test account to sender --- tests/e2e/api/keyless.test.ts | 62 ++++++++++++++--------------------- 1 file changed, 25 insertions(+), 37 deletions(-) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index e60fd626f..b1be6d610 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -67,9 +67,9 @@ describe("keyless api", () => { async () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, uidKey: "email" }); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, uidKey: "email" }); const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); + await simpleCoinTransactionHelper(aptos, sender, recipient); }, KEYLESS_TEST_TIMEOUT, ); @@ -79,21 +79,9 @@ describe("keyless api", () => { async () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); - }, - KEYLESS_TEST_TIMEOUT, - ); - - test( - "derives the keyless account with custom pepper and submits a transaction", - async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, pepper: new Uint8Array(31) }); - const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); + await simpleCoinTransactionHelper(aptos, sender, recipient); }, KEYLESS_TEST_TIMEOUT, ); @@ -110,12 +98,12 @@ describe("keyless api", () => { } succeeded = true; }; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); expect(succeeded).toBeFalsy(); - await account.waitForProofFetch(); + await sender.waitForProofFetch(); expect(succeeded).toBeTruthy(); const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); + await simpleCoinTransactionHelper(aptos, sender, recipient); }, KEYLESS_TEST_TIMEOUT, ); @@ -126,13 +114,13 @@ describe("keyless api", () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; const proofFetchCallback = async () => {}; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); const transaction = await aptos.transferCoinTransaction({ - sender: account.accountAddress, - recipient: account.accountAddress, + sender: sender.accountAddress, + recipient: sender.accountAddress, amount: TRANSFER_AMOUNT, }); - const pendingTxn = await aptos.signAndSubmitTransaction({ signer: account, transaction }); + const pendingTxn = await aptos.signAndSubmitTransaction({ signer: sender, transaction }); await aptos.waitForTransaction({ transactionHash: pendingTxn.hash }); }, KEYLESS_TEST_TIMEOUT, @@ -144,15 +132,15 @@ describe("keyless api", () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; const proofFetchCallback = async () => {}; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, proofFetchCallback }); const transaction = await aptos.transferCoinTransaction({ - sender: account.accountAddress, - recipient: account.accountAddress, + sender: sender.accountAddress, + recipient: sender.accountAddress, amount: TRANSFER_AMOUNT, }); - expect(() => account.signTransaction(transaction)).toThrow(); - await account.waitForProofFetch(); - account.signTransaction(transaction); + expect(() => sender.signTransaction(transaction)).toThrow(); + await sender.waitForProofFetch(); + sender.signTransaction(transaction); }, KEYLESS_TEST_TIMEOUT, ); @@ -163,7 +151,7 @@ describe("keyless api", () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; const proofFetchCallback = async () => {}; - const account = await aptos.deriveKeylessAccount({ + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair, uidKey: "email", @@ -171,7 +159,7 @@ describe("keyless api", () => { proofFetchCallback, }); const recipient = Account.generate(); - await simpleCoinTransactionHelper(aptos, account, recipient); + await simpleCoinTransactionHelper(aptos, sender, recipient); }, KEYLESS_TEST_TIMEOUT, ); @@ -181,13 +169,13 @@ describe("keyless api", () => { async () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); const transaction = await aptos.transferCoinTransaction({ - sender: account.accountAddress, - recipient: account.accountAddress, + sender: sender.accountAddress, + recipient: sender.accountAddress, amount: TRANSFER_AMOUNT, }); - await aptos.transaction.simulate.simple({ signerPublicKey: account.publicKey, transaction }); + await aptos.transaction.simulate.simple({ signerPublicKey: sender.publicKey, transaction }); }, KEYLESS_TEST_TIMEOUT, ); @@ -197,8 +185,8 @@ describe("keyless api", () => { async () => { // Select a random test token. Using the same one may encounter rate limits const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; - const account = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); - const bytes = account.bcsToBytes(); + const sender = await aptos.deriveKeylessAccount({ jwt, ephemeralKeyPair }); + const bytes = sender.bcsToBytes(); const deserializedAccount = KeylessAccount.fromBytes(bytes); expect(bytes).toEqual(deserializedAccount.bcsToBytes()); }, From f3c1ea566c9f339e5910b54b4e69df8fc32a0c00 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 15:09:53 -0400 Subject: [PATCH 127/136] tweak multikey proof wait --- src/account/MultiKeyAccount.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 702bc6757..5bd4b1a21 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -131,7 +131,8 @@ export class MultiKeyAccount implements Account { */ async waitForProofFetch() { const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; - await Promise.all(keylessSigners.filter((signer) => signer.proof instanceof Promise).map((signer) => signer.proof)); + const promises = keylessSigners.map(async signer => signer.waitForProofFetch()); + await Promise.all(promises); } /** From 89e2535613b916288efde22ba69a43dd387ec2af Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 15:38:23 -0400 Subject: [PATCH 128/136] fmt --- src/account/MultiKeyAccount.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/account/MultiKeyAccount.ts b/src/account/MultiKeyAccount.ts index 5bd4b1a21..7a7c1f8a7 100644 --- a/src/account/MultiKeyAccount.ts +++ b/src/account/MultiKeyAccount.ts @@ -131,7 +131,7 @@ export class MultiKeyAccount implements Account { */ async waitForProofFetch() { const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[]; - const promises = keylessSigners.map(async signer => signer.waitForProofFetch()); + const promises = keylessSigners.map(async (signer) => signer.waitForProofFetch()); await Promise.all(promises); } From f081c7a4278cd5e8ec5b7e3f64bb4cbda51e2d3a Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 16:12:13 -0400 Subject: [PATCH 129/136] add original address lookup --- src/account/KeylessAccount.ts | 18 +++++---- src/api/keyless.ts | 31 ++++++++++++-- src/core/crypto/keyless.ts | 2 +- src/internal/keyless.ts | 40 +++++++++++-------- src/types/keyless.ts | 2 +- tests/e2e/api/keyless.test.ts | 2 +- .../transaction/transactionBuilder.test.ts | 2 +- 7 files changed, 66 insertions(+), 31 deletions(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 919dbcd8e..88af4928e 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -108,12 +108,12 @@ export class KeylessAccount extends Serializable implements Account { uidVal: string; aud: string; pepper: HexInput; - proofOrFetcher: ZeroKnowledgeSig | Promise; + proof: ZeroKnowledgeSig | Promise; proofFetchCallback?: ProofFetchCallback; jwt: string; }) { super(); - const { address, ephemeralKeyPair, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args; + const { address, ephemeralKeyPair, uidKey, uidVal, aud, pepper, proof, proofFetchCallback, jwt } = args; this.ephemeralKeyPair = ephemeralKeyPair; this.publicKey = KeylessPublicKey.create(args); this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress(); @@ -122,9 +122,9 @@ export class KeylessAccount extends Serializable implements Account { this.aud = aud; this.jwt = jwt; this.emitter = new EventEmitter(); - this.proofOrPromise = proofOrFetcher; - if (proofOrFetcher instanceof ZeroKnowledgeSig) { - this.proof = proofOrFetcher; + this.proofOrPromise = proof; + if (proof instanceof ZeroKnowledgeSig) { + this.proof = proof; } else { if (proofFetchCallback === undefined) { throw new Error("Must provide callback for async proof fetch"); @@ -133,7 +133,7 @@ export class KeylessAccount extends Serializable implements Account { await proofFetchCallback(status); this.emitter.removeAllListeners(); }); - this.init(proofOrFetcher); + this.init(proof); } this.signingScheme = SigningScheme.SingleKey; const pepperBytes = Hex.fromHexInput(pepper).toUint8Array(); @@ -278,6 +278,7 @@ export class KeylessAccount extends Serializable implements Account { } static create(args: { + address?: AccountAddress; proof: ZeroKnowledgeSig | Promise; jwt: string; ephemeralKeyPair: EphemeralKeyPair; @@ -285,7 +286,7 @@ export class KeylessAccount extends Serializable implements Account { uidKey?: string; proofFetchCallback?: ProofFetchCallback; }): KeylessAccount { - const { proof, jwt, ephemeralKeyPair, pepper, uidKey = "sub", proofFetchCallback } = args; + const { address, proof, jwt, ephemeralKeyPair, pepper, uidKey = "sub", proofFetchCallback } = args; const jwtPayload = jwtDecode(jwt); const iss = jwtPayload.iss!; @@ -295,7 +296,8 @@ export class KeylessAccount extends Serializable implements Account { const aud = jwtPayload.aud!; const uidVal = jwtPayload[uidKey]; return new KeylessAccount({ - proofOrFetcher: proof, + address, + proof, ephemeralKeyPair, iss, uidKey, diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 7b8c73a94..d06be16c5 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -2,7 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; -import { deriveKeylessAccount, getPepper } from "../internal/keyless"; +import { ZeroKnowledgeSig } from "../core"; +import { deriveKeylessAccount, getPepper, getProof } from "../internal/keyless"; import { HexInput } from "../types"; import { AptosConfig } from "./aptosConfig"; @@ -20,14 +21,38 @@ export class Keyless { * * @param args.jwt JWT token * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token + * @param args.derivationPath a derivation path used for creating multiple accounts per user via the BIP-44 standard. Defaults + * to "m/44'/637'/0'/0'/0". * @returns The pepper which is a Uint8Array of length 31. */ - async getPepper(args: { jwt: string; ephemeralKeyPair: EphemeralKeyPair }): Promise { + async getPepper(args: { + jwt: string; + ephemeralKeyPair: EphemeralKeyPair; + derivationPath?: string; + }): Promise { return getPepper({ aptosConfig: this.config, ...args }); } /** - * Fetches the pepper from the Aptos pepper service API. + * Fetches a proof from the Aptos prover service API. + * + * @param args.jwt JWT token + * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token + * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment + * @param args.pepper the pepper used for the account. If not provided it will be fetched from the Aptos pepper service + */ + async getProof(args: { + jwt: string; + ephemeralKeyPair: EphemeralKeyPair; + pepper?: HexInput; + uidKey?: string; + }): Promise { + return getProof({ aptosConfig: this.config, ...args }); + } + + /** + * Derives the Keyless Account from the JWT token and corresponding EphemeralKeyPair. It will lookup the pepper from + * the pepper service if not explicitly provided. It will compute the proof via the proving service. It will ch * * @param args.jwt JWT token * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token diff --git a/src/core/crypto/keyless.ts b/src/core/crypto/keyless.ts index 5189018bf..084384efb 100644 --- a/src/core/crypto/keyless.ts +++ b/src/core/crypto/keyless.ts @@ -155,7 +155,7 @@ export class KeylessPublicKey extends AccountPublicKey { return new KeylessPublicKey(args.iss, computeIdCommitment(args)); } - static fromJWTAndPepper(args: { jwt: string; pepper: HexInput; uidKey?: string }): KeylessPublicKey { + static fromJwtAndPepper(args: { jwt: string; pepper: HexInput; uidKey?: string }): KeylessPublicKey { const { jwt, pepper, uidKey = "sub" } = args; const jwtPayload = jwtDecode(jwt); const iss = jwtPayload.iss!; diff --git a/src/internal/keyless.ts b/src/internal/keyless.ts index 35a3bcbfd..66da3872e 100644 --- a/src/internal/keyless.ts +++ b/src/internal/keyless.ts @@ -9,11 +9,20 @@ */ import { AptosConfig } from "../api/aptosConfig"; import { postAptosPepperService, postAptosProvingService } from "../client"; -import { EphemeralSignature, Groth16Zkp, Hex, ZeroKnowledgeSig, ZkProof, getKeylessConfig } from "../core"; +import { + EphemeralSignature, + Groth16Zkp, + Hex, + KeylessPublicKey, + ZeroKnowledgeSig, + ZkProof, + getKeylessConfig, +} from "../core"; import { HexInput, ZkpVariant } from "../types"; import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account"; import { PepperFetchRequest, PepperFetchResponse, ProverRequest, ProverResponse } from "../types/keyless"; import { nowInSeconds } from "../utils/helpers"; +import { lookupOriginalAccountAddress } from "./account"; export async function getPepper(args: { aptosConfig: AptosConfig; @@ -46,10 +55,13 @@ export async function getProof(args: { aptosConfig: AptosConfig; jwt: string; ephemeralKeyPair: EphemeralKeyPair; - pepper: HexInput; + pepper?: HexInput; uidKey?: string; }): Promise { - const { aptosConfig, jwt, ephemeralKeyPair, pepper, uidKey = "sub" } = args; + const { aptosConfig, jwt, ephemeralKeyPair, pepper = await getPepper(args), uidKey = "sub" } = args; + if (Hex.fromHexInput(pepper).toUint8Array().length !== KeylessAccount.PEPPER_LENGTH) { + throw new Error(`Pepper needs to be ${KeylessAccount.PEPPER_LENGTH} bytes`); + } const { maxExpHorizonSecs } = await getKeylessConfig({ aptosConfig }); if (maxExpHorizonSecs < ephemeralKeyPair.expiryDateSecs - nowInSeconds()) { throw Error(`The EphemeralKeyPair is too long lived. It's lifespan must be less than ${maxExpHorizonSecs}`); @@ -95,18 +107,7 @@ export async function deriveKeylessAccount(args: { pepper?: HexInput; proofFetchCallback?: ProofFetchCallback; }): Promise { - const { proofFetchCallback } = args; - let { pepper } = args; - if (pepper === undefined) { - pepper = await getPepper(args); - } else { - pepper = Hex.fromHexInput(pepper).toUint8Array(); - } - - if (pepper.length !== KeylessAccount.PEPPER_LENGTH) { - throw new Error(`Pepper needs to be ${KeylessAccount.PEPPER_LENGTH} bytes`); - } - + const { aptosConfig, jwt, uidKey, proofFetchCallback, pepper = await getPepper(args) } = args; const proofPromise = getProof({ ...args, pepper }); // If a callback is provided, pass in the proof as a promise to KeylessAccount.create. This will make the proof be fetched in the // background and the callback will handle the outcome of the fetch. This allows the developer to not have to block on the proof fetch @@ -115,7 +116,14 @@ export async function deriveKeylessAccount(args: { // If no callback is provided, the just await the proof fetch and continue syncronously. const proof = proofFetchCallback ? proofPromise : await proofPromise; - const keylessAccount = KeylessAccount.create({ ...args, proof, pepper, proofFetchCallback }); + // Look up the original address to handle key rotations + const publicKey = KeylessPublicKey.fromJwtAndPepper({ jwt, pepper, uidKey }); + const address = await lookupOriginalAccountAddress({ + aptosConfig, + authenticationKey: publicKey.authKey().derivedAddress(), + }); + + const keylessAccount = KeylessAccount.create({ ...args, address, proof, pepper, proofFetchCallback }); return keylessAccount; } diff --git a/src/types/keyless.ts b/src/types/keyless.ts index 2cb4d3a5b..0f04b695f 100644 --- a/src/types/keyless.ts +++ b/src/types/keyless.ts @@ -20,7 +20,7 @@ export type PepperFetchRequest = { uid_key: string; derivation_path: string; }; -export type PepperFetchResponse = { signature: string; pepper: string; address: string }; +export type PepperFetchResponse = { pepper: string; address: string }; export type KeylessConfigurationResponse = { max_commited_epk_bytes: number; diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index b1be6d610..ebef25f69 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -40,7 +40,7 @@ describe("keyless api", () => { // Fund the test accounts const promises = TEST_JWT_TOKENS.map(async (jwt) => { const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); - const accountAddress = KeylessPublicKey.fromJWTAndPepper({ jwt, pepper }).authKey().derivedAddress(); + const accountAddress = KeylessPublicKey.fromJwtAndPepper({ jwt, pepper }).authKey().derivedAddress(); await aptos.fundAccount({ accountAddress, amount: FUND_AMOUNT, diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index 5a400326d..7060d58b3 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -416,7 +416,7 @@ describe("transaction builder", () => { "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTE0IiwiZW1haWwiOiJ0ZXN0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.pqmdpi9Ruh_JLD_i2nCVDQZbjDFOF-gFHVc63px-oYolisvY6IOTj96iGPIpANegpMkefHQ4q2ZQKbIHDc1tYDfzbSiR4aUn8zxPYCbIIcteZ0UGil6GQRto_5pTEK9d5vH0baHG7zmfnLDN9mRP44pe0MiT1JcR2_LcaNIyh1sYIUk3cSDEMonkA9tGWlKqCSD4wf9NA_cLd5yptv99tleiCxduIKP-zOVcT8h6kWtVJL7-D5toS5EC_EDWAxjqoeb6I4cPmmR1SHFCsbLjzQ4B4x0IjJKWSmo1b585tjJRtr1PYe80G7J9tKfNzY8rdVkxhjjZNnKkAB1-WhlV5w"; const ephemeralKeyPair = EPHEMERAL_KEY_PAIR; const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); - const publicKey = KeylessPublicKey.fromJWTAndPepper({ jwt, pepper }); + const publicKey = KeylessPublicKey.fromJwtAndPepper({ jwt, pepper }); const accountAddress = publicKey.authKey().derivedAddress(); await aptos.fundAccount({ accountAddress, amount: FUND_AMOUNT }); const payload = await generateTransactionPayload({ From e1d3a6d7b06f306fd975d59b1bb317afd98ae0ed Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:01:36 -0400 Subject: [PATCH 130/136] add test for static constructor --- tests/e2e/api/keyless.test.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index ebef25f69..b1c728e75 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -62,6 +62,26 @@ describe("keyless api", () => { KEYLESS_TEST_TIMEOUT, ); + test( + "creates the keyless account via the static constructor and submits a transaction", + async () => { + // Select a random test token. Using the same one may encounter rate limits + const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + + const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); + const publicKey = KeylessPublicKey.fromJwtAndPepper({ jwt, pepper }); + const address = await aptos.lookupOriginalAccountAddress({ + authenticationKey: publicKey.authKey().derivedAddress(), + }); + const proof = await aptos.getProof({ jwt, ephemeralKeyPair, pepper }); + + const account = KeylessAccount.create({address, proof, jwt, ephemeralKeyPair, pepper}) + const recipient = Account.generate(); + await simpleCoinTransactionHelper(aptos, account, recipient); + }, + KEYLESS_TEST_TIMEOUT, + ); + test( "derives the keyless account with email uidKey and submits a transaction", async () => { From d1e1f080c18fab086887ff54593c18ef22f6e455 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:01:58 -0400 Subject: [PATCH 131/136] fmt --- tests/e2e/api/keyless.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index b1c728e75..afd79414b 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -75,7 +75,7 @@ describe("keyless api", () => { }); const proof = await aptos.getProof({ jwt, ephemeralKeyPair, pepper }); - const account = KeylessAccount.create({address, proof, jwt, ephemeralKeyPair, pepper}) + const account = KeylessAccount.create({ address, proof, jwt, ephemeralKeyPair, pepper }); const recipient = Account.generate(); await simpleCoinTransactionHelper(aptos, account, recipient); }, From 45be0d7fb6ef2e2baf1863004d9192d16684a624 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:05:42 -0400 Subject: [PATCH 132/136] make constructor private --- src/account/KeylessAccount.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/account/KeylessAccount.ts b/src/account/KeylessAccount.ts index 88af4928e..e222816e9 100644 --- a/src/account/KeylessAccount.ts +++ b/src/account/KeylessAccount.ts @@ -100,7 +100,8 @@ export class KeylessAccount extends Serializable implements Account { */ private readonly emitter: EventEmitter; - constructor(args: { + // Use the static constructor 'create' instead. + private constructor(args: { address?: AccountAddress; ephemeralKeyPair: EphemeralKeyPair; iss: string; From 052ffae727faa17a4fcc31e663ad87652073f58d Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:10:08 -0400 Subject: [PATCH 133/136] remove random to fix codeql complaint --- tests/e2e/api/keyless.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index afd79414b..8d11cedc5 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -65,8 +65,7 @@ describe("keyless api", () => { test( "creates the keyless account via the static constructor and submits a transaction", async () => { - // Select a random test token. Using the same one may encounter rate limits - const jwt = TEST_JWT_TOKENS[Math.floor(Math.random() * TEST_JWT_TOKENS.length)]; + const jwt = TEST_JWT_TOKENS[0]; const pepper = await aptos.getPepper({ jwt, ephemeralKeyPair }); const publicKey = KeylessPublicKey.fromJwtAndPepper({ jwt, pepper }); From 37db4e5445cd9c775b310c75d6d2a057f4a85b05 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:22:24 -0400 Subject: [PATCH 134/136] add more tokens --- tests/e2e/api/keyless.test.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tests/e2e/api/keyless.test.ts b/tests/e2e/api/keyless.test.ts index 8d11cedc5..ebb0189fe 100644 --- a/tests/e2e/api/keyless.test.ts +++ b/tests/e2e/api/keyless.test.ts @@ -15,12 +15,16 @@ import { getAptosClient } from "../helper"; import { simpleCoinTransactionHeler as simpleCoinTransactionHelper } from "../transaction/helper"; export const TEST_JWT_TOKENS = [ - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTAiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.YQGVRJ8wA9UgZ48VFPuxxMSPhPpeR7XNd1M-yw-3aCLUY1OAL1z_UXVqd2RB1SqaPZ4CD2BBm9txvIY7qfS4V0-Bk0tW6TeRo8iq8oL52-TIm8aCg1GQ2CmdJ_eEtFoW5AaEzX3mblWcinwTbfnrlhy-cdJxGq6EKIzQZc_AylScrYHj4dSEmq33EuaBTpF0HHyf8UmJvoe-PZhVjuj73gy10vhITtLe1Cq6A-fjAJ00BEJCa9ghke17hDXibEBLCO2tFuqggL37am5fMAmmZ0-x1rXcKub-LXyuV1Gc8OSVngBrseT7S2Sw4Gx1z3AN3bCzOJbPNTSFlwmzdIcuNQ", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTEiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.r5EXWtCVxRGtDYHLsYtOxxCVs0wQKM2QwUSg6NoHdSOBHpPlTdB0D4uGw_cS6uW2v8W8JxRWUagyAW93HMGrDGHVeBg3h8wmGR-gEWJqe2-kMxr6CpeHi6Xl5xoajWukQt1XAnuCpAF2U6i5biSx_3oerkS6zf1VX9KxUbnURVZtcrVqRS-1-isFjrrG2cDbBeX9X1i8qdyIJd0l1TTgD0BVI1uFCAIVEwSZ8w4haDTKj2JJOhtZCaeV-H8jqhRHVWXKn0xP1giUvChRz4dBuUdXK7YsYP9nCrAQiCm2MIwNmCPsxH4racb4MZn6PWJZXNpLpWjZ3WV9H4IBo8tR9A", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTIiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.JVXx2JmeZEgAtAXRmniQVscxgTtYRliGVyfclIYe7F5UUQAz2szwkNSuDlaW82myfuqUkbKgih3G3YK9GDh4Y1B1TcZT7_J2EVyj6s9QNmEQmf0Nlr31BQIJAOSGHNsTzkQ3at0c1lLbFd8ZpjI_ey8LVdOvLGBBErVJGlj89M158Jwl0E34GjRB8iWbC0WKS3A-T_IOtsu_VDOApQuIiOtS7LLAsGQcXWZGcykk2q5TwKui92gBw9vyRBB3FVOTtXssqEU7zRhtkUY6_L7mN7Z4zEVnlnZP_jtjjDtMCfFzbZSp_MP-ZmCdDPjjTH6QKfdQUB8ajqrDI7irEKsvqA", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTMiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.A5kmVT9dJAEz4GW7jglczCqgrmYinGWxfm9f1-A882kmk0tKQem3ZxDUjySRKj0725sJs3Rrbdhi2Jyk77FNADqoQ6bj1RA6SXguf0BG4iHvSc4CrtdzD9PHQjGQ1gC0LZBUgdKoKkp4C9eicu38cr4lbrW2XSeCCpy02SNSUwBtOoI7jrb_Q2YiOpK1g0fivNHM3Q3Crpy8gSvnim0xHsRylvs7UmDqLAeN2K7py-4MJOX9MgZStMqPkQMbcf-FDaYRaNUfP0uR48ZwfWATujRJenEYkOPupeFWhrh-DzL3OfqLzGg2oW0oq-EkROqdPpRgUCsT7jULps_sEensbQ", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTQiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.P5mWnTPNb00sAVdRir2qfsRXEZ2qCWslgnTTWiRsGVOuXsnkSPG4kLcQFVbPz8p_VwN-uqZHacrPZdZiN5LAdyAzxzVN-1cyfWDzt7Qwf95DDLlJkg4euNWXt3qrJR6th2QbHpzf5TJPxAXLRQpQJTO8gYKyFcX-izz8WDPRjeRU9e3cQ2pGOz3gXwXkHsylmC8y9obnhLqaMdDrX6-jUg2HTZsjNMH_7ZGd6oWKaE9SPTu0gR-tcluniC7YNAeXXv0AbqNEZ9WM_DcoIWvqlJzKnIuc-64Yj2cYMdgU8eDvgxN83khHFzQ9aP_BY_AtUdrFQwCXMEjNbSAw4P1WxA", - "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTUiLCJlbWFpbCI6InRlc3RAYXB0b3NsYWJzLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTcwMzk0ODQsImV4cCI6MjcwMDAwMDAwMCwibm9uY2UiOiI5MzYxNTQ1NTI0OTIwMDQ4ODA2NTM0NjQwNDk4NTAzODg0OTU0ODY1NTY3MzYyMTA3MzQ5MjIxMzAwMjg0MjA5ODc1MDkxMzYyMjI5In0.ZX6QhX1An2KEbN755Et_u2gfXaC-UTv778Fl0E8kDf4_rqSbdDNdG4VysU0ASBtjZ4k1YKcOpZyz1BhqeQ9vp3A-M6niy2CFFcBoyXeXE_lzsbOizhBHQhLQaCCAlefn4gAGFH5cfK094vI2uHAffUx_XUki139Fapf-JJunSC4z34jiPiTkTO_Yfgx-XYXbI5h9AcFvtgYqLDZQ6Goigv-Rx7QK9iEKYnxqpROW1LDRdUyYLHJMUHAlsVMbnER4lM3IXTlb44XcGwFZuBqKeD2SyBDU_hDUjykwRf8b6Fg9h7k2YFAGwJkKybQmLrncM5PSNjUQ2g37hr80XM3yRQ", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTAiLCJlbWFpbCI6InRlc3QwQGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.ZLZRVJpYfxjNBIdQjeLEniuUsMuBQ7zYm0R0bzKdoIFO4uDTcGrg50-ao_2t89A6EYO0p1uvOC_zCtYsAE57i36kvnX5zCCJwpu7-tMLGsOWCR56H22PgSD7GUcmOp4uePbMPPXp753YrNnlbArEQztfQssI6ScyMVQzNDYW7z2V6esB_GtkEaQzsKDEExDPKC_JBBI__Mek7SQLjFDjbBnWJsGuL4fp2Ux0GVJTaTFvFZMNfNzSQX3Mi93dJFu67xt4UwMUoOxPF1C63SPM53DPBPBPK71dEHug3Z4afgswyEZfNHSotMfhT7D1IEaOzKJnoCSwML5eP0VA0bmGRQ", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTEiLCJlbWFpbCI6InRlc3QxQGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.NeytBC3patHnUS7giCH_NcSBeekx6bpR18BX5Wzp0VNl7Bo56gytmADqOqQIF9m_VGD8YQ_ld4JV5G_tCWbpQYNoHr3gpLIb68cj0XP7bhE8D11GvYOYRM0z5h8JQmKv7tbRvZwK5EyFm3HOEX5M0vmjJBN_KNSBRsqSNMAZEe7e4zoO4Zu86X8CkfFcvONgtpsJGycoxk2gyZt8KGSB2OydVnurV8TMbQ7WcM3HdqQZjZMcl1Rh4_8nNGXs8AB29-LiPpaze9CRLiiZ031NXzdJMTUW6RIulJdDpC3zaTMEZs6b9m-NBqVqhkeUFTvpeImycDgp0421RQA-oDqI7g", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTIiLCJlbWFpbCI6InRlc3QyQGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.q8vx7OrbukWs1P-VT5GNK2OPzbduBtMahQNBpg4Nck6h0Z0a62teW8PT46ir3SohpyRa1pLVjky6akPXrqoyYdI3qdwhf3pFwV6iJAROXw0UhaPJXXCCzmzUuNgIp3drn_G2_KCVtOTntbysOFekwlYDsvMwsmFTfKKJWpZsVDPiw2MQ_A1v6gsxn7qP4OXfsaWxkZJtzOu5W17dVGnveeN4Y_3bkPjt-1AseHOpVyFKrDI60aR5fMMjXU4wpynjTKgVUlWsIyKHvULcMRPq42KeBno148rXFLBAFJ-RSl7SQ500yVsvuz7iWX7-MeSlwJQbiAjG2wULuXsvum_gUw", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTMiLCJlbWFpbCI6InRlc3QzQGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.YD3F9tc31DQ4xuWVbRLYAPjskojQDNOzYL7vJTrc_D595jXHQcBr1AZWxfwkc-ruzGFNthPuDkE-s3jSDZndqpqwffxcYYbF28vjnN6LwJPAMPGPUmxCbhGcrdoRnBXm7vmukLQbaYHNIByxb2B_fnpsje9a_Iq16lpfblJAhKR1PP0s1opZU9icC6VhPUalDwdpDYD0LmmUmqbVBTZH_6l0Ht4pQcfNIb6PAfW1a2TrNldY9ItsammikWPKqcWVdy1Cb5UhypxQdZYol9-6zqLCkvtCuxB1N8Q-Y7vb1SzgV6vAmL3CsG-TPmZ-9rGvtbxwl69Wf0rk6zJ8hW26Dg", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTQiLCJlbWFpbCI6InRlc3Q0QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.C2AEJyqoZzmPo_IHwwD0uwUf8WOdgKydSCJ_tQsWl7xKYjqqnzQZp9IArwGKT6ZeQ5QYNVyl6WgXEP8xQfMB6khVJayDjdHeqTwp4_Nf7uadeR3_2YpTOtFy42lp3l7_N2NBacMgAduXbzLLq2NEyuYA7m_51NuvVb01ZsR_yn_1HgBNtd50Uz6bE9jviehk7zHNgDzLzogO1WsXRKevMoJs4NlY4qx9jPxs90KHVXm315UvcTYwiKU8B_esRf1lbJJjIQfcmhzRJ3_WgTEZSRW6xbLIetOTJUIDmI08JQ_48wG4-4QWSLIvipztdRwElrKHpcXNXjaRnKhVjsCN9g", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTUiLCJlbWFpbCI6InRlc3Q1QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.o-dHqzErid5CMPQTFRbJU5d7JMlud8hY9_USG9d52H35J20XJeJ5SM1ldt1PNqA4cxNWjPhyiQtrRzKeqwEMlIZ_hwyr1u6w2GkynR5yGR_G5_0_zj_Pbh0vnsgFH8XxLKedpDWQD7hyjZ2qL7V_7odnuJioqz6-hUtrFQzRs6RcVEwu2DaZrdb46zkvF3F6XO3qQjmcMvpKKfn4xwBFmEguQOygviXuCs3b_pELBOQM2eY822KsQMRfAuz9bmaFiX2NFM6uE5rPDL0wzy_VauZylFi1MoEEdpUR0LcyzwKnrLoxbooAjtOR2onWSeHDs0gmq0oT4mazY9ox1XTGGA", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTYiLCJlbWFpbCI6InRlc3Q2QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.kSTHhFMnZPbV-qW1R_gPIYKNW_VtFbUSDM8w8uMSJmUM7xfAN0Vbj4SjEkkpyeNA-8wUNzx7IqUpRW9cZswsIvg_VVtW1AVA-oLvEm_v4eX1eQ538Avt37lMteQdEM56b94-hv7WGHGfUJKeFvC-OcN7XAp4OYaFC2NheOUPfysB6WUVO94STfp9hz5x38P9lAM7scmXdnliaS5js8PchSbwuyAMOPRad_mHreeFB5LCFDUzNAK_SfUlhyULdrRJNfR3CroxtLy4nv94YyOuB36_b10gAp3cu8TPogpbW_yRWF37kcHSMAdupJuGuxh6qSROXn9oD9113rBXpepmMQ", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTciLCJlbWFpbCI6InRlc3Q3QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.DBCXh5FUT8MgoCDMTtDugZFy-XkyOHVfrKTr6dGHS3dJ5bQeeesEM8IgjO5_Rq9AjK_wwhdlHb1Y4xT8g1bILYqX77-nAMROYMRPlINXI9Hp1MrEEuT1HScsqzi1HkoxENEUgLsnoKn0qPDjXUOIRr3zmOAlQNW5UqUEeCNybwj61LmWtJg3s4D0cut7cLJCRgp2cLEIKQiDFyEtEIR301AxGmMN36dqxZL5gQ9j073U48YyY4g6uBaZS1CUrVda8hd6WEsg5qXK-huowPnEXo94W8cHJ75fyXD8Pv6fvcgYpq9cyS20YeuRr5hxb8x01ESwDxIfi5Y5v8Q9UHkjzg", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTgiLCJlbWFpbCI6InRlc3Q4QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.N-_GtyPt3Egv8QxpfX8KttxmRLjcye6tgbG-qYdPghTbYqhoUZz0MUMybWvoS2oChxWT1-Aatjk4xduy5rIjuT2ZPOnMe3uNsUk_QZaXHOgI3LBWYSn_SrAhztS6Nk9v2tsLzIFVtX7mS6scU2Y_iKldU825BJbyqIMLWs2HWyLCRU7xTp3-0SiBMvtiqh2UxH-Vniv1MzXu2kdivBiMELBXTvMWb2rLITFdKjUwLJo0dwfMZJjmgGWljdpiXJodbVPO8bH0ZWwZ3LY3dtNaZDguXBw3hkEZwEL9z-9dP2GdqTiCAB6kqCehTVkl8-JYLa_5rpYYPit9PTwVi-pg0A", + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3QtcnNhIn0.eyJpc3MiOiJ0ZXN0Lm9pZGMucHJvdmlkZXIiLCJhdWQiOiJ0ZXN0LWtleWxlc3Mtc2RrIiwic3ViIjoidGVzdC11c2VyLTkiLCJlbWFpbCI6InRlc3Q5QGFwdG9zbGFicy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxNzE3MDM5NDg0LCJleHAiOjI3MDAwMDAwMDAsIm5vbmNlIjoiOTM2MTU0NTUyNDkyMDA0ODgwNjUzNDY0MDQ5ODUwMzg4NDk1NDg2NTU2NzM2MjEwNzM0OTIyMTMwMDI4NDIwOTg3NTA5MTM2MjIyOSJ9.LFPe_Czd92zHkay1BvSqiRuHHAGJFa25ZFGYq3SPJeCZ8vswy32JSMa7S07B7nHj92aBapfkfG8flqIRquUvUuc6MlXjQZTLU8lI7mWXPDAcZzsKiV7ZJnyn2Ir6tJmqLOWGS3tan3VUsu01hstd1qv0q6IGAYQ50OaeNoY73X0GLZ8QeB8CbodOPjrN_wG_qkIXLDwiacijmX7xc_-3-Sn1vl8BukE4HGC81SUA8xIKFxevQ7dvHRC5DcN2ZSOupgeCs__8rYB3NGN2bHv5ahzwqYaVH0n9pyZcM7r_FdC6stC8uUkiSFMQg_pSbI5wNT0WDJAgszsTkJmGsf0vdQ", ]; export const EPHEMERAL_KEY_PAIR = new EphemeralKeyPair({ From 5ff7a1a5b368e8890b464037f6517cb51723b109 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:31:04 -0400 Subject: [PATCH 135/136] update docstring --- src/api/keyless.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/api/keyless.ts b/src/api/keyless.ts index d06be16c5..8042b63b8 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -40,6 +40,8 @@ export class Keyless { * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment * @param args.pepper the pepper used for the account. If not provided it will be fetched from the Aptos pepper service + * + * @returns The proof which is represented by a ZeroKnowledgeSig. */ async getProof(args: { jwt: string; From eebff67046175814fd26975a8a4f887fa0903369 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 3 Jun 2024 17:32:31 -0400 Subject: [PATCH 136/136] fmt --- src/api/keyless.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/keyless.ts b/src/api/keyless.ts index 8042b63b8..3df7e45fb 100644 --- a/src/api/keyless.ts +++ b/src/api/keyless.ts @@ -40,7 +40,7 @@ export class Keyless { * @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token * @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment * @param args.pepper the pepper used for the account. If not provided it will be fetched from the Aptos pepper service - * + * * @returns The proof which is represented by a ZeroKnowledgeSig. */ async getProof(args: {