From 073c0f3617e04e0944de7f5a553ae5e2a3a7fe91 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 10 Jan 2024 08:26:50 -0500 Subject: [PATCH 01/39] Update Web5 Test Vectors to latest Signed-off-by: Frank Hinek --- test-vectors/README.md | 134 ++++ test-vectors/credentials/README.md | 57 ++ test-vectors/credentials/create.json | 621 ++++++++++++++++++ test-vectors/credentials/verify.json | 45 ++ test-vectors/did_jwk/README.md | 19 + test-vectors/did_jwk/resolve.json | 107 +++ test-vectors/did_web/README.md | 24 + test-vectors/did_web/resolve.json | 101 +++ test-vectors/index.html | 48 ++ test-vectors/presentation_exchange/README.md | 22 + .../create_presentation_from_credentials.json | 45 ++ .../select_credentials.json | 59 ++ test-vectors/vectors.schema.json | 40 ++ 13 files changed, 1322 insertions(+) create mode 100644 test-vectors/README.md create mode 100644 test-vectors/credentials/README.md create mode 100644 test-vectors/credentials/create.json create mode 100644 test-vectors/credentials/verify.json create mode 100644 test-vectors/did_jwk/README.md create mode 100644 test-vectors/did_jwk/resolve.json create mode 100644 test-vectors/did_web/README.md create mode 100644 test-vectors/did_web/resolve.json create mode 100644 test-vectors/index.html create mode 100644 test-vectors/presentation_exchange/README.md create mode 100644 test-vectors/presentation_exchange/create_presentation_from_credentials.json create mode 100644 test-vectors/presentation_exchange/select_credentials.json create mode 100644 test-vectors/vectors.schema.json diff --git a/test-vectors/README.md b/test-vectors/README.md new file mode 100644 index 000000000..21df00b48 --- /dev/null +++ b/test-vectors/README.md @@ -0,0 +1,134 @@ +# Web5 Test Vectors + +## Description + +This directory contains test vectors for all features we intend to support accross several languages. Each feature has its own directory which contains a single vectors file per sub-feature e.g. + +```text +web5-test-vectors +├── README.md +├── did-jwk <--- feature +│   └── resolve.json <--- sub-feature +├── index.html +└── vectors.schema.json +``` + +## Test Vector Files + +Test vector files should adhere to [`vectors.schema.json`]('./vectors.schema.json'). This repo contains a [`test-vector-validation`]('../scripts/test-vector-validation') script that validates all vectors files in this directory. It can be run manually by following the instructions [here](../scripts/test-vector-validation/README.md). + +> [!NOTE] +> Test Vector Validation runs automatically anytime a change is made in this directory or to the script itself. + +Each test vector file is a structured collection of test vector objects, where each vector asserts a specific outcome for a given input. Below is a table that outlines the expected fields in a test vector file: + +| Field | Type | Description | Required | +| ----------------------- | ------- | ---------------------------------------------------------------------------------------------------- | :------: | +| `description` | string | A general description of the test vectors collection. | Yes | +| `vectors` | array | An array of test vector objects. | Yes | +| `vectors[].description` | string | A description of what this test vector is testing. | Yes | +| `vectors[].input` | any | The input for the test vector, which can be of any type. | Yes | +| `vectors[].output` | any | The expected output for the test vector, which can be of any type. | No | +| `vectors[].errors` | boolean | Indicates whether the test vector is expected to produce an error. Defaults to false if not present. | No | + +### Rationale for Test Vector Structure + +The structure of a `vector` object is designed to fulfill two conditions: + +* the function works and returns something that should match `output` +* the function throws an error (in whatever way the consuming language represents errors) + * _optionally_, the error's _output_ should match `output` + +`errors: true` is an instruction to anticipate an error in the implementation language. For example: + +* In languages like Kotlin or Javascript, the presence of `errors: true` would imply that `assertThrows` be used. +* In Go, the expectation would be for the err variable to be non-nil. +* In Rust, the error handling would pivot on matching `Result.Err` rather than `Result.Ok`. + +Should `errors` be set to `true`, the `output` field may optionally be used to include expected error messages. + +## Creating New Test Vector Full Walkthrough + +### Step 1: Create New Test Vector + +1. Navigate to the GitHub repository: sdk-development[https://github.com/TBD54566975/sdk-development/tree/main/web5-test-vectors] + +2. Create a new folder and JSON file with the structure example_feature/hello_world.json. + +3. Populate the JSON file as follows. Note that adherence to the [json schema](./vectors.schema.json) is enforced by CI. + +```json +{ + "description": "vector example", + "vectors": [ + { + "description": "this is an example", + "input": "hello world", + "output": "hello world", + "errors" : false + } + ] +} +``` + +### Step 2: Copy JSON to Local Test-Vectors Directory + +Copy the `hello_world.json` file from `example_feature` directory into your SDK's test-vectors folder. make sure the file +and file name are both identical to that in the sdk-development repo. + +### Step 3: Create Unit Test in web5-kt + +1. In the `web5-kt` project, create a new unit test class. + +1. Name the class following the given pattern: + +* Prefix: `Web5TestVectors` + +* Middle: Convert `example_feature` to `ExampleFeature` (capitalize words and remove underscores) + +* Combined Output: `Web5TestVectorsExampleFeature` + +1. Implement the class and test method as follows: + +```kt +class Web5TestVectorsExampleFeature { + @Test + fun hello_world() { + val testVectors = mapper.readValue(File("../test-vectors/example_feature/hello_world.json"), typeRef) + assertEquals(testVectors.vectors[0].input, testVectors.vectors[0].output) + } +} +``` + +### Step 4: Create Unit Test in web5-js + +1. In the `web5-js` project, create a new unit test class. + +1. Name the class following the given pattern: + +* Prefix: `Web5TestVectors` + +* Middle: Convert `example_feature` to `ExampleFeature` (capitalize words and remove underscores) + +* Combined Output: `Web5TestVectorsExampleFeature` + +1. Implement the class and test method as follows: + +```javascript + import ExampleFeatureHelloWorldSpecJson from '../../../test-vectors/example_feature/hello_world.json' assert { type: 'json' }; + + describe('Web5TestVectorsExampleFeature', () => { + it('hello_world', async () => { + const vectors = ExampleFeatureHelloWorldSpecJson.vectors; + expect(vectors[0].input).to.equal(vectors[0].output) + }); + }); +``` + +### Step 5: Completion + +* Once the above steps are completed, the `sdk-development` repository will automatically detect the new test vectors by consuming artifacts generated by a github action (No action by you required) +* Once the new vector merges into the sdk-development repo, PRs will be automatically opened on all SDKs that don't have it yet. +* The system will indicate whether the test passes or fails with a checkmark or an 'x' on the [test vectors dashboard](https://tbd54566975.github.io/sdk-development/). + +Your new test vector system is now set up and ready for use! diff --git a/test-vectors/credentials/README.md b/test-vectors/credentials/README.md new file mode 100644 index 000000000..290e54667 --- /dev/null +++ b/test-vectors/credentials/README.md @@ -0,0 +1,57 @@ +# `credentials` Test Vectors + +This directory contains test vectors for the `credentials` module. It's important to note that the test vectors ensure +that +the implementations are following the [Verifiable Credential 1.1 specification](https://www.w3.org/TR/vc-data-model/). + +## `create` + +Create test vectors are available in the [json file](./create.json), which contains success and failure test cases. + +### Input + +The value of `input` is an object with the following properties. + +| Property | Description | +|--------------------|--------------------------------------------------------------------------------------------------------------------------| +| `signerDidUri` | the did uri that will be used to sign the verifiable credential created. | +| `signerPrivateJwk` | Json Web Key object associated with the `signerDidUri` which will be used for signing `credential`. | +| `credential` | A JSON object that represents a Verifiable Credential 1.1 according to the [spec](https://www.w3.org/TR/vc-data-model/). | + +### Output + +The value of `output` is a Verifiable Credential 1.1 encoded as a JSON Web Token ( +see [here](https://www.w3.org/TR/vc-data-model/#json-web-token) for more details). The signature is created using +the `signerPrivateJwk` private key. + +### Reference implementations + +The reference implementations for: + +* `create_success` can be + found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L244). +* `create_failure` can be + found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L285). + +## `verify` + +Verify test vectors are available in the [json file](./verify.json), which contains success and failure test cases. + +### Input + +The value of `input` is an object with the single property `vcJwt`. The value of `vcJwt` is a Verifiable Credential 1.1 +encoded as a JSON Web Token (see [here](https://www.w3.org/TR/vc-data-model/#json-web-token) for more details). + +### Output + +Output is empty, signalling that no exception nor errors should be thrown for success cases. For failure cases, the +`errors` property is set to `true`, signalling that an exception or an error should be returned or thrown. + +### Reference implementations + +The reference implementations for: + +* `verify_success` can be + found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L261). +* `verify_failure` can be + found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L273). diff --git a/test-vectors/credentials/create.json b/test-vectors/credentials/create.json new file mode 100644 index 000000000..8ae2a49a5 --- /dev/null +++ b/test-vectors/credentials/create.json @@ -0,0 +1,621 @@ +{ + "description": "verifiable credential 1.1 signing", + "vectors": [ + { + "description": "bad no credential subject", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/58473", + "type": [ + "VerifiableCredential", + "AlumniCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad missing context", + "input": { + "credential": { + "@context": [ + ], + "id": "http://example.edu/credentials/58473", + "type": [ + "VerifiableCredential", + "AlumniCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "alumniOf": "Example University" + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad first context item", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/examples/v1", + "https://www.w3.org/2018/credentials/v1" + ], + "id": "http://example.edu/credentials/58473", + "type": [ + "VerifiableCredential", + "AlumniCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "alumniOf": "Example University" + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad multiple id values", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": [ + "http://example.edu/credentials/3731", + "http://example.edu/credentials/3732" + ], + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad id must be a uri", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "example", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad type must have at least one value", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad type must have VerifiableCredential as first value", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad issuance date", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "01/01/2010", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad multiple issuers", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": [ + "https://example.edu/issuers/14", + "https://example.edu/issuers/20" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad issuer must be uri", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "example", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad issuer as object without id", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": {}, + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad issuer as numeric id", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": 12345, + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad missing issuance date", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad missing issuer", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad expiration date with multiple values", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "expirationDate": [ + "2020-01-01T19:23:24Z", + "2021-01-01T19:23:24Z" + ], + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad expiration date value", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "expirationDate": "01/01/2020", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad credential status with missing id", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "credentialStatus": { + "type": "CredentialStatusList2017" + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad credential status with missing type", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "credentialStatus": { + "id": "https://example.edu/status/24" + }, + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "bad credential status as a string", + "input": { + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "http://example.edu/credentials/3732", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://example.edu/issuers/14", + "issuanceDate": "2010-01-01T19:23:24Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": { + "type": "BachelorDegree", + "name": "Bachelor of Science in Mechanical Engineering" + } + }, + "credentialStatus": "false", + "proof": { + "type": "RsaSignature2018" + } + } + }, + "errors": true + }, + { + "description": "creates a verifiable credential as a jwt with a did:key", + "input": { + "signerDidUri": "did:key:zQ3shNLt1aMWPbWRGa8VoeEbJofJ7xJe4FCPpDKxq1NZygpiy", + "signerPrivateJwk": { + "kty": "EC", + "d": "OeBCt3M8roz9F9Ny192TtZXf_-qPzAkwSM6ep7QdSO4", + "use": "sig", + "crv": "secp256k1", + "kid": "NB_qlUIr06-AikVVMFreq0lc-omQtzc6lwhhcvgO6r4", + "x": "DdtN8W6x_34pB_nkxR0e1tmDkNnsJeusBAEPzKWgf_Y", + "y": "u3W135inodLqtcEb9jNGS3JsM_uFKmkJSb8Trc9luWI", + "alg": "ES256K" + }, + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1" + ], + "type": [ + "VerifiableCredential", + "StreetCred" + ], + "id": "urn:uuid:6c8bbcf4-87af-449a-9bfb-30bf29976227", + "issuer": "did:key:zQ3shNLt1aMWPbWRGa8VoeEbJofJ7xJe4FCPpDKxq1NZygpiy", + "issuanceDate": "2023-11-30T00:03:13Z", + "credentialSubject": { + "id": "did:key:zQ3shkpavjKRewoBk6arPJnhA87ZzhLDEWgVvZKNHK6QqVJDB", + "localRespect": "high", + "legit": true + } + } + }, + "output": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2SyJ9.eyJpc3MiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkiLCJzdWIiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJpYXQiOjE3MDEzMDI1OTMsInZjIjp7Imlzc3VhbmNlRGF0ZSI6IjIwMjMtMTEtMzBUMDA6MDM6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJsb2NhbFJlc3BlY3QiOiJoaWdoIiwibGVnaXQiOnRydWV9LCJpZCI6InVybjp1dWlkOjZjOGJiY2Y0LTg3YWYtNDQ5YS05YmZiLTMwYmYyOTk3NjIyNyIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTdHJlZXRDcmVkIl0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sImlzc3VlciI6ImRpZDprZXk6elEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSJ9fQ.qoqF4-FinFsQ2J-NFSO46xCE8kUTZqZCU5fYr6tS0TQ6VP8y-ZnyR6R3oAqLs_Yo_CqQi23yi38uDjLjksiD2w" + }, + { + "description": "creates a verifiable credential as a jwt with a did:jwk", + "input": { + "signerDidUri": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6Ik5CX3FsVUlyMDYtQWlrVlZNRnJlcTBsYy1vbVF0emM2bHdoaGN2Z082cjQiLCJ4IjoiRGR0TjhXNnhfMzRwQl9ua3hSMGUxdG1Ea05uc0pldXNCQUVQektXZ2ZfWSIsInkiOiJ1M1cxMzVpbm9kTHF0Y0ViOWpOR1MzSnNNX3VGS21rSlNiOFRyYzlsdVdJIiwiYWxnIjoiRVMyNTZLIn0", + "signerPrivateJwk": { + "kty": "EC", + "d": "OeBCt3M8roz9F9Ny192TtZXf_-qPzAkwSM6ep7QdSO4", + "use": "sig", + "crv": "secp256k1", + "kid": "NB_qlUIr06-AikVVMFreq0lc-omQtzc6lwhhcvgO6r4", + "x": "DdtN8W6x_34pB_nkxR0e1tmDkNnsJeusBAEPzKWgf_Y", + "y": "u3W135inodLqtcEb9jNGS3JsM_uFKmkJSb8Trc9luWI", + "alg": "ES256K" + }, + "credential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1" + ], + "type": [ + "VerifiableCredential", + "StreetCred" + ], + "id": "urn:uuid:6c8bbcf4-87af-449a-9bfb-30bf29976227", + "issuer": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6Ik5CX3FsVUlyMDYtQWlrVlZNRnJlcTBsYy1vbVF0emM2bHdoaGN2Z082cjQiLCJ4IjoiRGR0TjhXNnhfMzRwQl9ua3hSMGUxdG1Ea05uc0pldXNCQUVQektXZ2ZfWSIsInkiOiJ1M1cxMzVpbm9kTHF0Y0ViOWpOR1MzSnNNX3VGS21rSlNiOFRyYzlsdVdJIiwiYWxnIjoiRVMyNTZLIn0", + "issuanceDate": "2023-11-30T00:03:13Z", + "credentialSubject": { + "id": "did:key:zQ3shkpavjKRewoBk6arPJnhA87ZzhLDEWgVvZKNHK6QqVJDB", + "localRespect": "high", + "legit": true + } + } + }, + "output": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCMwIiwidHlwIjoiSldUIiwiYWxnIjoiRVMyNTZLIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCIsInN1YiI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImlhdCI6MTcwMTMwMjU5MywidmMiOnsiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMS0zMFQwMDowMzoxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImxvY2FsUmVzcGVjdCI6ImhpZ2giLCJsZWdpdCI6dHJ1ZX0sImlkIjoidXJuOnV1aWQ6NmM4YmJjZjQtODdhZi00NDlhLTliZmItMzBiZjI5OTc2MjI3IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaXNzdWVyIjoiZGlkOmp3azpleUpyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0ltTnlkaUk2SW5ObFkzQXlOVFpyTVNJc0ltdHBaQ0k2SWs1Q1gzRnNWVWx5TURZdFFXbHJWbFpOUm5KbGNUQnNZeTF2YlZGMGVtTTJiSGRvYUdOMlowODJjalFpTENKNElqb2lSR1IwVGpoWE5uaGZNelJ3UWw5dWEzaFNNR1V4ZEcxRWEwNXVjMHBsZFhOQ1FVVlFla3RYWjJaZldTSXNJbmtpT2lKMU0xY3hNelZwYm05a1RIRjBZMFZpT1dwT1IxTXpTbk5OWDNWR1MyMXJTbE5pT0ZSeVl6bHNkVmRKSWl3aVlXeG5Jam9pUlZNeU5UWkxJbjAifX0.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g" + } + ] +} \ No newline at end of file diff --git a/test-vectors/credentials/verify.json b/test-vectors/credentials/verify.json new file mode 100644 index 000000000..841f938ef --- /dev/null +++ b/test-vectors/credentials/verify.json @@ -0,0 +1,45 @@ +{ + "description": "verifiable credential 1.1 verification", + "vectors": [ + { + "description": "bad vcJwt structure", + "input": { + "vcJwt": "foo.bar" + }, + "errors": true + }, + { + "description": "bad missing alg", + "input": { + "vcJwt": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.cbK62TrzOfbVDy06OWQUxkz--hKGGuG_Ch5on_SkiuU" + }, + "errors": true + }, + { + "description": "bad missing kid", + "input": { + "vcJwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.cbK62TrzOfbVDy06OWQUxkz--hKGGuG_Ch5on_SkiuU" + }, + "errors": true + }, + { + "description": "bad signature", + "input": { + "vcJwt": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g" + }, + "errors": true + }, + { + "description": "verify a jwt verifiable credential signed with a did:key", + "input": { + "vcJwt": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2SyJ9.eyJpc3MiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkiLCJzdWIiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJpYXQiOjE3MDEzMDI1OTMsInZjIjp7Imlzc3VhbmNlRGF0ZSI6IjIwMjMtMTEtMzBUMDA6MDM6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJsb2NhbFJlc3BlY3QiOiJoaWdoIiwibGVnaXQiOnRydWV9LCJpZCI6InVybjp1dWlkOjZjOGJiY2Y0LTg3YWYtNDQ5YS05YmZiLTMwYmYyOTk3NjIyNyIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTdHJlZXRDcmVkIl0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sImlzc3VlciI6ImRpZDprZXk6elEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSJ9fQ.qoqF4-FinFsQ2J-NFSO46xCE8kUTZqZCU5fYr6tS0TQ6VP8y-ZnyR6R3oAqLs_Yo_CqQi23yi38uDjLjksiD2w" + } + }, + { + "description": "verify a jwt verifiable credential signed with a did:jwk", + "input": { + "vcJwt": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCMwIiwidHlwIjoiSldUIiwiYWxnIjoiRVMyNTZLIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCIsInN1YiI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImlhdCI6MTcwMTMwMjU5MywidmMiOnsiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMS0zMFQwMDowMzoxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImxvY2FsUmVzcGVjdCI6ImhpZ2giLCJsZWdpdCI6dHJ1ZX0sImlkIjoidXJuOnV1aWQ6NmM4YmJjZjQtODdhZi00NDlhLTliZmItMzBiZjI5OTc2MjI3IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaXNzdWVyIjoiZGlkOmp3azpleUpyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0ltTnlkaUk2SW5ObFkzQXlOVFpyTVNJc0ltdHBaQ0k2SWs1Q1gzRnNWVWx5TURZdFFXbHJWbFpOUm5KbGNUQnNZeTF2YlZGMGVtTTJiSGRvYUdOMlowODJjalFpTENKNElqb2lSR1IwVGpoWE5uaGZNelJ3UWw5dWEzaFNNR1V4ZEcxRWEwNXVjMHBsZFhOQ1FVVlFla3RYWjJaZldTSXNJbmtpT2lKMU0xY3hNelZwYm05a1RIRjBZMFZpT1dwT1IxTXpTbk5OWDNWR1MyMXJTbE5pT0ZSeVl6bHNkVmRKSWl3aVlXeG5Jam9pUlZNeU5UWkxJbjAifX0.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g" + } + } + ] +} \ No newline at end of file diff --git a/test-vectors/did_jwk/README.md b/test-vectors/did_jwk/README.md new file mode 100644 index 000000000..6b0edf823 --- /dev/null +++ b/test-vectors/did_jwk/README.md @@ -0,0 +1,19 @@ +# `did:jwk` Test Vectors + +## Resolve + +Resolution test vectors are available [here](./resolve.json) + +### Input + +the value of `input` is a string that is to be treated as a DID URI + +### Output + +the value of `output` is an object that contains the following properties + +| Property | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `didDocument` | the expected [didDocument](https://www.w3.org/TR/did-core/#dfn-diddocument) when `input` is resolved. Note that `didDocument` is set to `null` if resolution is unsuccessful | +| `didDocumentMetadata` | the expected [didDocumentMetadata](https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata) when `input` is resolved. Note for `did:jwk` this is _always_ an empty object | +| `didResolutionMetadata` | the expected [didResolutionMetadata](https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata) when `input` is resolved. Note for `did:jwk`, on success, this is _always_ an empty object | diff --git a/test-vectors/did_jwk/resolve.json b/test-vectors/did_jwk/resolve.json new file mode 100644 index 000000000..b1aec6bcb --- /dev/null +++ b/test-vectors/did_jwk/resolve.json @@ -0,0 +1,107 @@ +{ + "description": "did:jwk resolution test vectors", + "vectors": [ + { + "description": "resolves did:jwk 1", + "input": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "output": { + "@context": "https://w3id.org/did-resolution/v1", + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "verificationMethod": [ + { + "type": "JsonWebKey2020", + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0", + "controller": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "publicKeyJwk": { + "kty": "EC", + "use": "sig", + "crv": "secp256k1", + "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", + "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", + "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", + "alg": "ES256K" + } + } + ], + "authentication": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "assertionMethod": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "capabilityInvocation": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "capabilityDelegation": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ] + }, + "didDocumentMetadata": {}, + "didResolutionMetadata": {} + }, + "errors": false + }, + { + "description": "resolves did:jwk 2", + "input": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ", + "output": { + "@context": "https://w3id.org/did-resolution/v1", + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ", + "verificationMethod": [ + { + "type": "JsonWebKey2020", + "id": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0", + "controller": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ", + "publicKeyJwk": { + "kty": "OKP", + "use": "sig", + "crv": "Ed25519", + "kid": "VtSHXPlKDw1EEoOj5XN3XWhjSPYVNvX-e4vjRO0yYJA", + "x": "iz70svSLxNZhsDxeJQ_jnOVbX3KFNkcBcMjWjZmXEsA", + "alg": "EdDSA" + } + } + ], + "authentication": [ + "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" + ], + "assertionMethod": [ + "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" + ], + "capabilityInvocation": [ + "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" + ], + "capabilityDelegation": [ + "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" + ] + }, + "didDocumentMetadata": {}, + "didResolutionMetadata": {} + }, + "errors": false + }, + { + "description": "resolution for invalid did", + "input": "did:jwk:hehe", + "output": { + "@context": "https://w3id.org/did-resolution/v1", + "didDocument": null, + "didResolutionMetadata": { + "error": "invalidDid" + }, + "didDocumentMetadata": {} + }, + "errors": true + } + ] +} diff --git a/test-vectors/did_web/README.md b/test-vectors/did_web/README.md new file mode 100644 index 000000000..4f2e13b63 --- /dev/null +++ b/test-vectors/did_web/README.md @@ -0,0 +1,24 @@ +# `did:web` Test Vectors + +## Resolve + +Resolution test vectors are available [here](./resolve.json) + +### Input + +The value of `input` is an object that contains the following properties: + +| Property | Description | +|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `didUri` | The DID URI to be resolved. | +| `mockServer` | Optional. Object used to describe mocking behavior. Every key in the object is a URL, and the value is the JSON object that should be sent back as the response to a HTTP GET request. | + +### Output + +The value of `output` is an object that contains the following properties. + +| Property | Description | +|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `didDocument` | the expected [didDocument](https://www.w3.org/TR/did-core/#dfn-diddocument) when `input.didUri` is resolved. Note that `didDocument` is set to `{}` if resolution is unsuccessful | +| `didDocumentMetadata` | the expected [didDocumentMetadata](https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata) when `input.didUri` is resolved. Note for `did:web` this is _always_ an empty object | +| `didResolutionMetadata` | the expected [didResolutionMetadata](https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata) when `input.didUri` is resolved. Note for `did:web`, on success, this is _always_ an empty object | diff --git a/test-vectors/did_web/resolve.json b/test-vectors/did_web/resolve.json new file mode 100644 index 000000000..a4b6633ea --- /dev/null +++ b/test-vectors/did_web/resolve.json @@ -0,0 +1,101 @@ +{ + "description": "did:web resolution", + "vectors": [ + { + "description": "resolves to a well known URL", + "input": { + "didUri": "did:web:example.com", + "mockServer": { + "https://example.com/.well-known/did.json": { + "id": "did:web:example.com" + } + } + }, + "output": { + "didDocument": { + "id": "did:web:example.com" + }, + "didDocumentMetadata": {}, + "didResolutionMetadata": {} + } + }, + { + "description": "resolves to a URL with a path", + "input": { + "didUri": "did:web:w3c-ccg.github.io:user:alice", + "mockServer": { + "https://w3c-ccg.github.io/user/alice/did.json": { + "id": "did:web:w3c-ccg.github.io:user:alice" + } + } + }, + "output": { + "didDocument": { + "id": "did:web:w3c-ccg.github.io:user:alice" + }, + "didDocumentMetadata": {}, + "didResolutionMetadata": {} + } + }, + { + "description": "resolves to a URL with a path and a port", + "input": { + "didUri": "did:web:example.com%3A3000:user:alice", + "mockServer": { + "https://example.com:3000/user/alice/did.json": { + "id": "did:web:example.com%3A3000:user:alice" + } + } + }, + "output": { + "didDocument": { + "id": "did:web:example.com%3A3000:user:alice" + }, + "didDocumentMetadata": {}, + "didResolutionMetadata": {} + } + }, + { + "description": "methodNotSupported error returned when did method is not web", + "input": { + "didUri": "did:dht:gb46emk73wkenrut43ii67a3o5qctojcaucebth7r83pst6yeh8o" + }, + "output": { + "didDocument": null, + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "error": "methodNotSupported" + } + }, + "errors": true + }, + { + "description": "notFound error returned when domain does not exist", + "input": { + "didUri": "did:web:doesnotexist.com" + }, + "output": { + "didDocument": null, + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "error": "notFound" + } + }, + "errors": true + }, + { + "description": "invalidDid error returned for domain name with invalid character", + "input": { + "didUri": "did:web:invalidcharø.com" + }, + "output": { + "didDocument": null, + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "error": "invalidDid" + } + }, + "errors": true + } + ] +} \ No newline at end of file diff --git a/test-vectors/index.html b/test-vectors/index.html new file mode 100644 index 000000000..358a26d2f --- /dev/null +++ b/test-vectors/index.html @@ -0,0 +1,48 @@ + + + + + + + Web5 Test Vectors + + + +
+
+

Standard Vector Structure

+ +
+ +
+

Test Vectors

+
+
+

Crypto

+
+ +
+

DIDs

+ +
+ +
+

VCs

+
+ +
+ + + \ No newline at end of file diff --git a/test-vectors/presentation_exchange/README.md b/test-vectors/presentation_exchange/README.md new file mode 100644 index 000000000..401382373 --- /dev/null +++ b/test-vectors/presentation_exchange/README.md @@ -0,0 +1,22 @@ +# Presentation Exchange Test Vectors + +## CreatePresentationFromCredentials + +Input and output for a full presentation exchange test vectors are available [here](./wa-license.json) The reference implementation can be found [here](https://github.com/TBD54566975/web5-js/blob/main/packages/credentials/src/presentation-exchange.ts#L80) + +### Input + +the value of `input` is a an object with `presentationDefinition` and the corresponding `credentialJwt` + +| Property | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `presentationDefinition` | the input [presentationDefinition](https://identity.foundation/presentation-exchange/#presentation-definition) showing the requirements used for this getting an example WA license | +| `credentialJwt` | the input [verifiable credential secured as a JWT](https://www.w3.org/TR/vc-data-model/#json-web-token) that corresponds to the presentationDefinition to fulfill it and do a full presentation exchange + +### Output + +the value of `output` is an object that contains the following properties + +| Property | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `presentationSubmission` | the expected [presentationSubmission](https://identity.foundation/presentation-exchange/#presentation-submission) when the `inputs` are processed by `createPresentationFromCredentials`. | diff --git a/test-vectors/presentation_exchange/create_presentation_from_credentials.json b/test-vectors/presentation_exchange/create_presentation_from_credentials.json new file mode 100644 index 000000000..e026bb70f --- /dev/null +++ b/test-vectors/presentation_exchange/create_presentation_from_credentials.json @@ -0,0 +1,45 @@ +{ + "description":"Create Presentation From Credentials", + "vectors":[ + { + "description":"presentation exchange for wa drivers license", + "input":{ + "presentationDefinition":{ + "id":"32f54163-7166-48f1-93d8-ff217bdb0653", + "input_descriptors":[ + { + "id":"wa_driver_license", + "name":"Washington State Business License", + "purpose":"We can only allow licensed Washington State business representatives into the WA Business Conference", + "constraints":{ + "fields":[ + { + "path":[ + "$.credentialSubject.dateOfBirth", + "$.credentialSubject.licenseNumber", + "$.credentialSubject.licenseState" + ] + } + ] + } + } + ] + }, + "credentialJwt":"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDprZXk6ejZNa25qSkVXZ0xzaDNSeDM3ZXpUQjJKaE1RY1kxYzN4dnRYS3cxaEF6ZmVlSnpKI3o2TWtuakpFV2dMc2gzUngzN2V6VEIySmhNUWNZMWMzeHZ0WEt3MWhBemZlZUp6SiJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtuakpFV2dMc2gzUngzN2V6VEIySmhNUWNZMWMzeHZ0WEt3MWhBemZlZUp6SiIsInN1YiI6ImRpZDprZXk6ejZNa25qSkVXZ0xzaDNSeDM3ZXpUQjJKaE1RY1kxYzN4dnRYS3cxaEF6ZmVlSnpKIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIldhRHJpdmVMaWNlbnNlIl0sImlkIjoidXJuOnV1aWQ6OGYzYmU5NjktOTEyYS00MWNjLWFjYjUtZjMzOGQ2MmQ1OGNlIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rbmpKRVdnTHNoM1J4MzdlelRCMkpoTVFjWTFjM3h2dFhLdzFoQXpmZWVKekoiLCJpc3N1YW5jZURhdGUiOiIyMDIzLTExLTI5VDIxOjQ5OjIxWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rbmpKRVdnTHNoM1J4MzdlelRCMkpoTVFjWTFjM3h2dFhLdzFoQXpmZWVKekoiLCJkYXRlT2ZCaXJ0aCI6IjExLTExLTIwMTEiLCJsaWNlbnNlTnVtYmVyIjoiMTIzNCIsImxpY2Vuc2VTdGF0ZSI6IldBIn19fQ.oGaIuZI9vRcauGI2Zi469mx8KZR1zpNV_HbmFtvWoap6CaPtn-uaG4oxswAfB4ITUs5fePKIgUvdGbBKyWx1CQ" + }, + "output":{ + "presentationSubmission":{ + "id":"VPaHaqzslzOqisx02jMS0", + "definition_id":"32f54163-7166-48f1-93d8-ff217bdb0653", + "descriptor_map":[ + { + "id":"wa_driver_license", + "format":"jwt_vc", + "path":"$.verifiableCredential[0]" + } + ] + } + } + } + ] + } \ No newline at end of file diff --git a/test-vectors/presentation_exchange/select_credentials.json b/test-vectors/presentation_exchange/select_credentials.json new file mode 100644 index 000000000..14e2adced --- /dev/null +++ b/test-vectors/presentation_exchange/select_credentials.json @@ -0,0 +1,59 @@ +{ + "description":"Select Credentials", + "vectors":[ + { + "description":"select credentials for presentation", + "input":{ + "presentationDefinition":{ + "id":"test-pd-id", + "name":"simple PD", + "purpose":"pd for testing", + "input_descriptors":[ + { + "id":"whatever", + "purpose":"id for testing", + "constraints":{ + "fields":[ + { + "path":[ + "$.vc.credentialSubject.btcAddress", + "$.credentialSubject.btcAddress", + "$.btcAddress" + ] + } + ] + } + }, + { + "id":"whatever2", + "purpose":"id for testing2", + "constraints":{ + "fields":[ + { + "path":[ + "$.vc.credentialSubject.dogeAddress", + "$.credentialSubject.dogeAddress", + "$.dogeAddress" + ] + } + ] + } + } + ] + }, + "credentialJwts":[ + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiaWQiOiJ1cm46dXVpZDoxM2Q1YTg3YS1kY2Y1LTRmYjktOWUyOS0wZTYyZTI0YzQ0ODYiLCJpc3N1ZXIiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsImlzc3VhbmNlRGF0ZSI6IjIwMjMtMTItMDdUMTc6MTk6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsIm90aGVydGhpbmciOiJvdGhlcnN0dWZmIn19fQ.FVvL3z8LHJXm7lGX2bGFvH_U-bTyoheRbLzE7zIk_P1BKwRYeW4sbYNzsovFX59twXrnpF-hHkqVVsejSljxDw", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5Eb2dlQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjViZTkwNzQ0LWE3MjQtNGJlNy1hN2EzLTlmMjYwZWMwNDhkMSIsImlzc3VlciI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0wN1QxNzoxOToxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiYnRjQWRkcmVzcyI6ImJ0Y0FkZHJlc3MxMjMiLCJkb2dlQWRkcmVzcyI6ImRvZ2VBZGRyZXNzMTIzIn19fQ.gTfgbVTj_IQS_rM-mOAURGan6Ojk7MSSgFHeog6cqo6DWpDq0pwSRxceAqZhZbSKsW2MFpbBpTko1BgNNMIrDQ", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ" + ] + }, + "output":{ + "selectedCredentials":[ + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5Eb2dlQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjViZTkwNzQ0LWE3MjQtNGJlNy1hN2EzLTlmMjYwZWMwNDhkMSIsImlzc3VlciI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0wN1QxNzoxOToxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiYnRjQWRkcmVzcyI6ImJ0Y0FkZHJlc3MxMjMiLCJkb2dlQWRkcmVzcyI6ImRvZ2VBZGRyZXNzMTIzIn19fQ.gTfgbVTj_IQS_rM-mOAURGan6Ojk7MSSgFHeog6cqo6DWpDq0pwSRxceAqZhZbSKsW2MFpbBpTko1BgNNMIrDQ", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ" + ] + } + } + ] + } \ No newline at end of file diff --git a/test-vectors/vectors.schema.json b/test-vectors/vectors.schema.json new file mode 100644 index 000000000..9ff336e40 --- /dev/null +++ b/test-vectors/vectors.schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Schema for representing test vectors for various features.", + "type": "object", + "required": ["description", "vectors"], + "properties": { + "description": { + "type": "string", + "description": "A general description of the test vectors collection." + }, + "vectors": { + "type": "array", + "description": "An array of test vectors for testing different features.", + "items": { + "type": "object", + "description": "A single test vector, which includes a description and input, and may optionally include an expected output and an errors indicator.", + "required": ["description", "input"], + "properties": { + "description": { + "type": "string", + "description": "A description of what this test vector is validating." + }, + "input": { + "description": "The input for the test vector, which can be of any type." + }, + "output": { + "description": "The expected output for the test vector, which can be of any type." + }, + "errors": { + "type": "boolean", + "default": false, + "description": "Indicates whether the test vector is expected to produce an error. Defaults to false if not present." + } + }, + "additionalProperties": false + } + } + } + } + \ No newline at end of file From 22c001f415db9ca369ce8b7ecb2a66797ae5d155 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 10 Jan 2024 08:30:57 -0500 Subject: [PATCH 02/39] Fix issue with c8 not reporting code coverage and bump version Signed-off-by: Frank Hinek --- package-lock.json | 5302 +++++++++----------------- packages/agent/.c8rc.json | 8 +- packages/agent/package.json | 2 +- packages/api/.c8rc.json | 8 +- packages/api/package.json | 2 +- packages/common/.c8rc.json | 8 +- packages/common/package.json | 2 +- packages/credentials/.c8rc.json | 8 +- packages/credentials/package.json | 2 +- packages/crypto-aws-kms/.c8rc.json | 8 +- packages/crypto-aws-kms/package.json | 2 +- packages/crypto/package.json | 2 +- packages/dids/.c8rc.json | 8 +- packages/dids/package.json | 6 +- packages/identity-agent/.c8rc.json | 8 +- packages/identity-agent/package.json | 2 +- packages/proxy-agent/.c8rc.json | 8 +- packages/proxy-agent/package.json | 2 +- packages/user-agent/.c8rc.json | 8 +- packages/user-agent/package.json | 2 +- 20 files changed, 1814 insertions(+), 3584 deletions(-) diff --git a/package-lock.json b/package-lock.json index 061e41181..8d12ee3d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,9 +27,8 @@ }, "node_modules/@75lb/deep-merge": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", - "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", "dev": true, + "license": "MIT", "dependencies": { "lodash.assignwith": "^4.2.0", "typical": "^7.1.1" @@ -40,39 +39,34 @@ }, "node_modules/@75lb/deep-merge/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@assemblyscript/loader": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", - "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==" + "license": "Apache-2.0" }, "node_modules/@astronautlabs/jsonpath": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz", - "integrity": "sha512-FqL/muoreH7iltYC1EB5Tvox5E8NSOOPGkgns4G+qxRKl6k5dxEVljUjB5NcKESzkqwnUqWjSZkL61XGYOuV+A==", + "license": "MIT", "dependencies": { "static-eval": "2.0.2" } }, "node_modules/@aws-crypto/crc32": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -81,26 +75,22 @@ }, "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "license": "Apache-2.0", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -114,13 +104,11 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/sha256-js": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -129,26 +117,22 @@ }, "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/util": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -157,13 +141,11 @@ }, "node_modules/@aws-crypto/util/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-sdk/client-kms": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.478.0.tgz", - "integrity": "sha512-aipAUgPdl9phhCyDNXIdU7zym/UfoMNbwhs1CQ5PiktAcRTb7ERvSvtNKHioKatz8oGVR35+5n5V3mupe4URgA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -212,8 +194,7 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.478.0.tgz", - "integrity": "sha512-Jxy9cE1JMkPR0PklCpq3cORHnZq/Z4klhSTNGgZNeBWovMa+plor52kyh8iUNHKl3XEJvTbHM7V+dvrr/x0P1g==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -259,8 +240,7 @@ }, "node_modules/@aws-sdk/client-sts": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.478.0.tgz", - "integrity": "sha512-D+QID0dYzmn9dcxgKP3/nMndUqiQbDLsqI0Zf2pG4MW5gPhVNKlDGIV3Ztz8SkMjzGJExNOLW2L569o8jshJVw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -309,8 +289,7 @@ }, "node_modules/@aws-sdk/core": { "version": "3.477.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.477.0.tgz", - "integrity": "sha512-o0434EH+d1BxHZvgG7z8vph2SYefciQ5RnJw2MgvETGnthgqsnI4nnNJLSw0FVeqCeS18n6vRtzqlGYR2YPCNg==", + "license": "Apache-2.0", "dependencies": { "@smithy/core": "^1.2.0", "@smithy/protocol-http": "^3.0.11", @@ -325,8 +304,7 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz", - "integrity": "sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -339,8 +317,7 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.478.0.tgz", - "integrity": "sha512-SsrYEYUvTG9ZoPC+zB19AnVoOKID+QIEHJDIi1GCZXW5kTVyr1saTVm4orG2TjYvbHQMddsWtHOvGYXZWAYMbw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-process": "3.468.0", @@ -359,8 +336,7 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.478.0.tgz", - "integrity": "sha512-nwDutJYeHiIZCQDgKIUrsgwAWTil0mNe+cbd+j8fi+wwxkWUzip+F0+z02molJ8WrUUKNRhqB1V5aVx7IranuA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-ini": "3.478.0", @@ -380,8 +356,7 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz", - "integrity": "sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -395,8 +370,7 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.478.0.tgz", - "integrity": "sha512-LsDShG51X/q+s5ZFN7kHVqrd8ZHdyEyHqdhoocmRvvw2Dif50M0AqQfvCrW1ndj5CNzXO4x/eH8EK5ZOVlS6Sg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.478.0", "@aws-sdk/token-providers": "3.478.0", @@ -412,8 +386,7 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz", - "integrity": "sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -426,8 +399,7 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz", - "integrity": "sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -440,8 +412,7 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz", - "integrity": "sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -453,8 +424,7 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz", - "integrity": "sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -467,8 +437,7 @@ }, "node_modules/@aws-sdk/middleware-signing": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz", - "integrity": "sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -484,8 +453,7 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz", - "integrity": "sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@aws-sdk/util-endpoints": "3.478.0", @@ -499,8 +467,7 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.470.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.470.0.tgz", - "integrity": "sha512-C1o1J06iIw8cyAAOvHqT4Bbqf+PgQ/RDlSyjt2gFfP2OovDpc2o2S90dE8f8iZdSGpg70N5MikT1DBhW9NbhtQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.8", "@smithy/types": "^2.7.0", @@ -514,8 +481,7 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.478.0.tgz", - "integrity": "sha512-7b5tj1y/wGHZIZ+ckjOUKgKrMuCJMF/G1UKZKIqqdekeEsjcThbvoxAMeY0FEowu2ODVk/ggOmpBFxcu0iYd6A==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -561,8 +527,7 @@ }, "node_modules/@aws-sdk/types": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.468.0.tgz", - "integrity": "sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.7.0", "tslib": "^2.5.0" @@ -573,8 +538,7 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz", - "integrity": "sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/util-endpoints": "^1.0.7", @@ -586,8 +550,7 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.465.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz", - "integrity": "sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -597,8 +560,7 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz", - "integrity": "sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -608,8 +570,7 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.470.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz", - "integrity": "sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/node-config-provider": "^2.1.8", @@ -630,17 +591,15 @@ }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.3.1" } }, "node_modules/@babel/code-frame": { "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -651,18 +610,16 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -674,14 +631,12 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@decentralized-identity/ion-pow-sdk": { "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-pow-sdk/-/ion-pow-sdk-1.0.17.tgz", - "integrity": "sha512-vk7DTDM8aKDbFyu1ad/qkoRrGL4q+KvNeL/FNZXhkWPaDhVExBN/qGEoRLf1YSfFe+myto3+4RYTPut+riiqnw==", + "license": "apache-2.0", "dependencies": { "buffer": "6.0.3", "cross-fetch": "3.1.5", @@ -690,8 +645,7 @@ }, "node_modules/@decentralized-identity/ion-sdk": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-sdk/-/ion-sdk-1.0.1.tgz", - "integrity": "sha512-+P+DXcRSFjsEsI5KIqUmVjpzgUT28B2lWpTO+IxiBcfibAN/1Sg20NebGTO/+serz2CnSZf95N2a1OZ6eXypGQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ed25519": "^2.0.0", "@noble/secp256k1": "^2.0.0", @@ -703,69 +657,19 @@ }, "node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", - "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", - "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", - "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", - "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -774,299 +678,10 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", - "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", - "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", - "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", - "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", - "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", - "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", - "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", - "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", - "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", - "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", - "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", - "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", - "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", - "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", - "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", - "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", - "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", - "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -1079,18 +694,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1111,9 +724,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1127,9 +739,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1137,15 +748,13 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1155,18 +764,16 @@ }, "node_modules/@eslint/js": { "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.11.13", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -1178,9 +785,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1188,9 +794,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1200,9 +805,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1212,15 +816,13 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "version": "2.0.1", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@ipld/dag-cbor": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.3.tgz", - "integrity": "sha512-A2UFccS0+sARK9xwXiVZIaWbLbPxLGP3UZOjBeOMWfDY04SXi8h1+t4rHBzOlKYF/yWNm3RbFLyclWO7hZcy4g==", + "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^2.0.1", "multiformats": "^12.0.1" @@ -1232,8 +834,7 @@ }, "node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -1241,8 +842,7 @@ }, "node_modules/@ipld/dag-pb": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.8.tgz", - "integrity": "sha512-693AqMY2jvhe+w4jSwjnDrbhxIu39gm1H4f6/KD5gG+6VFMM6EXV7vq85BvEf8CRsnA0+auWfA29/S8gbWI0Ew==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" }, @@ -1253,14 +853,12 @@ }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1275,9 +873,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1287,9 +884,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1302,18 +898,16 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -1326,18 +920,16 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.0.0" @@ -1345,9 +937,8 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -1356,15 +947,13 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1372,8 +961,7 @@ }, "node_modules/@js-temporal/polyfill": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.4.4.tgz", - "integrity": "sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==", + "license": "ISC", "dependencies": { "jsbi": "^4.3.0", "tslib": "^2.4.1" @@ -1384,18 +972,15 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "license": "MIT" }, "node_modules/@multiformats/base-x": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" + "license": "MIT" }, "node_modules/@multiformats/murmur3": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.1.8.tgz", - "integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0", "murmurhash3js-revisited": "^3.0.0" @@ -1407,21 +992,18 @@ }, "node_modules/@multiformats/murmur3/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/@noble/ciphers": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", - "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.3" }, @@ -1431,19 +1013,17 @@ }, "node_modules/@noble/ed25519": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-2.0.0.tgz", - "integrity": "sha512-/extjhkwFupyopDrt80OMWKdLgP429qLZj+z6sYJz90rF2Iz0gjZh2ArMKPImUl13Kx+0EXI2hN9T/KJV0/Zng==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@noble/hashes": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -1453,20 +1033,18 @@ }, "node_modules/@noble/secp256k1": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", - "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1477,18 +1055,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1499,9 +1075,8 @@ }, "node_modules/@npmcli/git": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", - "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", @@ -1518,9 +1093,8 @@ }, "node_modules/@npmcli/package-json": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -1536,9 +1110,8 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", - "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "dev": true, + "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -1548,9 +1121,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1558,9 +1130,8 @@ }, "node_modules/@playwright/test": { "version": "1.40.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", - "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright": "1.40.1" }, @@ -1573,9 +1144,8 @@ }, "node_modules/@puppeteer/browsers": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -1602,15 +1172,13 @@ }, "node_modules/@puppeteer/browsers/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@puppeteer/browsers/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1622,9 +1190,8 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-fs": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -1633,9 +1200,8 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -1644,9 +1210,8 @@ }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1662,9 +1227,8 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1687,9 +1251,8 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1707,198 +1270,38 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", - "integrity": "sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz", - "integrity": "sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz", - "integrity": "sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz", - "integrity": "sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz", - "integrity": "sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz", - "integrity": "sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz", - "integrity": "sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz", - "integrity": "sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz", - "integrity": "sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz", - "integrity": "sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz", - "integrity": "sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz", - "integrity": "sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz", - "integrity": "sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" + "darwin" ] }, "node_modules/@sinonjs/commons": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", @@ -1907,23 +1310,20 @@ }, "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true + "dev": true, + "license": "(Unlicense OR Apache-2.0)" }, "node_modules/@smithy/abort-controller": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.16.tgz", - "integrity": "sha512-4foO7738k8kM9flMHu3VLabqu7nPgvIj8TB909S0CnKx0YZz/dcDH3pZ/4JHdatfxlZdKF1JWOYCw9+v3HVVsw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -1934,8 +1334,7 @@ }, "node_modules/@smithy/config-resolver": { "version": "2.0.23", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.23.tgz", - "integrity": "sha512-XakUqgtP2YY8Mi+Nlif5BiqJgWdvfxJafSpOSQeCOMizu+PUhE4fBQSy6xFcR+eInrwVadaABNxoJyGUMn15ew==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.9", "@smithy/types": "^2.8.0", @@ -1949,8 +1348,7 @@ }, "node_modules/@smithy/core": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.2.2.tgz", - "integrity": "sha512-uLjrskLT+mWb0emTR5QaiAIxVEU7ndpptDaVDrTwwhD+RjvHhjIiGQ3YL5jKk1a5VSDQUA2RGkXvJ6XKRcz6Dg==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^2.3.0", "@smithy/middleware-retry": "^2.0.26", @@ -1967,8 +1365,7 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.5.tgz", - "integrity": "sha512-VfvE6Wg1MUWwpTZFBnUD7zxvPhLY8jlHCzu6bCjlIYoWgXCDzZAML76IlZUEf45nib3rjehnFgg0s1rgsuN/bg==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.9", "@smithy/property-provider": "^2.0.17", @@ -1982,8 +1379,7 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.16.tgz", - "integrity": "sha512-umYh5pdCE9GHgiMAH49zu9wXWZKNHHdKPm/lK22WYISTjqu29SepmpWNmPiBLy/yUu4HFEGJHIFrDWhbDlApaw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@smithy/types": "^2.8.0", @@ -1993,8 +1389,7 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.2.tgz", - "integrity": "sha512-O9R/OlnAOTsnysuSDjt0v2q6DcSvCz5cCFC/CFAWWcLyBwJDeFyGTCTszgpQTb19+Fi8uRwZE5/3ziAQBFeDMQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^3.0.12", "@smithy/querystring-builder": "^2.0.16", @@ -2005,8 +1400,7 @@ }, "node_modules/@smithy/hash-node": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.18.tgz", - "integrity": "sha512-gN2JFvAgnZCyDN9rJgcejfpK0uPPJrSortVVVVWsru9whS7eQey6+gj2eM5ln2i6rHNntIXzal1Fm9XOPuoaKA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "@smithy/util-buffer-from": "^2.0.0", @@ -2019,8 +1413,7 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.16.tgz", - "integrity": "sha512-apEHakT/kmpNo1VFHP4W/cjfeP9U0x5qvfsLJubgp7UM/gq4qYp0GbqdE7QhsjUaYvEnrftRqs7+YrtWreV0wA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2028,8 +1421,7 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2039,8 +1431,7 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.18.tgz", - "integrity": "sha512-ZJ9uKPTfxYheTKSKYB+GCvcj+izw9WGzRLhjn8n254q0jWLojUzn7Vw0l4R/Gq7Wdpf/qmk/ptD+6CCXHNVCaw==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^3.0.12", "@smithy/types": "^2.8.0", @@ -2052,8 +1443,7 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.3.0.tgz", - "integrity": "sha512-VsOAG2YQ8ykjSmKO+CIXdJBIWFo6AAvG6Iw95BakBTqk66/4BI7XyqLevoNSq/lZ6NgZv24sLmrcIN+fLDWBCg==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^2.0.16", "@smithy/node-config-provider": "^2.1.9", @@ -2069,8 +1459,7 @@ }, "node_modules/@smithy/middleware-retry": { "version": "2.0.26", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.26.tgz", - "integrity": "sha512-Qzpxo0U5jfNiq9iD38U3e2bheXwvTEX4eue9xruIvEgh+UKq6dKuGqcB66oBDV7TD/mfoJi9Q/VmaiqwWbEp7A==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.9", "@smithy/protocol-http": "^3.0.12", @@ -2088,8 +1477,7 @@ }, "node_modules/@smithy/middleware-serde": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.16.tgz", - "integrity": "sha512-5EAd4t30pcc4M8TSSGq7q/x5IKrxfXR5+SrU4bgxNy7RPHQo2PSWBUco9C+D9Tfqp/JZvprRpK42dnupZafk2g==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2100,8 +1488,7 @@ }, "node_modules/@smithy/middleware-stack": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.10.tgz", - "integrity": "sha512-I2rbxctNq9FAPPEcuA1ntZxkTKOPQFy7YBPOaD/MLg1zCvzv21CoNxR0py6J8ZVC35l4qE4nhxB0f7TF5/+Ldw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2112,8 +1499,7 @@ }, "node_modules/@smithy/node-config-provider": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.9.tgz", - "integrity": "sha512-tUyW/9xrRy+s7RXkmQhgYkAPMpTIF8izK4orhHjNFEKR3QZiOCbWB546Y8iB/Fpbm3O9+q0Af9rpywLKJOwtaQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^2.0.17", "@smithy/shared-ini-file-loader": "^2.2.8", @@ -2126,8 +1512,7 @@ }, "node_modules/@smithy/node-http-handler": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.2.tgz", - "integrity": "sha512-XO58TO/Eul/IBQKFKaaBtXJi0ItEQQCT+NI4IiKHCY/4KtqaUT6y/wC1EvDqlA9cP7Dyjdj7FdPs4DyynH3u7g==", + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^2.0.16", "@smithy/protocol-http": "^3.0.12", @@ -2141,8 +1526,7 @@ }, "node_modules/@smithy/property-provider": { "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.17.tgz", - "integrity": "sha512-+VkeZbVu7qtQ2DjI48Qwaf9fPOr3gZIwxQpuLJgRRSkWsdSvmaTCxI3gzRFKePB63Ts9r4yjn4HkxSCSkdWmcQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2153,8 +1537,7 @@ }, "node_modules/@smithy/protocol-http": { "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.12.tgz", - "integrity": "sha512-Xz4iaqLiaBfbQpB9Hgi3VcZYbP7xRDXYhd8XWChh4v94uw7qwmvlxdU5yxzfm6ACJM66phHrTbS5TVvj5uQ72w==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2165,8 +1548,7 @@ }, "node_modules/@smithy/querystring-builder": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.16.tgz", - "integrity": "sha512-Q/GsJT0C0mijXMRs7YhZLLCP5FcuC4797lYjKQkME5CZohnLC4bEhylAd2QcD3gbMKNjCw8+T2I27WKiV/wToA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "@smithy/util-uri-escape": "^2.0.0", @@ -2178,8 +1560,7 @@ }, "node_modules/@smithy/querystring-parser": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.16.tgz", - "integrity": "sha512-c4ueAuL6BDYKWpkubjrQthZKoC3L5kql5O++ovekNxiexRXTlLIVlCR4q3KziOktLIw66EU9SQljPXd/oN6Okg==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2190,8 +1571,7 @@ }, "node_modules/@smithy/service-error-classification": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.9.tgz", - "integrity": "sha512-0K+8GvtwI7VkGmmInPydM2XZyBfIqLIbfR7mDQ+oPiz8mIinuHbV6sxOLdvX1Jv/myk7XTK9orgt3tuEpBu/zg==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0" }, @@ -2201,8 +1581,7 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.8.tgz", - "integrity": "sha512-E62byatbwSWrtq9RJ7xN40tqrRKDGrEL4EluyNpaIDvfvet06a/QC58oHw2FgVaEgkj0tXZPjZaKrhPfpoU0qw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2213,8 +1592,7 @@ }, "node_modules/@smithy/signature-v4": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.19.tgz", - "integrity": "sha512-nwc3JihdM+kcJjtORv/n7qRHN2Kfh7S2RJI2qr8pz9UcY5TD8rSCRGQ0g81HgyS3jZ5X9U/L4p014P3FonBPhg==", + "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-codec": "^2.0.16", "@smithy/is-array-buffer": "^2.0.0", @@ -2231,8 +1609,7 @@ }, "node_modules/@smithy/smithy-client": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.1.tgz", - "integrity": "sha512-SpD7FLK92XV2fon2hMotaNDa2w5VAy5/uVjP9WFmjGSgWM8pTPVkHcDl1yFs5Z8LYbij0FSz+DbCBK6i+uXXUA==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^2.3.0", "@smithy/middleware-stack": "^2.0.10", @@ -2247,8 +1624,7 @@ }, "node_modules/@smithy/types": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", - "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2258,8 +1634,7 @@ }, "node_modules/@smithy/url-parser": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.16.tgz", - "integrity": "sha512-Wfz5WqAoRT91TjRy1JeLR0fXtkIXHGsMbgzKFTx7E68SrZ55TB8xoG+vm11Ru4gheFTMXjAjwAxv1jQdC+pAQA==", + "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^2.0.16", "@smithy/types": "^2.8.0", @@ -2268,8 +1643,7 @@ }, "node_modules/@smithy/util-base64": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", - "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -2280,16 +1654,14 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.1.tgz", - "integrity": "sha512-NXYp3ttgUlwkaug4bjBzJ5+yIbUbUx8VsSLuHZROQpoik+gRkIBeEG9MPVYfvPNpuXb/puqodeeUXcKFe7BLOQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/util-body-length-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2299,8 +1671,7 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.0.0", "tslib": "^2.5.0" @@ -2311,8 +1682,7 @@ }, "node_modules/@smithy/util-config-provider": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.1.0.tgz", - "integrity": "sha512-S6V0JvvhQgFSGLcJeT1CBsaTR03MM8qTuxMH9WPCCddlSo2W0V5jIHimHtIQALMLEDPGQ0ROSRr/dU0O+mxiQg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2322,8 +1692,7 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.24.tgz", - "integrity": "sha512-TsP5mBuLgO2C21+laNG2nHYZEyUdkbGURv2tHvSuQQxLz952MegX95uwdxOY2jR2H4GoKuVRfdJq7w4eIjGYeg==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^2.0.17", "@smithy/smithy-client": "^2.2.1", @@ -2337,8 +1706,7 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "2.0.32", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.32.tgz", - "integrity": "sha512-d0S33dXA2cq1NyorVMroMrEtqKMr3MlyLITcfTBf9pXiigYiPMOtbSI7czHIfDbuVuM89Cg0urAgpt73QV9mPQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^2.0.23", "@smithy/credential-provider-imds": "^2.1.5", @@ -2354,8 +1722,7 @@ }, "node_modules/@smithy/util-endpoints": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.8.tgz", - "integrity": "sha512-l8zVuyZZ61IzZBYp5NWvsAhbaAjYkt0xg9R4xUASkg5SEeTT2meHOJwJHctKMFUXe4QZbn9fR2MaBYjP2119+w==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.9", "@smithy/types": "^2.8.0", @@ -2367,8 +1734,7 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2378,8 +1744,7 @@ }, "node_modules/@smithy/util-middleware": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.9.tgz", - "integrity": "sha512-PnCnBJ07noMX1lMDTEefmxSlusWJUiLfrme++MfK5TD0xz8NYmakgoXy5zkF/16zKGmiwOeKAztWT/Vjk1KRIQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.8.0", "tslib": "^2.5.0" @@ -2390,8 +1755,7 @@ }, "node_modules/@smithy/util-retry": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.9.tgz", - "integrity": "sha512-46BFWe9RqB6g7f4mxm3W3HlqknqQQmWHKlhoqSFZuGNuiDU5KqmpebMbvC3tjTlUkqn4xa2Z7s3Hwb0HNs5scw==", + "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^2.0.9", "@smithy/types": "^2.8.0", @@ -2403,8 +1767,7 @@ }, "node_modules/@smithy/util-stream": { "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.24.tgz", - "integrity": "sha512-hRpbcRrOxDriMVmbya+Mv77VZVupxRAsfxVDKS54XuiURhdiwCUXJP0X1iJhHinuUf6n8pBF0MkG9C8VooMnWw==", + "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^2.3.2", "@smithy/node-http-handler": "^2.2.2", @@ -2421,8 +1784,7 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2432,8 +1794,7 @@ }, "node_modules/@smithy/util-utf8": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", - "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -2444,8 +1805,7 @@ }, "node_modules/@sphereon/pex": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sphereon/pex/-/pex-2.1.0.tgz", - "integrity": "sha512-108iEqbu6D421pK9Q6bq4wnWcL8V+fEtw4Ry6NhBidIlDHuJehdLM8Z70A/axgNYMB1C0smMDYt1Xur/ROLwvQ==", + "license": "Apache-2.0", "dependencies": { "@astronautlabs/jsonpath": "^1.1.2", "@sphereon/pex-models": "^2.0.3", @@ -2462,21 +1822,18 @@ }, "node_modules/@sphereon/pex-models": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.1.2.tgz", - "integrity": "sha512-Ec1qZl8tuPd+s6E+ZM7v+HkGkSOjGDMLNN1kqaxAfWpITBYtTLb+d5YvwjvBZ1P2upZ7zwNER97FfW5n/30y2w==" + "license": "Apache-2.0" }, "node_modules/@sphereon/ssi-types": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.13.0.tgz", - "integrity": "sha512-THzkvgY6AN4/0INgGowinzOFX6NeUQJ/KmAcXrBXx2Rny5v5wCp7LhBIlK21KF2/76fbiCyJvwcd/+Yeb0fjwQ==", + "license": "Apache-2.0", "dependencies": { "jwt-decode": "^3.1.2" } }, "node_modules/@tbd54566975/dwn-sdk-js": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sdk-js/-/dwn-sdk-js-0.2.10.tgz", - "integrity": "sha512-CoKO8+NciwWNzD4xRoAAgeElqQCXKM4Fc+zEHsUWD0M3E9v67hRWiTHI6AenUfQv1RSEB2H4GHUeUOHuEV72uw==", + "version": "0.2.8", + "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "9.0.3", "@js-temporal/polyfill": "0.4.4", @@ -2508,24 +1865,21 @@ }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/cross-fetch": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/lru-cache": { "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2543,28 +1897,24 @@ }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/@tbd54566975/dwn-sql-store": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sql-store/-/dwn-sql-store-0.2.6.tgz", - "integrity": "sha512-N5SSyKGgHoW7ttWW6xrPq4xK7aYfxDvrmXdYEi+eA3qlT+Wzi5HZfrlcSnFIHee9+s56V6WpJw1AQ6XmjZH2QQ==", + "version": "0.2.4", "dev": true, + "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "^9.0.5", "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -2578,9 +1928,8 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor": { "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.8.tgz", - "integrity": "sha512-ETWJ7p7lmGw5X+BuI/7rf4/k56xyOvAOVNUVuQmnGYBdJjObLPgS+vyFxRk4odATlkyZqCq2MLNY52bhE6SlRA==", "dev": true, + "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^4.0.0", "multiformats": "^13.0.0" @@ -2592,24 +1941,21 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==", - "dev": true + "dev": true, + "license": "Apache-2.0 OR MIT" }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/cborg": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.7.tgz", - "integrity": "sha512-5h2n7973T4dkY2XLfHpwYR9IjeDSfolZibYtb8clW53BvvgTyq+X2EtwrjfhTAETrwaQOX4+lRua14/XjbZHaQ==", "dev": true, + "license": "Apache-2.0", "bin": { "cborg": "lib/bin.js" } }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/multiformats": { "version": "12.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.0.1.tgz", - "integrity": "sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==", "dev": true, + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -2617,30 +1963,26 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/babel__code-frame": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz", - "integrity": "sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2648,24 +1990,21 @@ }, "node_modules/@types/chai": { "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/chai-as-promised": { "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "*" } }, "node_modules/@types/co-body": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.3.tgz", - "integrity": "sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*" @@ -2673,36 +2012,31 @@ }, "node_modules/@types/command-line-args": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/content-disposition": { "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", - "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/convert-source-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-2.0.3.tgz", - "integrity": "sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cookies": { "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.10.tgz", - "integrity": "sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -2712,24 +2046,21 @@ }, "node_modules/@types/debounce": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.4.tgz", - "integrity": "sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/dns-packet": { "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.4.tgz", - "integrity": "sha512-R0ORTvCCeujG+upKfV4JlvozKLdQWlpsducXGd1L6ezBChwpjSj9K84F+KoMDsZQ9RhOLTR1hnNrwJHWagY24g==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2737,9 +2068,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/eslint": "*", @@ -2748,15 +2078,13 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2766,9 +2094,8 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2778,57 +2105,49 @@ }, "node_modules/@types/http-assert": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", - "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keygrip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", - "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/koa": { "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", - "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", "dev": true, + "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -2842,63 +2161,54 @@ }, "node_modules/@types/koa-compose": { "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", - "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.10.8", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/parse5": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/readable-stream": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.6.tgz", - "integrity": "sha512-awa7+N1SSD9xz8ZvEUSO3/N3itc2PMH6Sca11HiX55TVsWiMaIgmbM76lN+2eZOrCQPiFqj0GmgsfsNtNGWoUw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -2906,21 +2216,18 @@ }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2928,9 +2235,8 @@ }, "node_modules/@types/serve-static": { "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -2939,33 +2245,29 @@ }, "node_modules/@types/sinon": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", - "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", "dev": true, + "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -2973,9 +2275,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", - "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.4.0", @@ -3008,11 +2309,14 @@ }, "node_modules/@typescript-eslint/parser": { "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", - "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "@typescript-eslint/scope-manager": "6.18.1", "@typescript-eslint/types": "6.18.1", "@typescript-eslint/typescript-estree": "6.18.1", @@ -3037,13 +2341,14 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", - "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/types": "6.18.1", "@typescript-eslint/visitor-keys": "6.18.1" + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3055,11 +2360,11 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", - "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { + "@typescript-eslint/types": "6.18.1", "@typescript-eslint/types": "6.18.1", "eslint-visitor-keys": "^3.4.1" }, @@ -3073,9 +2378,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", - "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0" @@ -3090,9 +2394,8 @@ }, "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3103,9 +2406,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", - "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.4.0", "@typescript-eslint/utils": "6.4.0", @@ -3130,9 +2432,8 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3143,9 +2444,8 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -3170,9 +2470,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", - "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3184,11 +2483,12 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", - "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "@typescript-eslint/types": "6.18.1", "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4", @@ -3213,11 +2513,11 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", - "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { + "@typescript-eslint/types": "6.18.1", "@typescript-eslint/types": "6.18.1", "eslint-visitor-keys": "^3.4.1" }, @@ -3231,9 +2531,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", - "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -3256,9 +2555,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3269,9 +2567,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -3296,9 +2593,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", - "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "eslint-visitor-keys": "^3.4.1" @@ -3313,9 +2609,8 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3326,16 +2621,14 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/@web/browser-logs": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", - "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", "dev": true, + "license": "MIT", "dependencies": { "errorstacks": "^2.2.0" }, @@ -3345,18 +2638,16 @@ }, "node_modules/@web/config-loader": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.3.1.tgz", - "integrity": "sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/@web/dev-server": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.4.1.tgz", - "integrity": "sha512-GHeyH8MBZQpODFiHiXAdX4hOVbeDyD/DUermUinh/nexWAZUcXyXa200RItuAL6b25MQ3D/5hKNDypujSvXxiw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", @@ -3383,9 +2674,8 @@ }, "node_modules/@web/dev-server-core": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", - "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", @@ -3412,18 +2702,16 @@ }, "node_modules/@web/dev-server-core/node_modules/lru-cache": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/dev-server-rollup": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.1.tgz", - "integrity": "sha512-vhtsQ8qu1pBHailOBOYJwZnYDc1Lmx6ZAd2j+y5PD2ck0R1LmVsZ7dZK8hDCpkvpvlu2ndURjL9tbzdcsBRJmg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.0", @@ -3438,9 +2726,8 @@ }, "node_modules/@web/parse5-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz", - "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse5": "^6.0.1", "parse5": "^6.0.1" @@ -3451,9 +2738,8 @@ }, "node_modules/@web/test-runner": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.0.tgz", - "integrity": "sha512-aAlQrdSqwCie1mxuSK5kM0RYDJZL4Q0Hd5LeXn1on3OtHLtgztL4dZzzNSuAWablR2/Vuve3ChwDDxmYSTqXRg==", "dev": true, + "license": "MIT", "dependencies": { "@web/browser-logs": "^0.4.0", "@web/config-loader": "^0.3.0", @@ -3482,9 +2768,8 @@ }, "node_modules/@web/test-runner-chrome": { "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.15.0.tgz", - "integrity": "sha512-ZqkTJGQ57FDz3lWw+9CKfHuTV64S9GzBy5+0siSQulEVPfGiTzpksx9DohtA3BCLXdbEq4OHg40/XIQJomlc9w==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -3498,9 +2783,8 @@ }, "node_modules/@web/test-runner-commands": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", - "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "mkdirp": "^1.0.4" @@ -3511,9 +2795,8 @@ }, "node_modules/@web/test-runner-core": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", - "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/babel__code-frame": "^7.0.2", @@ -3548,9 +2831,8 @@ }, "node_modules/@web/test-runner-coverage-v8": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz", - "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "istanbul-lib-coverage": "^3.0.0", @@ -3564,18 +2846,16 @@ }, "node_modules/@web/test-runner-coverage-v8/node_modules/lru-cache": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/test-runner-mocha": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz", - "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0" }, @@ -3585,9 +2865,8 @@ }, "node_modules/@web/test-runner-playwright": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz", - "integrity": "sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -3626,9 +2905,7 @@ "link": true }, "node_modules/@web5/dwn-server": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@web5/dwn-server/-/dwn-server-0.1.9.tgz", - "integrity": "sha512-t1xpWGQ+hbIglu0OjZS3DG6Q8pmrxK2TmPo53YaxNpceKNT9tkqJqgssiIJzVWiQS90BmR/JULchKR/aQX1sOg==", + "version": "0.1.7", "dev": true, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -3656,18 +2933,16 @@ }, "node_modules/@web5/dwn-server/node_modules/uuid": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@web5/dwn-server/node_modules/ws": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -3698,9 +2973,8 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -3709,30 +2983,26 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -3742,16 +3012,14 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3762,9 +3030,8 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -3772,9 +3039,8 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" @@ -3782,16 +3048,14 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3806,9 +3070,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3820,9 +3083,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3833,9 +3095,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3848,9 +3109,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3859,29 +3119,24 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, + "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, + "license": "Apache-2.0", "peer": true }, "node_modules/abab": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3891,8 +3146,7 @@ }, "node_modules/abstract-level": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -3908,9 +3162,8 @@ }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3921,9 +3174,8 @@ }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3933,9 +3185,8 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^8" @@ -3943,18 +3194,16 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -3964,8 +3213,7 @@ }, "node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3979,8 +3227,7 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -3995,18 +3242,16 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4019,9 +3264,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4031,18 +3275,16 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -4052,9 +3294,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4065,23 +3306,20 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-back": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -4092,23 +3330,20 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -4127,9 +3362,8 @@ }, "node_modules/asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -4139,15 +3373,13 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/assert": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -4158,18 +3390,16 @@ }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/ast-types": { "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -4179,35 +3409,31 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-mutex": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", - "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4217,27 +3443,22 @@ }, "node_modules/b4a": { "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + "license": "ISC" }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-arraybuffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4251,21 +3472,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/basic-ftp": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/bencode": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-3.1.1.tgz", - "integrity": "sha512-btsxX9201yoWh45TdqYg6+OZ5O1xTYKTYSGvJndICDFtznE/9zXgow8yjMvvhOqKKuzuL7h+iiCMpfkG8+QuBA==", + "license": "MIT", "dependencies": { "uint8-util": "^2.1.6" }, @@ -4275,10 +3495,9 @@ }, "node_modules/better-sqlite3": { "version": "8.7.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.7.0.tgz", - "integrity": "sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" @@ -4286,32 +3505,27 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/bindings": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bintrees": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bittorrent-dht": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-11.0.5.tgz", - "integrity": "sha512-R09D6uNaziRqsc+B/j5QzkjceTak+wH9vcNLnkmt8A52EWF9lQwBP0vvCKgSA3AJOYYl+41n3osA2KYYn/z5uQ==", "funding": [ { "type": "github", @@ -4326,6 +3540,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "bencode": "^4.0.0", "debug": "^4.3.4", @@ -4342,8 +3557,7 @@ }, "node_modules/bittorrent-dht/node_modules/bencode": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", - "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", + "license": "MIT", "dependencies": { "uint8-util": "^2.2.2" }, @@ -4353,8 +3567,7 @@ }, "node_modules/bl": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -4363,8 +3576,7 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4376,8 +3588,7 @@ }, "node_modules/blake2b": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", - "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", + "license": "ISC", "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" @@ -4385,8 +3596,7 @@ }, "node_modules/blake2b-wasm": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", - "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", + "license": "MIT", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -4394,8 +3604,7 @@ }, "node_modules/blockstore-core": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/blockstore-core/-/blockstore-core-4.2.0.tgz", - "integrity": "sha512-F8BCobc75D+9/+hUD+5cixbU6zmZA+lBgNiuBkNlJqRgmAaBBvLOQF6Ad9Jei0Nvmy2a1jaF4CiN76W1apIghA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "err-code": "^3.0.1", "interface-blockstore": "^5.0.0", @@ -4409,15 +3618,13 @@ }, "node_modules/bn.js": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -4439,24 +3646,21 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser/node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -4469,9 +3673,8 @@ }, "node_modules/body-parser/node_modules/raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -4484,23 +3687,20 @@ }, "node_modules/bowser": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -4510,14 +3710,12 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browser-level": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.1", @@ -4527,24 +3725,21 @@ }, "node_modules/browser-resolve": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.17.0" } }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4556,9 +3751,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -4567,9 +3761,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -4579,9 +3772,8 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -4589,9 +3781,8 @@ }, "node_modules/browserify-sign": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, + "license": "ISC", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -4609,9 +3800,8 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4623,8 +3813,6 @@ }, "node_modules/browserify-sign/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -4639,21 +3827,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, + "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -4669,6 +3855,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001565", @@ -4685,8 +3872,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -4701,6 +3886,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -4708,40 +3894,35 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/buffer-writer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -4751,42 +3932,38 @@ }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtins": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/c8": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/c8/-/c8-8.0.1.tgz", - "integrity": "sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.0.0.tgz", + "integrity": "sha512-nFJhU2Cz6Frh2awk3IW7wwk3wx27/U2v8ojQCHGc1GWTCHS6aMu4lal327/ZnnYj7oSThGF1X3qUP1yzAJBcOQ==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", - "foreground-child": "^2.0.0", + "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", - "rimraf": "^3.0.2", "test-exclude": "^6.0.0", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", @@ -4796,71 +3973,13 @@ "c8": "bin/c8.js" }, "engines": { - "node": ">=12" - } - }, - "node_modules/c8/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/c8/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/c8/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/c8/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=14.14.0" } }, "node_modules/cache-content-type": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -4871,8 +3990,7 @@ }, "node_modules/call-bind": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", @@ -4884,18 +4002,16 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4905,8 +4021,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true, "funding": [ { @@ -4922,42 +4036,38 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "CC-BY-4.0", "peer": true }, "node_modules/canonicalize": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", - "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" + "license": "Apache-2.0" }, "node_modules/catering": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cborg": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-2.0.5.tgz", - "integrity": "sha512-xVW1rSIw1ZXbkwl2XhJ7o/jAv0vnVoQv/QlfQxV8a7V5PlA4UU/AcIiXqmpyybwNWy/GPQU1m/aBVNIWr7/T0w==", + "license": "Apache-2.0", "bin": { "cborg": "cli.js" } }, "node_modules/chacha20-universal": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chacha20-universal/-/chacha20-universal-1.0.4.tgz", - "integrity": "sha512-/IOxdWWNa7nRabfe7+oF+jVkGjlr2xUL4J8l/OvzZhj+c9RpMqoo3Dq+5nU1j/BflRV4BKnaQ4+4oH1yBpQG1Q==", + "license": "ISC", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/chai": { "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -4973,9 +4083,8 @@ }, "node_modules/chai-as-promised": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, + "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -4985,9 +4094,8 @@ }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4999,9 +4107,8 @@ }, "node_modules/chalk-template": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -5014,9 +4121,8 @@ }, "node_modules/chalk-template/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5029,9 +4135,8 @@ }, "node_modules/chalk-template/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5045,9 +4150,8 @@ }, "node_modules/chalk-template/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5057,24 +4161,21 @@ }, "node_modules/chalk-template/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/chalk-template/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/chalk-template/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5084,18 +4185,16 @@ }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/check-error": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -5105,8 +4204,6 @@ }, "node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -5114,6 +4211,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5132,14 +4230,11 @@ }, "node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/chrome-dgram": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.6.tgz", - "integrity": "sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==", "funding": [ { "type": "github", @@ -5154,6 +4249,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "run-series": "^1.1.9" @@ -5161,17 +4257,15 @@ }, "node_modules/chrome-dns": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chrome-dns/-/chrome-dns-1.0.1.tgz", - "integrity": "sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==", + "license": "MIT", "dependencies": { "chrome-net": "^3.3.2" } }, "node_modules/chrome-launcher": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -5187,9 +4281,8 @@ }, "node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5199,8 +4292,6 @@ }, "node_modules/chrome-net": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/chrome-net/-/chrome-net-3.3.4.tgz", - "integrity": "sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==", "funding": [ { "type": "github", @@ -5215,15 +4306,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "inherits": "^2.0.1" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.0" @@ -5231,9 +4322,8 @@ }, "node_modules/chromium-bidi": { "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mitt": "3.0.0" }, @@ -5243,9 +4333,8 @@ }, "node_modules/cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5253,9 +4342,8 @@ }, "node_modules/classic-level": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", - "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", @@ -5269,9 +4357,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5281,9 +4368,8 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5295,9 +4381,8 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5310,9 +4395,8 @@ }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5322,21 +4406,18 @@ }, "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5348,9 +4429,8 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5365,18 +4445,16 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -5384,9 +4462,8 @@ }, "node_modules/co-body": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", "dev": true, + "license": "MIT", "dependencies": { "inflation": "^2.0.0", "qs": "^6.5.2", @@ -5396,24 +4473,21 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/command-line-args": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -5426,9 +4500,8 @@ }, "node_modules/command-line-usage": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -5441,52 +4514,44 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -5496,8 +4561,6 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -5512,43 +4575,39 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookies": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -5559,9 +4618,8 @@ }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -5572,9 +4630,8 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -5582,15 +4639,13 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5601,9 +4656,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5615,22 +4669,19 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-fetch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "license": "MIT", "dependencies": { "node-fetch": "2.6.7" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5648,18 +4699,15 @@ }, "node_modules/cross-fetch/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/cross-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/cross-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -5667,9 +4715,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5681,15 +4728,13 @@ }, "node_modules/cross-spawn/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5702,18 +4747,16 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, + "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -5733,23 +4776,20 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -5764,14 +4804,12 @@ }, "node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "license": "MIT" }, "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5781,9 +4819,8 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -5796,9 +4833,8 @@ }, "node_modules/deep-eql": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, + "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -5808,37 +4844,32 @@ }, "node_modules/deep-equal": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/define-data-property": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -5850,17 +4881,15 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5875,9 +4904,8 @@ }, "node_modules/degenerator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -5889,42 +4917,37 @@ }, "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/denque": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-graph": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/des.js": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -5932,9 +4955,8 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -5942,38 +4964,33 @@ }, "node_modules/detect-libc": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/devtools-protocol": { "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/did-resolver": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" + "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -5982,15 +4999,13 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6000,8 +5015,7 @@ }, "node_modules/dns-packet": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6011,9 +5025,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6023,9 +5036,8 @@ }, "node_modules/domain-browser": { "version": "4.23.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", - "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", "dev": true, + "license": "Artistic-2.0", "engines": { "node": ">=10" }, @@ -6035,14 +5047,12 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eciesjs": { "version": "0.4.5", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.5.tgz", - "integrity": "sha512-2zSRIygO48LpdS95Rwt9ryIkJNO37IdbkjRsnYyAn7gx7e4WPBNimnk6jGNdx2QQYr/VJRPnSVdwQpO5bycYZw==", + "license": "MIT", "dependencies": { "@noble/ciphers": "^0.3.0", "@noble/curves": "^1.2.0", @@ -6054,30 +5064,26 @@ }, "node_modules/eciesjs/node_modules/@noble/ciphers": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.3.0.tgz", - "integrity": "sha512-ldbrnOjmNRwFdXcTM6uXDcxpMIFrbzAWNnpBPp4oTJTFF0XByGD6vf45WrehZGXRQTRVV+Zm8YP+EgEf+e4cWA==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.628", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.628.tgz", - "integrity": "sha512-2k7t5PHvLsufpP6Zwk0nof62yLOsCf032wZx7/q0mv8gwlXjhcxI3lz6f0jBr0GrnWKcm3burXzI3t5IrcdUxw==", + "version": "1.4.626", "dev": true, + "license": "ISC", "peer": true }, "node_modules/elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -6090,39 +5096,34 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -6134,19 +5135,16 @@ }, "node_modules/err-code": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + "license": "MIT" }, "node_modules/errorstacks": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz", - "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-abstract": { "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", @@ -6197,14 +5195,12 @@ }, "node_modules/es-module-lexer": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-set-tostringtag": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -6216,8 +5212,7 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -6232,10 +5227,9 @@ }, "node_modules/esbuild": { "version": "0.19.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", - "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -6269,33 +5263,29 @@ }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -6314,9 +5304,8 @@ }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -6324,9 +5313,8 @@ }, "node_modules/eslint": { "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -6380,9 +5368,8 @@ }, "node_modules/eslint-plugin-mocha": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz", - "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==", "dev": true, + "license": "MIT", "dependencies": { "eslint-utils": "^3.0.0", "rambda": "^7.1.0" @@ -6396,9 +5383,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6412,9 +5398,8 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -6430,18 +5415,16 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6451,9 +5434,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6468,9 +5450,8 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-convert": "^2.0.1" @@ -6484,9 +5465,8 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -6495,9 +5475,8 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -6512,9 +5491,8 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-name": "~1.1.4" @@ -6525,16 +5503,14 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -6545,9 +5521,8 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.3" @@ -6558,9 +5533,8 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -6568,16 +5542,14 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -6588,9 +5560,8 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -6601,9 +5572,8 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -6618,8 +5588,7 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6630,9 +5599,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6642,9 +5610,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6654,62 +5621,54 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6717,18 +5676,16 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, + "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/express": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -6768,24 +5725,21 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express/node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -6798,8 +5752,6 @@ }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -6814,13 +5766,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -6838,9 +5790,8 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -6853,20 +5804,17 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6880,19 +5828,15 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "license": "MIT" }, "node_modules/fast-xml-parser": { "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ { "type": "paypal", @@ -6903,6 +5847,7 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -6912,26 +5857,22 @@ }, "node_modules/fastq": { "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -6943,6 +5884,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -6953,9 +5895,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6965,15 +5906,13 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6983,9 +5922,8 @@ }, "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7001,24 +5939,21 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -7028,9 +5963,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7044,18 +5978,15 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -7067,9 +5998,8 @@ }, "node_modules/flat-cache/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7077,9 +6007,8 @@ }, "node_modules/flat-cache/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7097,9 +6026,8 @@ }, "node_modules/flat-cache/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7109,9 +6037,8 @@ }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7124,36 +6051,48 @@ }, "node_modules/flatted": { "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -7163,33 +6102,29 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -7201,16 +6136,13 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7221,16 +6153,14 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7246,43 +6176,38 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/generate-function": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "dev": true, + "license": "MIT", "dependencies": { "is-property": "^1.0.2" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", @@ -7295,9 +6220,8 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7307,8 +6231,7 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -7322,9 +6245,8 @@ }, "node_modules/get-uri": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.0", @@ -7337,24 +6259,21 @@ }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/glob": { "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -7374,9 +6293,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7386,44 +6304,14 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, + "license": "BSD-2-Clause", "peer": true }, - "node_modules/glob/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7436,8 +6324,7 @@ }, "node_modules/globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -7450,9 +6337,8 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7470,8 +6356,7 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -7481,28 +6366,24 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graceful-goodbye": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/graceful-goodbye/-/graceful-goodbye-1.3.0.tgz", - "integrity": "sha512-hcZOs20emYlTM7MmUE0FpuZcjlk2GPsR+UYTHDeWxtGjXcbh2CawGi8vlzqsIvspqAbot7mRv3sC/uhgtKc4hQ==", + "license": "MIT", "dependencies": { "safety-catch": "^1.0.2" } }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hamt-sharding": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.2.tgz", - "integrity": "sha512-f0DzBD2tSmLFdFsLAvOflIBqFPjerbA7BfmwO8mVho/5hXwgyyYhv+ijIzidQf/DpDX3bRjAQvhGoBFj+DBvPw==", + "license": "Apache-2.0 OR MIT", "dependencies": { "sparse-array": "^1.3.1", "uint8arrays": "^4.0.2" @@ -7514,25 +6395,22 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2" }, @@ -7542,8 +6420,7 @@ }, "node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7553,8 +6430,7 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7564,8 +6440,7 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7578,9 +6453,8 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -7592,9 +6466,8 @@ }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7606,8 +6479,6 @@ }, "node_modules/hash-base/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -7622,18 +6493,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/hash-wasm": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", - "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" + "license": "MIT" }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -7641,8 +6511,7 @@ }, "node_modules/hasown": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7652,18 +6521,16 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -7672,9 +6539,8 @@ }, "node_modules/hosted-git-info": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -7684,15 +6550,13 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, + "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -7703,18 +6567,16 @@ }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-assert/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7728,18 +6590,16 @@ }, "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7753,9 +6613,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -7766,15 +6625,13 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -7785,9 +6642,8 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7797,8 +6653,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -7812,22 +6666,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7841,27 +6694,24 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflation": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", - "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7869,19 +6719,16 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/interface-blockstore": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.2.3.tgz", - "integrity": "sha512-15cN+ZFdcVXdXo6I/SrSzFDsuJyDTyEI52XuvXQlR/G5fe3cK8p0tvVjfu5diRQH1XqNgmJEdMPixyt0xgjtvQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "interface-store": "^5.0.0", "multiformats": "^11.0.2" @@ -7893,8 +6740,7 @@ }, "node_modules/interface-store": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.2.tgz", - "integrity": "sha512-q2sLoqC+UdaWnjwGyghsH0jwqqVk226lsG207e3QwPB8sAZYmYIWUnJwJH3JjFNNRV9e6CUTmm+gDO0Xg4KRiw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -7902,8 +6748,7 @@ }, "node_modules/internal-slot": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", @@ -7915,23 +6760,20 @@ }, "node_modules/ip": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/ipfs-unixfs": { "version": "11.1.2", - "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.1.2.tgz", - "integrity": "sha512-HVjrACOhU8RgMskcrfydk+FDAE9pFKr8tneKLaVYQ2f81HUKXoiSdgsAJY/jt7Ieyj4tE12TZGduIeWtNpScOw==", + "license": "Apache-2.0 OR MIT", "dependencies": { "err-code": "^3.0.1", "protons-runtime": "^5.0.0", @@ -7944,8 +6786,7 @@ }, "node_modules/ipfs-unixfs-exporter": { "version": "13.1.5", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.1.5.tgz", - "integrity": "sha512-O5aMawsHoe4DaYk5FFil2EPrNOaU3pkHC6qUR5JMnW7es93W3b/RjJoO7AyDL1rpb+M3K0oRu86Yc5wLNQQ8jg==", + "license": "Apache-2.0 OR MIT", "dependencies": { "@ipld/dag-cbor": "^9.0.0", "@ipld/dag-pb": "^4.0.0", @@ -7972,8 +6813,7 @@ }, "node_modules/ipfs-unixfs-importer": { "version": "15.1.5", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.1.5.tgz", - "integrity": "sha512-TXaOI0M5KNpq2+qLw8AIYd0Lnc0gWTKCBqUd9eErBUwaP3Fna4qauF+JX9Rj2UrwaOvG/1xbF8Vm+92eOcKWMA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "@ipld/dag-pb": "^4.0.0", "@multiformats/murmur3": "^2.0.0", @@ -7999,9 +6839,8 @@ }, "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8015,8 +6854,7 @@ }, "node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -8028,8 +6866,7 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -8039,9 +6876,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -8051,8 +6887,7 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8066,8 +6901,6 @@ }, "node_modules/is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -8082,15 +6915,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -8103,8 +6936,7 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8114,9 +6946,8 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -8126,8 +6957,7 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8140,9 +6970,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -8155,27 +6984,24 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8188,9 +7014,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -8200,15 +7025,13 @@ }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -8222,8 +7045,7 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8233,17 +7055,15 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8256,32 +7076,28 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-property": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8295,8 +7111,7 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -8306,9 +7121,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -8318,8 +7132,7 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8332,8 +7145,7 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -8346,8 +7158,7 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -8360,9 +7171,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8372,8 +7182,7 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -8383,9 +7192,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -8395,14 +7203,12 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "license": "MIT" }, "node_modules/isbinaryfile": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", - "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.0.0" }, @@ -8412,36 +7218,32 @@ }, "node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", - "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -8453,18 +7255,16 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8474,9 +7274,8 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -8487,73 +7286,62 @@ }, "node_modules/it-all": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz", - "integrity": "sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-batch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.4.tgz", - "integrity": "sha512-WRu2mqOYIs+T9k7+yxSK9VJdk0UE4R0jKQsWQcti5c6vhb1FhjC2+yCB5XBrctQ9edNfCMU/wVzdDj8qSwimbA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-filter": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz", - "integrity": "sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-first": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", - "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-last": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.4.tgz", - "integrity": "sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-map": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz", - "integrity": "sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-merge": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz", - "integrity": "sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-pushable": "^3.2.0" } }, "node_modules/it-parallel": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.6.tgz", - "integrity": "sha512-i7UM7I9LTkDJw3YIqXHFAPZX6CWYzGc+X3irdNrVExI4vPazrJdI7t5OqrSVN8CONXLAunCiqaSV/zZRbQR56A==", + "license": "Apache-2.0 OR MIT", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-parallel-batch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.4.tgz", - "integrity": "sha512-O1omh8ss8+UtXiMjE+8kM5C20DT0Ma4VtKVfrSHOJU0UHZ+iWBXarabzPYEp+WiuQmrv+klDPPlTZ9KaLN9xOA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-batch": "^3.0.0" } }, "node_modules/it-peekable": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz", - "integrity": "sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-pipe": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", - "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-merge": "^3.0.0", "it-pushable": "^3.1.2", @@ -8566,16 +7354,14 @@ }, "node_modules/it-pushable": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", - "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "license": "Apache-2.0 OR MIT", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-stream-types": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", - "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -8583,9 +7369,8 @@ }, "node_modules/jackspeak": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -8601,9 +7386,8 @@ }, "node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -8616,9 +7400,8 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -8626,9 +7409,8 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -8642,15 +7424,13 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8660,67 +7440,57 @@ }, "node_modules/jsbi": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", - "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" + "license": "Apache-2.0" }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/just-extend": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jwt-decode": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + "license": "MIT" }, "node_modules/k-bucket": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", - "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", + "license": "MIT", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/k-rpc": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-5.1.0.tgz", - "integrity": "sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==", + "license": "MIT", "dependencies": { "k-bucket": "^5.0.0", "k-rpc-socket": "^1.7.2", @@ -8729,8 +7499,7 @@ }, "node_modules/k-rpc-socket": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz", - "integrity": "sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==", + "license": "MIT", "dependencies": { "bencode": "^2.0.0", "chrome-dgram": "^3.0.2", @@ -8740,14 +7509,12 @@ }, "node_modules/k-rpc-socket/node_modules/bencode": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.3.tgz", - "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==" + "license": "MIT" }, "node_modules/keygrip": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, + "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -8757,18 +7524,16 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/koa": { "version": "2.15.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.0.tgz", - "integrity": "sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -8800,15 +7565,13 @@ }, "node_modules/koa-compose": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/koa-convert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, + "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -8819,18 +7582,16 @@ }, "node_modules/koa-etag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", - "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", "dev": true, + "license": "MIT", "dependencies": { "etag": "^1.8.1" } }, "node_modules/koa-send": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "http-errors": "^1.7.3", @@ -8842,18 +7603,16 @@ }, "node_modules/koa-send/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-send/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -8867,18 +7626,16 @@ }, "node_modules/koa-send/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-static": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.1.0", "koa-send": "^5.0.0" @@ -8889,18 +7646,16 @@ }, "node_modules/koa-static/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/koa/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -8914,45 +7669,39 @@ }, "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/kysely": { "version": "0.26.3", - "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.3.tgz", - "integrity": "sha512-yWSgGi9bY13b/W06DD2OCDDHQmq1kwTGYlQ4wpZkMOJqMGCstVCFIvxCCVG4KfY1/3G0MhDAcZsip/Lw8/vJWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/last-one-wins": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", - "integrity": "sha512-t+KLJFkHPQk8lfN6WBOiGkiUXoub+gnb2XTYI2P3aiISL+94xgZ1vgz1SXN/N4hthuOoLXarXfBZPUruyjQtfA==" + "license": "MIT" }, "node_modules/layerr": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-2.0.1.tgz", - "integrity": "sha512-z0730CwG/JO24evdORnyDkwG1Q7b7mF2Tp1qRQ0YvrMMARbt1DFG694SOv439Gm7hYKolyZyaB49YIrYIfZBdg==" + "license": "MIT" }, "node_modules/level": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "license": "MIT", "dependencies": { "browser-level": "^1.0.1", "classic-level": "^1.2.0" @@ -8967,16 +7716,14 @@ }, "node_modules/level-supports": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/level-transcoder": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "module-error": "^1.0.1" @@ -8987,9 +7734,8 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -9000,9 +7746,8 @@ }, "node_modules/lighthouse-logger": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -9010,24 +7755,21 @@ }, "node_modules/lighthouse-logger/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loader-runner": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -9035,9 +7777,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -9050,38 +7791,32 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash.assignwith": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -9095,9 +7830,8 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9110,9 +7844,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9126,9 +7859,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9138,24 +7870,21 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9165,9 +7894,8 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -9183,9 +7911,8 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9198,9 +7925,8 @@ }, "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9210,21 +7936,18 @@ }, "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9236,9 +7959,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9250,9 +7972,8 @@ }, "node_modules/loglevel": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -9263,29 +7984,25 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/long": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lru": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", - "integrity": "sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1" }, @@ -9295,18 +8012,16 @@ }, "node_modules/lru-cache": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -9319,15 +8034,13 @@ }, "node_modules/marky": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/md5": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -9336,9 +8049,8 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -9347,55 +8059,48 @@ }, "node_modules/md5/node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -9406,9 +8111,8 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -9419,15 +8123,13 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9437,18 +8139,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -9458,18 +8158,16 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9479,21 +8177,18 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9506,32 +8201,28 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -9541,15 +8232,13 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -9587,9 +8276,8 @@ }, "node_modules/mocha-junit-reporter": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", - "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "md5": "^2.3.0", @@ -9603,9 +8291,8 @@ }, "node_modules/mocha-junit-reporter/node_modules/mkdirp": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -9618,9 +8305,8 @@ }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9633,9 +8319,8 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -9644,9 +8329,8 @@ }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9656,30 +8340,26 @@ }, "node_modules/mocha/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9689,9 +8369,8 @@ }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9709,9 +8388,8 @@ }, "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9719,9 +8397,8 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9731,18 +8408,16 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9752,9 +8427,8 @@ }, "node_modules/mocha/node_modules/nanoid": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9764,9 +8438,8 @@ }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9778,9 +8451,8 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9793,9 +8465,8 @@ }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9810,9 +8481,8 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9828,31 +8498,26 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/module-error": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "license": "MIT" }, "node_modules/multibase": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", "dependencies": { "@multiformats/base-x": "^4.0.1" }, @@ -9863,8 +8528,7 @@ }, "node_modules/multiformats": { "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -9872,8 +8536,7 @@ }, "node_modules/multihashes": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", - "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", + "license": "MIT", "dependencies": { "multibase": "^4.0.1", "uint8arrays": "^3.0.0", @@ -9886,35 +8549,30 @@ }, "node_modules/multihashes/node_modules/multiformats": { "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + "license": "(Apache-2.0 AND MIT)" }, "node_modules/multihashes/node_modules/uint8arrays": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/multihashes/node_modules/varint": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "license": "MIT" }, "node_modules/murmurhash3js-revisited": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", - "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/mysql2": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.7.0.tgz", - "integrity": "sha512-c45jA3Jc1X8yJKzrWu1GpplBKGwv/wIV6ITZTlCSY7npF2YfJR+6nMP5e+NTQhUeJPSyOQAbGDCGEHbAl8HN9w==", "dev": true, + "license": "MIT", "dependencies": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -9931,9 +8589,8 @@ }, "node_modules/mysql2/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -9943,18 +8600,16 @@ }, "node_modules/mysql2/node_modules/lru-cache": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/named-placeholders": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", - "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "^7.14.1" }, @@ -9964,34 +8619,30 @@ }, "node_modules/named-placeholders/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/nanoassert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", - "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" + "license": "ISC" }, "node_modules/nanocolors": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", - "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -10001,79 +8652,75 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/napi-macros": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/nise": { "version": "5.1.7", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.7.tgz", - "integrity": "sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", "@sinonjs/text-encoding": "^0.7.2", "just-extend": "^6.2.0", "path-to-regexp": "^6.2.1" + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", - "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.0" } }, "node_modules/nise/node_modules/path-to-regexp": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-abi": { "version": "3.54.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", - "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -10083,8 +8730,6 @@ }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -10096,15 +8741,15 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dev": true, + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -10120,8 +8765,7 @@ }, "node_modules/node-gyp-build": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -10130,16 +8774,14 @@ }, "node_modules/node-releases": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/node-stdlib-browser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", - "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^2.0.0", "browser-resolve": "^2.0.0", @@ -10175,8 +8817,6 @@ }, "node_modules/node-stdlib-browser/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -10192,6 +8832,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -10199,9 +8840,8 @@ }, "node_modules/node-stdlib-browser/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10213,9 +8853,8 @@ }, "node_modules/normalize-package-data": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -10228,18 +8867,16 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-install-checks": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -10249,18 +8886,16 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", @@ -10273,9 +8908,8 @@ }, "node_modules/npm-pick-manifest": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -10288,26 +8922,23 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -10321,16 +8952,14 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -10346,9 +8975,8 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -10358,27 +8986,24 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -10391,15 +9016,12 @@ }, "node_modules/only": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", "dev": true }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -10414,9 +9036,8 @@ }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -10431,14 +9052,12 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/p-defer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -10448,9 +9067,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10463,9 +9081,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -10478,8 +9095,7 @@ }, "node_modules/p-queue": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", - "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^5.0.2" @@ -10493,8 +9109,7 @@ }, "node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -10504,9 +9119,8 @@ }, "node_modules/pac-proxy-agent": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", @@ -10523,9 +9137,8 @@ }, "node_modules/pac-resolver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "ip": "^1.1.8", @@ -10537,21 +9150,18 @@ }, "node_modules/packet-reader": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10561,9 +9171,8 @@ }, "node_modules/parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, + "license": "ISC", "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -10574,63 +9183,55 @@ }, "node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -10644,33 +9245,29 @@ }, "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -10684,15 +9281,13 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", - "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -10719,55 +9314,48 @@ }, "node_modules/pg-cloudflare": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", - "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg-cursor": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.10.3.tgz", - "integrity": "sha512-rDyBVoqPVnx/PTmnwQAYgusSeAKlTL++gmpf5klVK+mYMFEqsOc6VHHZnPKc/4lOvr4r6fiMuoxSFuBF1dx4FQ==", "dev": true, + "license": "MIT", "peerDependencies": { "pg": "^8" } }, "node_modules/pg-int8": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", "dev": true, + "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-pool": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "dev": true, + "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "dev": true, + "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -10781,25 +9369,22 @@ }, "node_modules/pgpass": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "dev": true, + "license": "MIT", "dependencies": { "split2": "^4.1.0" } }, "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10809,8 +9394,7 @@ }, "node_modules/pkarr": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkarr/-/pkarr-1.1.1.tgz", - "integrity": "sha512-X27LKqf83X3WuJd2Z9qdfVxkmfOu6HUbY0pm11LqeBbFmgmZRPgOxJG8bKiIsmmD6Vjc25j45KHYflF2lfodyQ==", + "license": "MIT", "dependencies": { "bencode": "^3.0.3", "bittorrent-dht": "^11.0.4", @@ -10826,8 +9410,7 @@ }, "node_modules/pkarr/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -10837,9 +9420,8 @@ }, "node_modules/pkg-dir": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -10849,9 +9431,8 @@ }, "node_modules/playwright": { "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", - "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.40.1" }, @@ -10867,9 +9448,8 @@ }, "node_modules/playwright-core": { "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", - "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -10879,10 +9459,8 @@ }, "node_modules/playwright/node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -10893,9 +9471,8 @@ }, "node_modules/portfinder": { "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, + "license": "MIT", "dependencies": { "async": "^2.6.4", "debug": "^3.2.7", @@ -10907,18 +9484,16 @@ }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/portfinder/node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -10928,36 +9503,32 @@ }, "node_modules/postgres-array": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/postgres-bytea": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-date": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-interval": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "dev": true, + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -10967,9 +9538,8 @@ }, "node_modules/prebuild-install": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, + "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -10993,43 +9563,38 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/proc-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/progress-events": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.0.tgz", - "integrity": "sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -11037,9 +9602,8 @@ }, "node_modules/prom-client": { "version": "14.2.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", - "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tdigest": "^0.1.1" }, @@ -11049,15 +9613,13 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -11068,14 +9630,12 @@ }, "node_modules/promise-retry/node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/protons-runtime": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.2.2.tgz", - "integrity": "sha512-o97rNPN9pE3cxOxjs/waZNRKlbY/DR11oc20rUvarWZgFzQLLLzJU0RFh5JPi6GJCN67VGVn9/FDIEtFblfB3A==", + "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arraylist": "^2.4.3", "uint8arrays": "^5.0.1" @@ -11083,22 +9643,19 @@ }, "node_modules/protons-runtime/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/protons-runtime/node_modules/uint8arrays": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", - "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -11109,9 +9666,8 @@ }, "node_modules/proxy-agent": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -11128,24 +9684,21 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -11157,15 +9710,13 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11173,15 +9724,13 @@ }, "node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/puppeteer-core": { "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", @@ -11204,18 +9753,16 @@ }, "node_modules/puppeteer-core/node_modules/cross-fetch": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/puppeteer-core/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11233,21 +9780,18 @@ }, "node_modules/puppeteer-core/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/puppeteer-core/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/puppeteer-core/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -11255,9 +9799,8 @@ }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -11276,9 +9819,8 @@ }, "node_modules/qs": { "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -11291,8 +9833,6 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" @@ -11300,8 +9840,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -11315,18 +9853,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rabin-wasm": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", - "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", + "license": "MIT", "dependencies": { "@assemblyscript/loader": "^0.9.4", "bl": "^5.0.0", @@ -11341,8 +9878,7 @@ }, "node_modules/rabin-wasm/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11360,8 +9896,7 @@ }, "node_modules/rabin-wasm/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11373,18 +9908,15 @@ }, "node_modules/rabin-wasm/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/rabin-wasm/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/rabin-wasm/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -11392,23 +9924,20 @@ }, "node_modules/rambda": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", - "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -11416,18 +9945,16 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -11440,9 +9967,8 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -11455,17 +9981,15 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/readable-stream": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -11479,8 +10003,7 @@ }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "license": "MIT", "dependencies": { "readable-stream": "^3.6.0" }, @@ -11494,8 +10017,7 @@ }, "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11507,9 +10029,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -11519,16 +10040,14 @@ }, "node_modules/record-cache": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.2.0.tgz", - "integrity": "sha512-kyy3HWCez2WrotaL3O4fTn0rsIdfRKOdQQcEJ9KpvmKmbffKVvwsloX063EgRUlpJIXHiDQFhJcTbZequ2uTZw==", + "license": "MIT", "dependencies": { "b4a": "^1.3.1" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11543,26 +10062,23 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -11577,18 +10093,16 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-path": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, + "license": "MIT", "dependencies": { "http-errors": "~1.6.2", "path-is-absolute": "1.0.1" @@ -11599,18 +10113,16 @@ }, "node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/resolve-path/node_modules/http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -11623,30 +10135,26 @@ }, "node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve-path/node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve-path/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/response-time": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", - "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.0", "on-headers": "~1.0.1" @@ -11657,18 +10165,16 @@ }, "node_modules/response-time/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11679,18 +10185,16 @@ }, "node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -11698,9 +10202,8 @@ }, "node_modules/rimraf": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", - "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -11716,9 +10219,8 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -11734,9 +10236,8 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11749,18 +10250,16 @@ }, "node_modules/rimraf/node_modules/minipass": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -11768,9 +10267,8 @@ }, "node_modules/rollup": { "version": "4.9.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.4.tgz", - "integrity": "sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -11782,6 +10280,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.4", + "@rollup/rollup-android-arm64": "4.9.4", + "@rollup/rollup-darwin-arm64": "4.9.4", + "@rollup/rollup-darwin-x64": "4.9.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", + "@rollup/rollup-linux-arm64-gnu": "4.9.4", + "@rollup/rollup-linux-arm64-musl": "4.9.4", + "@rollup/rollup-linux-riscv64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-gnu": "4.9.4", + "@rollup/rollup-linux-x64-musl": "4.9.4", + "@rollup/rollup-win32-arm64-msvc": "4.9.4", + "@rollup/rollup-win32-ia32-msvc": "4.9.4", + "@rollup/rollup-win32-x64-msvc": "4.9.4", "@rollup/rollup-android-arm-eabi": "4.9.4", "@rollup/rollup-android-arm64": "4.9.4", "@rollup/rollup-darwin-arm64": "4.9.4", @@ -11800,8 +10311,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -11817,14 +10326,13 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-parallel-limit": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "funding": [ { "type": "github", @@ -11839,14 +10347,13 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-series": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", "funding": [ { "type": "github", @@ -11860,12 +10367,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-array-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -11881,14 +10388,14 @@ }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.1", + "license": "MIT", "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" @@ -11896,26 +10403,26 @@ "engines": { "node": ">= 0.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safety-catch": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safety-catch/-/safety-catch-1.0.2.tgz", - "integrity": "sha512-C1UYVZ4dtbBxEtvOcpjBaaD27nP8MlvyAQEp2fOTOEe6pfUpk1cDUxij6BR1jZup6rSyUTaBBplK7LanskrULA==" + "license": "MIT" }, "node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -11932,9 +10439,8 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -11949,9 +10455,8 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -11959,16 +10464,14 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/semver": { "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11981,9 +10484,8 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11993,9 +10495,8 @@ }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -12017,39 +10518,33 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/seq-queue": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", "dev": true }, "node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -12062,8 +10557,7 @@ }, "node_modules/set-function-length": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", @@ -12076,8 +10570,7 @@ }, "node_modules/set-function-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -12089,21 +10582,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -12114,8 +10604,7 @@ }, "node_modules/sha256-universal": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sha256-universal/-/sha256-universal-1.2.1.tgz", - "integrity": "sha512-ghn3muhdn1ailCQqqceNxRgkOeZSVfSE13RQWEg6njB+itsFzGVSJv+O//2hvNXZuxVIRyNzrgsZ37SPDdGJJw==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "sha256-wasm": "^2.2.1" @@ -12123,8 +10612,7 @@ }, "node_modules/sha256-wasm": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/sha256-wasm/-/sha256-wasm-2.2.2.tgz", - "integrity": "sha512-qKSGARvao+JQlFiA+sjJZhJ/61gmW/3aNLblB2rsgIxDlDxsJPHo8a1seXj12oKtuHVgJSJJ7QEGBUYQN741lQ==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -12132,8 +10620,7 @@ }, "node_modules/sha512-universal": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sha512-universal/-/sha512-universal-1.2.1.tgz", - "integrity": "sha512-kehYuigMoRkIngCv7rhgruLJNNHDnitGTBdkcYbCbooL8Cidj/bS78MDxByIjcc69M915WxcQTgZetZ1JbeQTQ==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "sha512-wasm": "^2.3.1" @@ -12141,8 +10628,7 @@ }, "node_modules/sha512-wasm": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/sha512-wasm/-/sha512-wasm-2.3.4.tgz", - "integrity": "sha512-akWoxJPGCB3aZCrZ+fm6VIFhJ/p8idBv7AWGFng/CZIrQo51oQNsvDbTSRXWAzIiZJvpy16oIDiCCPqTe21sKg==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -12150,9 +10636,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -12162,17 +10647,15 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12184,14 +10667,11 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -12206,12 +10686,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -12227,6 +10706,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -12235,9 +10715,8 @@ }, "node_modules/sinon": { "version": "16.1.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", - "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^10.3.0", @@ -12253,18 +10732,16 @@ }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12274,26 +10751,23 @@ }, "node_modules/siphash24": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/siphash24/-/siphash24-1.3.1.tgz", - "integrity": "sha512-moemC3ZKiTzH29nbFo3Iw8fbemWWod4vNs/WgKbQ54oEs6mE6XVlguxvinYjB+UmaE0PThgyED9fUkWvirT8hA==", + "license": "MIT", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -12308,9 +10782,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12323,9 +10796,8 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12335,15 +10807,13 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -12351,9 +10821,8 @@ }, "node_modules/socks": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, + "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -12365,9 +10834,8 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -12379,14 +10847,12 @@ }, "node_modules/socks/node_modules/ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sodium-javascript": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/sodium-javascript/-/sodium-javascript-0.8.0.tgz", - "integrity": "sha512-rEBzR5mPxPES+UjyMDvKPIXy9ImF17KOJ32nJNi9uIquWpS/nfj+h6m05J5yLJaGXjgM72LmQoUbWZVxh/rmGg==", + "license": "MIT", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -12399,17 +10865,15 @@ }, "node_modules/sodium-native": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.0.5.tgz", - "integrity": "sha512-YGimGhy7Ho6pTAAvuNdn3Tv9C2MD7HP89X1omReHat0Fd1mMnapGqwzb5YoHTAbIEh8tQmKP6+uLlwYCkf+EOA==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-gyp-build": "^4.6.0" } }, "node_modules/sodium-universal": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sodium-universal/-/sodium-universal-4.0.0.tgz", - "integrity": "sha512-iKHl8XnBV96k1c75gwwzANFdephw/MDWSjQAjPmBE+du0y3P23Q8uf7AcdcfFsYAMwLg7WVBfSAIBtV/JvRsjA==", + "license": "MIT", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -12424,27 +10888,24 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "iconv-lite": "^0.6.3", @@ -12463,9 +10924,8 @@ }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -12475,9 +10935,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "buffer-from": "^1.0.0", @@ -12486,9 +10945,8 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -12496,14 +10954,12 @@ }, "node_modules/sparse-array": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", - "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==" + "license": "ISC" }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -12511,15 +10967,13 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -12527,40 +10981,35 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/sqlstring": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/static-eval": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", "dependencies": { "escodegen": "^1.8.1" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -12580,16 +11029,14 @@ }, "node_modules/static-eval/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/static-eval/node_modules/levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -12600,8 +11047,7 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -12616,16 +11062,13 @@ }, "node_modules/static-eval/node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, "node_modules/static-eval/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -12633,8 +11076,7 @@ }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -12644,18 +11086,16 @@ }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -12663,9 +11103,8 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12677,9 +11116,8 @@ }, "node_modules/stream-http": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -12689,9 +11127,8 @@ }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12703,18 +11140,16 @@ }, "node_modules/stream-read-all": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", - "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/streamx": { "version": "2.15.6", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", - "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", "dev": true, + "license": "MIT", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -12722,16 +11157,13 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -12745,13 +11177,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -12767,9 +11199,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12781,15 +11212,13 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12799,9 +11228,8 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12814,8 +11242,7 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12833,8 +11260,7 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12849,8 +11275,7 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12862,8 +11287,7 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12875,9 +11299,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12888,9 +11311,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12900,9 +11322,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -12912,14 +11333,12 @@ }, "node_modules/strnum": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12929,9 +11348,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12941,9 +11359,8 @@ }, "node_modules/table-layout": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", - "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", "dev": true, + "license": "MIT", "dependencies": { "@75lb/deep-merge": "^1.1.1", "array-back": "^6.2.2", @@ -12962,27 +11379,24 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/table-layout/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -12990,9 +11404,8 @@ }, "node_modules/tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -13002,9 +11415,8 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -13018,9 +11430,8 @@ }, "node_modules/tar-stream/node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -13029,8 +11440,6 @@ }, "node_modules/tar-stream/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -13046,6 +11455,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -13053,9 +11463,8 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13067,18 +11476,16 @@ }, "node_modules/tdigest": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dev": true, + "license": "MIT", "dependencies": { "bintrees": "1.0.2" } }, "node_modules/terser": { "version": "5.26.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", - "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13095,9 +11502,8 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -13130,9 +11536,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "dependencies": { "randombytes": "^2.1.0" @@ -13140,9 +11545,8 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -13154,9 +11558,8 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13164,9 +11567,8 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13184,9 +11586,8 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13196,21 +11597,18 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, + "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -13220,9 +11618,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -13232,18 +11629,16 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -13253,18 +11648,16 @@ }, "node_modules/tr46/node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ts-api-utils": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.13.0" }, @@ -13274,29 +11667,25 @@ }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.x" } }, "node_modules/tty-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -13306,9 +11695,8 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -13318,18 +11706,16 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13339,9 +11725,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -13352,8 +11737,7 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -13365,8 +11749,7 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -13382,8 +11765,7 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -13400,8 +11782,7 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -13413,9 +11794,8 @@ }, "node_modules/typescript": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13426,54 +11806,47 @@ }, "node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uint8-util": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", - "integrity": "sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA==", + "license": "MIT", "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "node_modules/uint8arraylist": { "version": "2.4.8", - "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", - "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arrays": "^5.0.1" } }, "node_modules/uint8arraylist/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", - "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/uint8arrays": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", - "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^12.0.1" } }, "node_modules/uint8arrays/node_modules/multiformats": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -13481,8 +11854,7 @@ }, "node_modules/ulidx": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ulidx/-/ulidx-2.1.0.tgz", - "integrity": "sha512-DlMi97oP9HASI3kLCjBlOhAG1SoisUrEqC2PJ7itiFbq9q5Zo0JejupXeu2Gke99W62epNzA4MFNToNiq8A5LA==", + "license": "MIT", "dependencies": { "layerr": "^2.0.1" }, @@ -13492,8 +11864,7 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -13506,9 +11877,8 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -13516,8 +11886,6 @@ }, "node_modules/unbzip2-stream/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -13533,6 +11901,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -13540,32 +11909,27 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -13581,6 +11945,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { "escalade": "^3.1.1", @@ -13595,25 +11960,22 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/url": { "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" @@ -13621,9 +11983,8 @@ }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -13634,31 +11995,27 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -13670,9 +12027,8 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -13680,9 +12036,8 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, + "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -13692,29 +12047,25 @@ }, "node_modules/varint": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/watchpack": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -13726,27 +12077,24 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -13792,9 +12140,8 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -13802,9 +12149,8 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -13816,9 +12162,8 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -13826,16 +12171,14 @@ }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -13846,9 +12189,8 @@ }, "node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -13861,8 +12203,7 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -13876,8 +12217,7 @@ }, "node_modules/which-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", @@ -13894,32 +12234,28 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrapjs": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -13935,9 +12271,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13952,9 +12287,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13967,9 +12301,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13979,21 +12312,18 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14005,9 +12335,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14017,9 +12346,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14029,9 +12357,8 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -14044,15 +12371,13 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -14071,44 +12396,38 @@ }, "node_modules/xml": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xsalsa20": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", - "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" + "license": "MIT" }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -14124,18 +12443,16 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -14148,15 +12465,13 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14168,9 +12483,8 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -14178,18 +12492,16 @@ }, "node_modules/ylru": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", - "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14199,8 +12511,7 @@ }, "node_modules/z32": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/z32/-/z32-1.0.1.tgz", - "integrity": "sha512-Uytfqf6VEVchHKZDw0NRdCViOARHP84uzvOw0CXCMLOwhgHZUL9XibpEPLLQN10mCVLxOlGCQWbkV7km7yNYcw==", + "license": "MIT", "dependencies": { "b4a": "^1.5.3" } @@ -14231,7 +12542,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -14251,16 +12562,14 @@ }, "packages/agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -14270,8 +12579,7 @@ }, "packages/agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -14281,9 +12589,8 @@ }, "packages/agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14309,9 +12616,8 @@ }, "packages/agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14322,9 +12628,8 @@ }, "packages/agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14349,8 +12654,7 @@ }, "packages/agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -14363,8 +12667,7 @@ }, "packages/agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -14373,11 +12676,29 @@ "node": ">=18.0.0" } }, + "packages/agent/node_modules/@web5/dids": { + "version": "0.2.4", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/agent/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14391,9 +12712,8 @@ }, "packages/agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14406,9 +12726,8 @@ }, "packages/agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14416,9 +12735,8 @@ }, "packages/agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14432,9 +12750,8 @@ }, "packages/agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14444,15 +12761,13 @@ }, "packages/agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14462,9 +12777,8 @@ }, "packages/agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14516,9 +12830,8 @@ }, "packages/agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14528,24 +12841,21 @@ }, "packages/agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14555,9 +12865,8 @@ }, "packages/agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14594,7 +12903,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -14615,16 +12924,14 @@ }, "packages/api/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/api/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -14634,8 +12941,7 @@ }, "packages/api/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -14645,9 +12951,8 @@ }, "packages/api/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14673,9 +12978,8 @@ }, "packages/api/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14686,9 +12990,8 @@ }, "packages/api/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14713,8 +13016,7 @@ }, "packages/api/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -14727,8 +13029,7 @@ }, "packages/api/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -14737,11 +13038,29 @@ "node": ">=18.0.0" } }, + "packages/api/node_modules/@web5/dids": { + "version": "0.2.4", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/api/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14755,9 +13074,8 @@ }, "packages/api/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14770,9 +13088,8 @@ }, "packages/api/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14780,9 +13097,8 @@ }, "packages/api/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14796,9 +13112,8 @@ }, "packages/api/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14808,15 +13123,13 @@ }, "packages/api/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/api/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14826,9 +13139,8 @@ }, "packages/api/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14880,9 +13192,8 @@ }, "packages/api/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14892,24 +13203,21 @@ }, "packages/api/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/api/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/api/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14919,9 +13227,8 @@ }, "packages/api/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14949,7 +13256,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -14967,9 +13274,8 @@ }, "packages/common/node_modules/@types/readable-stream": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.9.tgz", - "integrity": "sha512-4cwuvrmNF96M4Nrx0Eep37RwPB1Mth+nCSezsGRv5+PsFyRvDdLd0pil6gVLcWD/bh69INNdwZ98dJwfHpLohA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -14977,9 +13283,8 @@ }, "packages/common/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15005,9 +13310,8 @@ }, "packages/common/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15018,9 +13322,8 @@ }, "packages/common/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15045,9 +13348,8 @@ }, "packages/common/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15061,9 +13363,8 @@ }, "packages/common/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15076,9 +13377,8 @@ }, "packages/common/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15086,9 +13386,8 @@ }, "packages/common/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15102,9 +13401,8 @@ }, "packages/common/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15114,15 +13412,13 @@ }, "packages/common/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/common/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15132,9 +13428,8 @@ }, "packages/common/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15186,9 +13481,8 @@ }, "packages/common/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15198,24 +13492,21 @@ }, "packages/common/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/common/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/common/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15225,9 +13516,8 @@ }, "packages/common/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15255,7 +13545,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "esbuild": "0.19.8", "eslint": "8.47.0", @@ -15273,16 +13563,14 @@ }, "packages/credentials/node_modules/@noble/ciphers": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz", - "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@noble/curves": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -15292,8 +13580,7 @@ }, "packages/credentials/node_modules/@noble/hashes": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -15303,9 +13590,8 @@ }, "packages/credentials/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15331,9 +13617,8 @@ }, "packages/credentials/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15344,9 +13629,8 @@ }, "packages/credentials/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15371,8 +13655,7 @@ }, "packages/credentials/node_modules/@web5/crypto": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.4.tgz", - "integrity": "sha512-heRUuV10mZ04dWp1C2mNF/EEPw8nnRe+yAXvmclJ+4XUHL6+mY7j+hjYOTKUAQzd4ouvbHrpJM0uYcUntA3AeA==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.4.0", "@noble/curves": "1.2.0", @@ -15383,11 +13666,80 @@ "node": ">=18.0.0" } }, + "packages/credentials/node_modules/@web5/dids": { + "version": "0.2.4", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/credentials/node_modules/@web5/dids/node_modules/@noble/ciphers": { + "version": "0.1.4", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/credentials/node_modules/@web5/dids/node_modules/@noble/curves": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/credentials/node_modules/@web5/dids/node_modules/@noble/hashes": { + "version": "1.3.1", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto": { + "version": "0.2.2", + "license": "Apache-2.0", + "dependencies": { + "@noble/ciphers": "0.1.4", + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@web5/common": "0.2.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto/node_modules/@web5/common": { + "version": "0.2.1", + "license": "Apache-2.0", + "dependencies": { + "level": "8.0.0", + "multiformats": "11.0.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/credentials/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15401,9 +13753,8 @@ }, "packages/credentials/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15416,9 +13767,8 @@ }, "packages/credentials/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15426,9 +13776,8 @@ }, "packages/credentials/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15442,9 +13791,8 @@ }, "packages/credentials/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15454,15 +13802,13 @@ }, "packages/credentials/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/credentials/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15472,9 +13818,8 @@ }, "packages/credentials/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15526,9 +13871,8 @@ }, "packages/credentials/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15538,24 +13882,21 @@ }, "packages/credentials/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/credentials/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/credentials/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15565,9 +13906,8 @@ }, "packages/credentials/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15596,7 +13936,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -15634,7 +13974,7 @@ "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", "@web5/common": "0.2.2", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "eslint": "8.47.0", @@ -15653,9 +13993,8 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15681,9 +14020,8 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15694,9 +14032,8 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15721,9 +14058,8 @@ }, "packages/crypto-aws-kms/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15737,9 +14073,8 @@ }, "packages/crypto-aws-kms/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15752,9 +14087,8 @@ }, "packages/crypto-aws-kms/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15762,9 +14096,8 @@ }, "packages/crypto-aws-kms/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15778,9 +14111,8 @@ }, "packages/crypto-aws-kms/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15790,15 +14122,13 @@ }, "packages/crypto-aws-kms/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto-aws-kms/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15808,9 +14138,8 @@ }, "packages/crypto-aws-kms/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15862,9 +14191,8 @@ }, "packages/crypto-aws-kms/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15874,24 +14202,21 @@ }, "packages/crypto-aws-kms/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto-aws-kms/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto-aws-kms/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15901,9 +14226,8 @@ }, "packages/crypto-aws-kms/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15913,9 +14237,8 @@ }, "packages/crypto/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15941,9 +14264,8 @@ }, "packages/crypto/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15954,9 +14276,8 @@ }, "packages/crypto/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15981,9 +14302,8 @@ }, "packages/crypto/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15997,9 +14317,8 @@ }, "packages/crypto/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16012,9 +14331,8 @@ }, "packages/crypto/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16022,9 +14340,8 @@ }, "packages/crypto/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16038,9 +14355,8 @@ }, "packages/crypto/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16050,15 +14366,13 @@ }, "packages/crypto/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16068,9 +14382,8 @@ }, "packages/crypto/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16122,9 +14435,8 @@ }, "packages/crypto/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16134,24 +14446,21 @@ }, "packages/crypto/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16161,9 +14470,8 @@ }, "packages/crypto/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16173,13 +14481,13 @@ }, "packages/dids": { "name": "@web5/dids", - "version": "0.2.4", + "version": "0.3.0", "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", + "@web5/crypto": "0.3.0", "did-resolver": "4.1.0", "dns-packet": "5.6.1", "level": "8.0.0", @@ -16199,7 +14507,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -16217,41 +14525,10 @@ "node": ">=18.0.0" } }, - "packages/dids/node_modules/@noble/ciphers": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/dids/node_modules/@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", - "dependencies": { - "@noble/hashes": "1.3.1" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/dids/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "packages/dids/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -16277,9 +14554,8 @@ }, "packages/dids/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -16290,9 +14566,8 @@ }, "packages/dids/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -16315,37 +14590,10 @@ } } }, - "packages/dids/node_modules/@web5/crypto": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", - "dependencies": { - "@noble/ciphers": "0.1.4", - "@noble/curves": "1.1.0", - "@noble/hashes": "1.3.1", - "@web5/common": "0.2.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/dids/node_modules/@web5/crypto/node_modules/@web5/common": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", - "dependencies": { - "level": "8.0.0", - "multiformats": "11.0.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "packages/dids/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16359,9 +14607,8 @@ }, "packages/dids/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16374,9 +14621,8 @@ }, "packages/dids/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16384,9 +14630,8 @@ }, "packages/dids/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16400,9 +14645,8 @@ }, "packages/dids/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16412,15 +14656,13 @@ }, "packages/dids/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/dids/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16430,9 +14672,8 @@ }, "packages/dids/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16484,9 +14725,8 @@ }, "packages/dids/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16496,24 +14736,21 @@ }, "packages/dids/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/dids/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/dids/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16523,9 +14760,8 @@ }, "packages/dids/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16553,8 +14789,8 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "@web5/api": "0.8.4", - "c8": "8.0.1", + "@web5/api": "0.8.3", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -16573,16 +14809,14 @@ }, "packages/identity-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/identity-agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -16592,8 +14826,7 @@ }, "packages/identity-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -16603,9 +14836,8 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -16631,9 +14863,8 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -16644,9 +14875,8 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -16671,8 +14901,7 @@ }, "packages/identity-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -16685,8 +14914,7 @@ }, "packages/identity-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -16695,11 +14923,29 @@ "node": ">=18.0.0" } }, + "packages/identity-agent/node_modules/@web5/dids": { + "version": "0.2.4", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/identity-agent/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16713,9 +14959,8 @@ }, "packages/identity-agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16728,9 +14973,8 @@ }, "packages/identity-agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16738,9 +14982,8 @@ }, "packages/identity-agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16754,9 +14997,8 @@ }, "packages/identity-agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16766,15 +15008,13 @@ }, "packages/identity-agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/identity-agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16784,9 +15024,8 @@ }, "packages/identity-agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16838,9 +15077,8 @@ }, "packages/identity-agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16850,24 +15088,21 @@ }, "packages/identity-agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/identity-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/identity-agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16877,9 +15112,8 @@ }, "packages/identity-agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16907,7 +15141,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -16926,16 +15160,14 @@ }, "packages/proxy-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/proxy-agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -16945,8 +15177,7 @@ }, "packages/proxy-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -16956,9 +15187,8 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -16984,9 +15214,8 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -16997,9 +15226,8 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -17024,8 +15252,7 @@ }, "packages/proxy-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -17038,8 +15265,7 @@ }, "packages/proxy-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -17048,11 +15274,29 @@ "node": ">=18.0.0" } }, + "packages/proxy-agent/node_modules/@web5/dids": { + "version": "0.2.4", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/proxy-agent/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -17066,9 +15310,8 @@ }, "packages/proxy-agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17081,9 +15324,8 @@ }, "packages/proxy-agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17091,9 +15333,8 @@ }, "packages/proxy-agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17107,9 +15348,8 @@ }, "packages/proxy-agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17119,15 +15359,13 @@ }, "packages/proxy-agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/proxy-agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17137,9 +15375,8 @@ }, "packages/proxy-agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -17191,9 +15428,8 @@ }, "packages/proxy-agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -17203,24 +15439,21 @@ }, "packages/proxy-agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/proxy-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/proxy-agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17230,9 +15463,8 @@ }, "packages/proxy-agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17260,7 +15492,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", @@ -17279,16 +15511,14 @@ }, "packages/user-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/user-agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -17298,8 +15528,7 @@ }, "packages/user-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -17309,9 +15538,8 @@ }, "packages/user-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -17337,9 +15565,8 @@ }, "packages/user-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -17350,9 +15577,8 @@ }, "packages/user-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -17377,8 +15603,7 @@ }, "packages/user-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -17391,8 +15616,7 @@ }, "packages/user-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -17401,11 +15625,29 @@ "node": ">=18.0.0" } }, + "packages/user-agent/node_modules/@web5/dids": { + "version": "0.2.4", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/user-agent/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -17419,9 +15661,8 @@ }, "packages/user-agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17434,9 +15675,8 @@ }, "packages/user-agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17444,9 +15684,8 @@ }, "packages/user-agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17460,9 +15699,8 @@ }, "packages/user-agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17472,15 +15710,13 @@ }, "packages/user-agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/user-agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17490,9 +15726,8 @@ }, "packages/user-agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -17544,9 +15779,8 @@ }, "packages/user-agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -17556,24 +15790,21 @@ }, "packages/user-agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/user-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/user-agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17583,9 +15814,8 @@ }, "packages/user-agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, diff --git a/packages/agent/.c8rc.json b/packages/agent/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/agent/.c8rc.json +++ b/packages/agent/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/agent/package.json b/packages/agent/package.json index 33d59e72d..3eabe1baa 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -89,7 +89,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/api/.c8rc.json b/packages/api/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/api/.c8rc.json +++ b/packages/api/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/api/package.json b/packages/api/package.json index 776b1bfbf..f8665c968 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -100,7 +100,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/common/.c8rc.json b/packages/common/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/common/.c8rc.json +++ b/packages/common/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/common/package.json b/packages/common/package.json index 7449a8589..39f1b17e0 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -83,7 +83,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/credentials/.c8rc.json b/packages/credentials/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/credentials/.c8rc.json +++ b/packages/credentials/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/credentials/package.json b/packages/credentials/package.json index a50c9498f..a62fe7585 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -89,7 +89,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "esbuild": "0.19.8", "eslint": "8.47.0", diff --git a/packages/crypto-aws-kms/.c8rc.json b/packages/crypto-aws-kms/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/crypto-aws-kms/.c8rc.json +++ b/packages/crypto-aws-kms/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/crypto-aws-kms/package.json b/packages/crypto-aws-kms/package.json index 0459396db..88546d969 100644 --- a/packages/crypto-aws-kms/package.json +++ b/packages/crypto-aws-kms/package.json @@ -84,7 +84,7 @@ "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", "@web5/common": "0.2.2", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "eslint": "8.47.0", diff --git a/packages/crypto/package.json b/packages/crypto/package.json index efb5d241b..d83a8898e 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -90,7 +90,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/dids/.c8rc.json b/packages/dids/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/dids/.c8rc.json +++ b/packages/dids/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/dids/package.json b/packages/dids/package.json index c588b889b..817e54c9f 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -1,6 +1,6 @@ { "name": "@web5/dids", - "version": "0.2.4", + "version": "0.3.0", "description": "TBD DIDs library", "type": "module", "main": "./dist/cjs/index.js", @@ -78,7 +78,7 @@ "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", + "@web5/crypto": "0.3.0", "did-resolver": "4.1.0", "dns-packet": "5.6.1", "level": "8.0.0", @@ -98,7 +98,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/identity-agent/.c8rc.json b/packages/identity-agent/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/identity-agent/.c8rc.json +++ b/packages/identity-agent/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/identity-agent/package.json b/packages/identity-agent/package.json index f10a0c30d..e8431c6de 100644 --- a/packages/identity-agent/package.json +++ b/packages/identity-agent/package.json @@ -84,7 +84,7 @@ "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", "@web5/api": "0.8.4", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/proxy-agent/.c8rc.json b/packages/proxy-agent/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/proxy-agent/.c8rc.json +++ b/packages/proxy-agent/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/proxy-agent/package.json b/packages/proxy-agent/package.json index 1d7411b7d..240d2cc50 100644 --- a/packages/proxy-agent/package.json +++ b/packages/proxy-agent/package.json @@ -83,7 +83,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", diff --git a/packages/user-agent/.c8rc.json b/packages/user-agent/.c8rc.json index ab680f663..c44b67aba 100644 --- a/packages/user-agent/.c8rc.json +++ b/packages/user-agent/.c8rc.json @@ -5,12 +5,12 @@ ".js" ], "include": [ - "tests/compiled/src/**" + "tests/compiled/**/src/**" ], "exclude": [ - "tests/compiled/src/index.js", - "tests/compiled/src/types.js", - "tests/compiled/src/types/**" + "tests/compiled/**/src/index.js", + "tests/compiled/**/src/types.js", + "tests/compiled/**/src/types/**" ], "reporter": [ "cobertura", diff --git a/packages/user-agent/package.json b/packages/user-agent/package.json index 12b899413..07a3f168c 100644 --- a/packages/user-agent/package.json +++ b/packages/user-agent/package.json @@ -83,7 +83,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "c8": "8.0.1", + "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "esbuild": "0.19.8", From e17d5e8615cf6a3cf4805a39d6067ecebc889172 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 10 Jan 2024 08:31:36 -0500 Subject: [PATCH 03/39] Remove unnecessary option in crypto tsconfig and enable strict mode for dids Signed-off-by: Frank Hinek --- packages/crypto/tests/tsconfig.json | 1 - packages/dids/tsconfig.json | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/crypto/tests/tsconfig.json b/packages/crypto/tests/tsconfig.json index 0cdb42f92..1d39d9695 100644 --- a/packages/crypto/tests/tsconfig.json +++ b/packages/crypto/tests/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "compiled", "declarationDir": "compiled/types", - "resolveJsonModule": true, "sourceMap": true }, "include": [ diff --git a/packages/dids/tsconfig.json b/packages/dids/tsconfig.json index 3226cdc66..d9e64c722 100644 --- a/packages/dids/tsconfig.json +++ b/packages/dids/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "strict": false, "declarationDir": "dist/types", "outDir": "dist/esm" }, From 09083b2541b9cac05a4a431dbf5cddd03100e34a Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Fri, 12 Jan 2024 17:21:44 -0500 Subject: [PATCH 04/39] Add JWK Set to crypto package Signed-off-by: Frank Hinek --- packages/crypto/src/jose/jwk.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/crypto/src/jose/jwk.ts b/packages/crypto/src/jose/jwk.ts index 67650a0c5..901c20df3 100644 --- a/packages/crypto/src/jose/jwk.ts +++ b/packages/crypto/src/jose/jwk.ts @@ -345,6 +345,22 @@ export type JwkKeyPair = { */ export type Jwk = PrivateKeyJwk | PublicKeyJwk; +/** + * JSON Web Key Set ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK Set}) + * + * @remarks + * A JWK Set is a JSON object that represents a set of JWKs. The JSON object MUST have a "keys" + * member, with its value being an array of JWKs. + * + * Additional members can be present in the JWK Set but member names MUST be unique. If not + * understood by implementations encountering them, they MUST be ignored. Parameters for + * representing additional properties of JWK Sets should either be registered in the IANA + * "JSON Web Key Set Parameters" registry or be a value that contains a Collision-Resistant Name. + */ +export interface JwkSet { + keys: Jwk[] +} + /** * Computes the thumbprint of a JSON Web Key (JWK) using the method * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys From 7b51b761b10ea98cd709e34424033d33eae00b38 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Fri, 12 Jan 2024 17:24:34 -0500 Subject: [PATCH 05/39] Add did:jwk and did:web implementations Signed-off-by: Frank Hinek --- packages/dids/src/did-resolver.ts | 216 +------ packages/dids/src/did-uri.ts | 186 ++++++ packages/dids/src/methods/did-jwk.ts | 326 ++++++++++ packages/dids/src/methods/did-method.ts | 192 ++++++ packages/dids/src/methods/did-web.ts | 96 +++ packages/dids/src/types.ts | 319 +--------- packages/dids/src/types/did-core.ts | 560 ++++++++++++++++++ packages/dids/src/utils.ts | 331 ++++++++--- packages/dids/tests/did-jwk.spec.ts | 342 +++++++++++ packages/dids/tests/did-uri.spec.ts | 188 ++++++ packages/dids/tests/did-web.spec.ts | 69 +++ .../tests/fixtures/test-vectors/did-utils.ts | 16 +- packages/dids/tests/utils.spec.ts | 388 +++++++++++- 13 files changed, 2617 insertions(+), 612 deletions(-) create mode 100644 packages/dids/src/did-uri.ts create mode 100644 packages/dids/src/methods/did-jwk.ts create mode 100644 packages/dids/src/methods/did-method.ts create mode 100644 packages/dids/src/methods/did-web.ts create mode 100644 packages/dids/src/types/did-core.ts create mode 100644 packages/dids/tests/did-jwk.spec.ts create mode 100644 packages/dids/tests/did-uri.spec.ts create mode 100644 packages/dids/tests/did-web.spec.ts diff --git a/packages/dids/src/did-resolver.ts b/packages/dids/src/did-resolver.ts index 1c0933b7f..d5cd5c6b6 100644 --- a/packages/dids/src/did-resolver.ts +++ b/packages/dids/src/did-resolver.ts @@ -1,208 +1,8 @@ -import type { - DidResource, - DidResolverCache, - DidMethodResolver, - DidResolutionResult, - DidResolutionOptions, - DidDereferencingResult, - DidDereferencingOptions, -} from './types.js'; - -import { parseDid } from './utils.js'; -import { DidResolverCacheNoop } from './resolver-cache-noop.js'; - -export type DidResolverOptions = { - didResolvers: DidMethodResolver[]; - cache?: DidResolverCache; -} - -/** - * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to - * their corresponding DID documents. - * - * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver` - * instances, each responsible for a specific DID method. It also employs a caching mechanism to - * store and retrieve previously resolved DID documents for efficiency. - * - * Usage: - * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache. - * - Use `resolve` to resolve a DID to its DID Resolution Result. - * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods. - * - * @example - * ```ts - * const resolver = new DidResolver({ - * didResolvers: [], - * cache: new DidResolverCacheNoop() - * }); - * - * const resolutionResult = await resolver.resolve('did:example:123456'); - * const dereferenceResult = await resolver.dereference({ didUrl: 'did:example:123456#key-1' }); - * ``` - */ -export class DidResolver { - /** - * A cache for storing resolved DID documents. - */ - private cache: DidResolverCache; - - /** - * A map to store method resolvers against method names. - */ - private didResolvers: Map = new Map(); - - /** - * Constructs a new `DidResolver`. - * - * @param options - The options for constructing the `DidResolver`. - * @param options.didResolvers - An array of `DidMethodResolver` instances. - * @param options.cache - Optional. A cache for storing resolved DID documents. If not provided, a no-operation cache is used. - */ - constructor(options: DidResolverOptions) { - this.cache = options.cache || DidResolverCacheNoop; - - for (const resolver of options.didResolvers) { - this.didResolvers.set(resolver.methodName, resolver); - } - } - - /** - * Resolves a DID to a DID Resolution Result. - * If the DID Resolution Result is present in the cache, it returns the cached - * result. Otherwise, it uses the appropriate method resolver to resolve - * the DID, stores the resolution result in the cache, and returns the - * resolultion result. - * - * Note: The method signature for resolve() in this implementation must match - * the `DidResolver` implementation in - * {@link https://github.com/TBD54566975/dwn-sdk-js | dwn-sdk-js} so that - * Web5 apps and the underlying DWN instance can share the same DID - * resolution cache. - * - * @param didUrl - The DID or DID URL to resolve. - * @returns A promise that resolves to the DID Resolution Result. - */ - async resolve(didUrl: string, resolutionOptions?: DidResolutionOptions): Promise { - - const parsedDid = parseDid({ didUrl }); - if (!parsedDid) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'invalidDid', - errorMessage : `Cannot parse DID: ${didUrl}` - } - }; - } - - const resolver = this.didResolvers.get(parsedDid.method); - if (!resolver) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'methodNotSupported', - errorMessage : `Method not supported: ${parsedDid.method}` - } - }; - } - - const cachedResolutionResult = await this.cache.get(parsedDid.did); - - if (cachedResolutionResult) { - return cachedResolutionResult; - } else { - const resolutionResult = await resolver.resolve({ - didUrl: parsedDid.did, - resolutionOptions - }); - - await this.cache.set(parsedDid.did, resolutionResult); - - return resolutionResult; - } - } - - /** - * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource. This method - * interprets the DID URL's components, which include the DID method, method-specific identifier, - * path, query, and fragment, and retrieves the related resource as per the DID Core specifications. - * The dereferencing process involves resolving the DID contained in the DID URL to a DID document, - * and then extracting the specific part of the document identified by the fragment in the DID URL. - * If no fragment is specified, the entire DID document is returned. - * - * This method supports resolution of different components within a DID document such as service - * endpoints and verification methods, based on their IDs. It accommodates both full and - * DID URLs as specified in the DID Core specification. - * - * More information on DID URL dereferencing can be found in the - * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}. - * - * @param didUrl - The DID URL string to dereference. - * @param [dereferenceOptions] - Input options to the dereference function. Optional. - * @returns a {@link DidDereferencingResult} - */ - async dereference({ didUrl }: { - didUrl: string, - dereferenceOptions?: DidDereferencingOptions - }): Promise { - const { didDocument, didResolutionMetadata = {}, didDocumentMetadata = {} } = await this.resolve(didUrl); - if (didResolutionMetadata.error) { - return { - dereferencingMetadata : { error: 'invalidDidUrl' }, - contentStream : null, - contentMetadata : {} - }; - } - - const parsedDid = parseDid({ didUrl }); - - // Return the entire DID Document if no fragment is present on the did url - if (!parsedDid.fragment) { - return { - dereferencingMetadata : { contentType: 'application/did+json' }, - contentStream : didDocument, - contentMetadata : didDocumentMetadata - }; - } - - const { service = [], verificationMethod = [] } = didDocument; - - // Create a set of possible id matches. The DID spec allows for an id to be the entire - // did#fragment or just #fragment. - // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}. - // Using a Set for fast string comparison since some DID methods have long identifiers. - const idSet = new Set([didUrl, parsedDid.fragment, `#${parsedDid.fragment}`]); - - let didResource: DidResource; - for (let vm of verificationMethod) { - if (idSet.has(vm.id)) { - didResource = vm; - break; - } - } - - for (let svc of service) { - if (idSet.has(svc.id)) { - didResource = svc; - break; - } - } - if (didResource) { - return { - dereferencingMetadata : { contentType: 'application/did+json' }, - contentStream : didResource, - contentMetadata : didResolutionMetadata - }; - } else { - return { - dereferencingMetadata : { error: 'notFound' }, - contentStream : null, - contentMetadata : {}, - }; - } - } -} \ No newline at end of file +import type { DidResolutionResult } from './types/did-core.js'; + +export const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = { + '@context' : 'https://w3id.org/did-resolution/v1', + didResolutionMetadata : {}, + didDocument : null, + didDocumentMetadata : {}, +}; \ No newline at end of file diff --git a/packages/dids/src/did-uri.ts b/packages/dids/src/did-uri.ts new file mode 100644 index 000000000..22687abeb --- /dev/null +++ b/packages/dids/src/did-uri.ts @@ -0,0 +1,186 @@ +/** + * The `DidUri` class represents a Decentralized Identifier (DID) Uniform Resource Identifier (URI). + * + * This class provides a method for parsing a DID URI string into its component parts, as well as a + * method for serializing a DID URI object into a string. + * + * A DID URI is composed of the following components: + * - scheme + * - method + * - id + * - path + * - query + * - fragment + * - params + * + * @see {@link https://www.w3.org/TR/did-core/#did-syntax | DID Core Specification, § DID Syntax} + */ +export class DidUri { + /** Regular expression pattern for matching the method component of a DID URI. */ + static readonly METHOD_PATTERN = '([a-z0-9]+)'; + /** Regular expression pattern for matching percent-encoded characters in a method identifier. */ + static readonly PCT_ENCODED_PATTERN = '(?:%[0-9a-fA-F]{2})'; + /** Regular expression pattern for matching the characters allowed in a method identifier. */ + static readonly ID_CHAR_PATTERN = `(?:[a-zA-Z0-9._-]|${DidUri.PCT_ENCODED_PATTERN})`; + /** Regular expression pattern for matching the method identifier component of a DID URI. */ + static readonly METHOD_ID_PATTERN = `((?:${DidUri.ID_CHAR_PATTERN}*:)*(${DidUri.ID_CHAR_PATTERN}+))`; + /** Regular expression pattern for matching the path component of a DID URI. */ + static readonly PATH_PATTERN = `(/[^#?]*)?`; + /** Regular expression pattern for matching the query component of a DID URI. */ + static readonly QUERY_PATTERN = `([?][^#]*)?`; + /** Regular expression pattern for matching the fragment component of a DID URI. */ + static readonly FRAGMENT_PATTERN = `(#.*)?`; + /** Regular expression pattern for matching all of the components of a DID URI. */ + static readonly DID_URI_PATTERN = new RegExp( + `^did:(?${DidUri.METHOD_PATTERN}):(?${DidUri.METHOD_ID_PATTERN})(?${DidUri.PATH_PATTERN})(?${DidUri.QUERY_PATTERN})(?${DidUri.FRAGMENT_PATTERN})$` + ); + + /** + * A string representation of the DID. + * + * A DID is a URI composed of three parts: the scheme `did:`, a method identifier, and a unique, + * method-specific identifier specified by the DID method. + * + * @example + * did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o + */ + uri: string; + + /** + * The name of the DID method. + * + * Examples of DID method names are `dht`, `jwk`, and `web`, among others. + */ + method: string; + + /** + * The DID method identifier. + * + * @example + * h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o + */ + id: string; + + /** + * Optional path component of the DID URI. + * + * @example + * did:web:tbd.website/path + */ + path?: string; + + /** + * Optional query component of the DID URI. + * + * @example + * did:web:tbd.website?versionId=1 + */ + query?: string; + + /** + * Optional fragment component of the DID URI. + * + * @example + * did:web:tbd.website#key-1 + */ + fragment?: string; + + /** + * Optional query parameters in the DID URI. + * + * @example + * did:web:tbd.website?service=files&relativeRef=/whitepaper.pdf + */ + params?: Record; + + /** + * Constructs a new `DidUri` instance. + * + * @param params - An object containing the parameters to be included in the DID URI. + * @param params.method - The name of the DID method. + * @param params.id - The DID method identifier. + * @param params.path - Optional. The path component of the DID URI. + * @param params.query - Optional. The query component of the DID URI. + * @param params.fragment - Optional. The fragment component of the DID URI. + * @param params.params - Optional. The query parameters in the DID URI. + */ + constructor({ method, id, path, query, fragment, params }: { + method: string, + id: string, + path?: string, + query?: string, + fragment?: string, + params?: Record + }) { + this.uri = `did:${method}:${id}`; + this.method = method; + this.id = id; + this.path = path; + this.query = query; + this.fragment = fragment; + this.params = params; + } + + /** + * Parses a DID URI string into its individual components. + * + * @example + * ```ts + * const didUri = DidUri.parse('did:example:123?service=agent&relativeRef=/credentials#degree'); + * + * console.log(didUri.uri) // Output: 'did:example:123' + * console.log(didUri.method) // Output: 'example' + * console.log(didUri.id) // Output: '123' + * console.log(didUri.query) // Output: 'service=agent&relativeRef=/credentials' + * console.log(didUri.fragment) // Output: 'degree' + * console.log(didUri.params) // Output: { service: 'agent', relativeRef: '/credentials' } + * ``` + * + * @params didUriString - The DID URI string to be parsed. + * @returns A `DidUri` object representing the parsed DID URI, or `null` if the input string is not a valid DID URI. + */ + static parse(didUriString: string): DidUri | null { + // Return null if the input string is empty or not provided. + if (!didUriString) return null; + + // Execute the regex pattern on the input string to extract URI components. + const match = DidUri.DID_URI_PATTERN.exec(didUriString); + + // If the pattern does not match, or if the required groups are not found, return null. + if (!match || !match.groups) return null; + + // Extract the method, id, params, path, query, and fragment from the regex match groups. + const { method, id, path, query, fragment } = match.groups; + + // Initialize a new DidUri object with the uri, method and id. + const didUri: DidUri = { + uri: `did:${method}:${id}`, + method, + id, + }; + + // If path is present, add it to the DidUri object. + if (path) didUri.path = path; + + // If query is present, add it to the DidUri object, removing the leading '?'. + if (query) didUri.query = query.slice(1); + + // If fragment is present, add it to the DidUri object, removing the leading '#'. + if (fragment) didUri.fragment = fragment.slice(1); + + // If query params are present, parse them into a key-value object and add to the DidUri object. + if (query) { + const parsedParams = {} as Record; + // Split the query string by '&' to get individual parameter strings. + const paramPairs = query.slice(1).split('&'); + for (const pair of paramPairs) { + // Split each parameter string by '=' to separate keys and values. + const [key, value] = pair.split('='); + parsedParams[key] = value; + } + didUri.params = parsedParams; + } + + return didUri; + } +} \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts new file mode 100644 index 000000000..74b3e706f --- /dev/null +++ b/packages/dids/src/methods/did-jwk.ts @@ -0,0 +1,326 @@ +import type{ AlgorithmIdentifier, CryptoApi, EnclosedSignParams, EnclosedVerifyParams, Jwk, Signer } from '@web5/crypto'; + +import { Convert } from '@web5/common'; + +import type{ Did, DidCreateOptions, DidKeySet, DidMetadata } from './did-method.js'; +import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; + +import { DidUri } from '../did-uri.js'; +import { DidMethod } from './did-method.js'; +import { getVerificationMethodId } from '../utils.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; + +/** + * Specifies options that can be specified when creating a new "did:jwk" Decentralized Identifier + * (DID). + * + * Either the `algorithm` or `keySet` option must be specified. If both are specified, the `keySet` + * option takes precedence. + * + * If given, the `algorithm` must be a valid algorithm identifier supported by the `keyManager` + * provided. + * + * @example + * ```ts + * const keyManager = new LocalKmsCrypto(); + * const did = await DidJwk.create({ + * keyManager, + * options: { algorithm = 'Ed25519' } + * }); + * ``` + */ +export interface DidJwkCreateOptions extends DidCreateOptions { + /** + * Optionally specify the algorithm to be used for key creation. + */ + algorithm?: AlgorithmIdentifier; + + /** + * Optionally specify the key set to be used for DID creation. + */ + keySet?: DidKeySet; +} + +/** + * The `DidJwk` class provides an implementation of the `did:jwk` DID method. +* +* Features: +* - DID Generation: Create new `did:jwk` DIDs. +* - DID Resolution: Resolve a `did:jwk` to its corresponding DID Document. +* - Signature Operations: Sign and verify messages using keys associated with a DID. + * + * @remarks + * The `did:jwk` DID method uses a single JSON Web Key (JWK) to generate a DID and does not rely + * on any external system such as a blockchain or centralized database. This characteristic makes + * it suitable for use cases where a assertions about a DID Subject can be self-verifiable by + * third parties. + * + * The DID URI is formed by Base64URL-encoding the JWK and prefixing with `did:jwk:`. The DID + * Document of a `did:jwk` DID contains a single verification method, which is the JWK used + * to generate the DID. The verification method is identified by the key ID `#0`. + * + * @see {@link https://github.com/quartzjer/did-jwk/blob/main/spec.md | DID JWK Specification} + * + * @example + * ```ts + * // DID Generation + * const did = await DidJwk.create({ keyManager }); + * + * // DID Resolution + * const resolutionResult = await DidJwk.resolve({ did: did.uri }); + * + * // Signature Operations + * const signer = await did.getSigner(); + * const signature = await signer.sign({ data: new TextEncoder().encode('Message') }); + * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature }); + * ``` + */ +export class DidJwk extends DidMethod { + + /** + * Name of the DID method, as defined in the DID JWK specification. + */ + public static methodName = 'jwk'; + + /** + * Creates a new DID using the `did:jwk` method. + * + * @param params - The parameters for the create operation. + * @param params.keyManager - Key Management System (KMS) used to generate keys and sign data. + * @param params.options - Options that can be specified when creating a new DID. + * @returns A Promise resolving to a {@link Did} object representing the new DID. + */ + public static async create({ keyManager, options = {} }: { + keyManager: CryptoApi; + options: DidJwkCreateOptions; + }): Promise { + // Default to using ES256K for key generation if an algorithm is not given. + let { algorithm = 'ES256K', keySet } = options; + + // The public key used to create the DID. + let publicKey: Jwk; + + // If a key set is not given, generate a new key using the specified `algorithm`. + if (!keySet) { + const keyUri = await keyManager.generateKey({ algorithm }); + publicKey = await keyManager.getPublicKey({ keyUri }); + // Include the generated key in the key set that is returned in DID metadata. + keySet = { + keys: [{ + keyUri, + // Since a custom key set was not given, the key is assumed to used for all purposes. + purposes: ['assertionMethod', 'authentication', 'capabilityDelegation', 'capabilityInvocation', 'keyAgreement'] + }] + }; + + } else { + // If a key set is given, it must contain exactly one key. + if (!keySet.keys || keySet.keys.length !== 1) { + throw new Error(`DidJwk: This DID method requires a key set with exactly one key`); + } + + // Retrieve the public key specified in the key set. + const publicKeyUri = keySet.keys[0].keyUri; + publicKey = await keyManager.getPublicKey({ keyUri: publicKeyUri }); + } + + // Serialize the public key JWK to a UTF-8 string and encode to Base64URL format. + const base64UrlEncoded = Convert.object(publicKey).toBase64Url(); + + // Attach the prefix `did:jwk` to form the complete DID URI. + const didUri = `did:${DidJwk.methodName}:${base64UrlEncoded}`; + + // Expand the DID URI string to a DID didDocument. + const didResolutionResult = await DidJwk.resolve(didUri); + const didDocument = didResolutionResult.didDocument as DidDocument; + + // DID Metadata contains only the key set for this DID method. + const metadata: DidMetadata = { keySet }; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + } + + /** + * Given the W3C DID Document of a `did:jwk` DID, return a {@link Signer} that can be used to + * sign messages, credentials, or arbitrary data. + * + * If given, the `keyUri` parameter is used to select a key from the verification methods present + * in the DID Document. For DID JWK, only one verification method can exist so the specified + * `keyUri` must refer to the same key. + * + * If `keyUri` is not given, the first (and only) verification method in the DID Document is used. + * + * @param params - The parameters for the `getSigner` operation. + * @param params.didDocument - DID Document of the DID whose keys will be used to construct the {@link Signer}. + * @param params.keyManager - Crypto API used to sign and verify data. + * @param params.keyUri - Key URI of the key that will be used for sign and verify operations. Optional. + * @returns An instantiated {@link Signer} that can be used to sign and verify data. + */ + public static async getSigner({ didDocument, keyManager, keyUri }: { + didDocument: DidDocument; + keyManager: CryptoApi; + keyUri?: string; + }): Promise { + let publicKey: Jwk | undefined; + + // If a key URI is given, get the public key, which is needed for verify operations. + if (keyUri) { + // Get the public key from the key store, which also verifies that the key is present. + publicKey = await keyManager.getPublicKey({ keyUri }); + // Verify the public key exists in the DID Document. + if (!(await getVerificationMethodId({ didDocument, publicKeyJwk: publicKey }))) { + throw new Error(`DidJwk: Key referenced by '${keyUri}' is not present in the provided DID Document for '${didDocument.id}'`); + } + + } else { + // If a key URI is not given, assume the signing key is the DID's only verification method. + ({ publicKeyJwk: publicKey } = await DidJwk.getSigningMethod({ didDocument }) ?? {}); + if (publicKey === undefined) { + throw new Error(`DidJwk: No verification methods found in the provided DID Document for '${didDocument.id}'`); + } + // Compute the expected key URI of the signing key. + keyUri = await keyManager.getKeyUri({ key: publicKey }); + } + + // Both the `keyUri` and `publicKey` must be known before returning a signer. + if (!(keyUri && publicKey)) { + throw new Error(`DidJwk: Failed to determine the keys needed to create a signer`); + } + + return { + async sign({ data }: EnclosedSignParams): Promise { + const signature = await keyManager.sign({ data, keyUri: keyUri! }); // `keyUri` is guaranteed to be defined at this point. + return signature; + }, + + async verify({ data, signature }: EnclosedVerifyParams): Promise { + const isValid = await keyManager.verify({ data, key: publicKey!, signature }); // `publicKey` is guaranteed to be defined at this point. + return isValid; + } + }; + } + + /** + * Given the W3C DID Document of a `did:jwk` DID, return the verification method that will be used + * for signing messages and credentials. If given, the `methodId` parameter is used to select the + * verification method. If not given, the first verification method in the DID Document is used. + * + * Note that for DID JWK, only one verification method can exist so specifying `methodId` could be + * considered redundant or unnecessar. The option is provided for consistency with other DID + * method implementations. + * + * @param params - The parameters for the `getSigningMethod` operation. + * @param params.didDocument - DID Document to get the verification method from. + * @param params.methodId - ID of the verification method to use for signing. + * @returns Verification method to use for signing. + */ + public static async getSigningMethod({ didDocument, methodId = '#0' }: { + didDocument: DidDocument, + methodId?: string + }): Promise { + + const [, method] = didDocument.id.split(':'); + if (method !== 'jwk') { + throw new Error(`DidJwk: Method not supported: ${method}`); + } + + let didResource: DidVerificationMethod | undefined; + for (let vm of didDocument.verificationMethod ?? []) { + if (vm.id.includes(methodId)) { + didResource = vm; + break; + } + } + + return didResource; + } + + /** + * Resolves a `did:jwk` identifier to a DID Document. + * + * @param didUri - The DID to be resolved. + * @param _options - Optional parameters for resolving the DID. Unused by this DID method. + * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. + */ + public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise { + // Attempt to parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // Attempt to decode the Base64URL-encoded JWK. + let publicKeyJwk: Jwk | undefined; + try { + publicKeyJwk = Convert.base64Url(parsedDid!.id).toObject() as Jwk; + } catch { /* Consume the error so that a DID resolution error can be returned later. */ } + + // If parsing or decoding failed, the DID is invalid. + if (!parsedDid || !publicKeyJwk) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'invalidDid' } + }; + } + + // If the DID method is not "jwk", return an error. + if (parsedDid.method !== DidJwk.methodName) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'methodNotSupported' } + }; + } + + const didDocument: DidDocument = { + '@context': [ + 'https://www.w3.org/ns/did/v1', + 'https://w3id.org/security/suites/jws-2020/v1' + ], + id: parsedDid.uri + }; + + const keyUri = `${didDocument.id}#0`; + + // Set the Verification Method property. + didDocument.verificationMethod = [{ + id : keyUri, + type : 'JsonWebKey2020', + controller : didDocument.id, + publicKeyJwk : publicKeyJwk + }]; + + // Set the Verification Relationship properties. + didDocument.authentication = [keyUri]; + didDocument.assertionMethod = [keyUri]; + didDocument.capabilityInvocation = [keyUri]; + didDocument.capabilityDelegation = [keyUri]; + didDocument.keyAgreement = [keyUri]; + + // If the JWK contains a `use` property with the value "sig" then the `keyAgreement` property + // is not included in the DID Document. If the `use` value is "enc" then only the `keyAgreement` + // property is included in the DID Document. + switch (publicKeyJwk.use) { + case 'sig': { + delete didDocument.keyAgreement; + break; + } + + case 'enc': { + delete didDocument.authentication; + delete didDocument.assertionMethod; + delete didDocument.capabilityInvocation; + delete didDocument.capabilityDelegation; + break; + } + } + + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didDocument, + }; + } +} \ No newline at end of file diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts new file mode 100644 index 000000000..b99439993 --- /dev/null +++ b/packages/dids/src/methods/did-method.ts @@ -0,0 +1,192 @@ +import type { CryptoApi, KeyIdentifier, Signer } from '@web5/crypto'; + +import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationRelationship } from '../types/did-core.js'; + +/** + * Represents a Decentralized Identifier (DID) along with its convenience functions. + */ +export interface Did { + /** + * The DID document associated with this DID. + */ + didDocument: DidDocument; + + /** + * Returns a {@link @web5/crypto#Signer} that can be used to sign messages, credentials, or + * arbitrary data. + * + * If given, the `keyUri` parameter is used to select a key from the verification methods present + * in the DID Document. If `keyUri` is not given, each DID method implementation will select a + * default verification method key from the DID Document. + * + * @param params - The parameters for the `getSigner` operation. + * @param params.keyUri - Key URI of the key that will be used for sign and verify operations. Optional. + * @returns An instantiated {@link Signer} that can be used to sign and verify data. + */ + getSigner: (params?: { keyUri?: string }) => Promise; + + /** + * Key Management System (KMS) used to manage a DIDs keys and sign data. + * + * Each DID method requires at least one key be present in the provided `keyManager`. + */ + keyManager: CryptoApi; + + /** + * @inheritdoc DidMetadata + */ + metadata: DidMetadata; + + /** + * @inheritdoc DidUri#uri + */ + uri: string; +} + +/** + * Represents options during the creation of a Decentralized Identifier (DID). + * + * Implementations of this interface may contain properties and methods that provide specific + * options or metadata during the DID creation processes following specific DID method + * specifications. + */ +export interface DidCreateOptions {} + +/** + * Represents metadata about a DID resulting from create, update, or deactivate operations. + */ +export type DidMetadata = { + /** + * The key set associated with the DID. + */ + keySet: DidKeySet; + + // Additional properties of any type. + [key: string]: any; +} + +/** + * Defines the API for a specific DID method. It includes functionalities for creating and resolving DIDs. + * + * @typeparam T - The type of the DID instance associated with this method. + * @typeparam O - The type of the options used for creating the DID. + */ +export interface DidMethodApi extends DidMethodResolver { + /** + * The name of the DID method. + * + * For example, in the DID `did:example:123456`, "example" would be the method name. + */ + methodName: string; + + new (): DidMethod; + + /** + * Creates a new DID. + * + * This function should generate a new DID in accordance with the DID method specification being + * implemented, using the provided `keyManager`, and optionally, any provided `options`. + * + * @param params - The parameters used to create the DID. + * @param params.keyManager - The cryptographic API used for key management. + * @param params.options - Optional. The options used for creating the DID. + * @returns A promise that resolves to the newly created DID instance. + */ + create(params: { keyManager: CryptoApi, options?: O }): Promise; +} + +/** + * Defines the interface for resolving a DID using a specific DID method. + * + * A DID resolver takes a DID URI as input and returns a {@link DidResolutionResult} object. + * + * @property {string} methodName - The name of the DID method. + * @method resolve - Asynchronous method to resolve a DID URI. Takes the DID URI and optional resolution options. + */ +export interface DidMethodResolver { + /** + * The name of the DID method. + * + * For example, in the DID `did:example:123456`, "example" would be the method name. + */ + methodName: string; + + new (): DidMethod; + + /** + * Resolves a DID URI. + * + * This function should resolve the DID URI in accordance with the DID method specification being + * implemented, using the provided `options`. + * + * @param didUri - The DID URI to be resolved. + * @param options - Optional. The options used for resolving the DID. + * @returns A {@link DidResolutionResult} object containing the DID document and metadata or an error. + */ + resolve(didUri: string, options?: DidResolutionOptions): Promise; +} + +/** + * A set of keys associated with a DID. + * + * The keys in this set are expected to be managed by a Key Management System (KMS) which + * implements the {@link @web5/crypto#CryptoApi | CryptoApi} interface. Examples of such KMS + * implementations include {@link @web5/crypto#LocalKmsCrypto | LocalKmsCrypto} and + * {@link @web5/crypto-aws-kms#AwsKmsCrypto | AwsKmsCrypto}. + */ +export interface DidKeySet { + /** + * An optional array of keys that are managed by a Key Management System (KMS). + */ + keys?: DidKmsKey[]; +} + +/** + * Represents a key managed by a Key Management System (KMS) within the context of a Decentralized + * Identifier (DID). + * + * This interface describes a cryptographic key used in conjunction with DID operations. The key is + * identified by a `keyUri`, and is associated with one or more verification relationship purposes + * within the DID document. + * + * The key referred to by the `keyUri` is expected to be managed by a Key Management System (KMS) + * which implements the {@link @web5/crypto#CryptoApi | CryptoApi} interface. Examples of such KMS + * implementations include {@link @web5/crypto#LocalKmsCrypto | LocalKmsCrypto} and + * {@link @web5/crypto-aws-kms#AwsKmsCrypto | AwsKmsCrypto}. + * + * @example + * ```ts + * const didKmsKey: DidKmsKey = { + * keyUri: 'urn:jwk:vO8jHDKD8dynDvVp8Ea2szjIRz2V-hCMhtmJYOxO4oY', + * purposes: ['assertionMethod', 'authentication'] + * }; + * ``` + * + * @see {@link DidVerificationRelationship} for the list of possible verification relationships that + * can be used to specify the purpose(s) of a key. + */ +export interface DidKmsKey { + /** + * A unique identifier for the key within the KMS. This URI is used to reference and manage the + * key in operations such as signing or encryption. + */ + keyUri: KeyIdentifier; + + /** + * An array of {@link DidVerificationRelationship | Verification Relationships} that the key is + * intended to be used for. Each relationship type specifies how the key can be used in the + * context of the DID, such as for authentication, assertion, key agreement, etc. + */ + purposes: DidVerificationRelationship[]; +} + +/** + * Base abstraction for all Decentralized Identifier (DID) method implementations. + * + * This abstract class serves as a foundational structure upon which specific DID methods + * can be implemented. Subclasses should furnish particular method and data models adherent + * to various DID methods. taking care to adhere to the + * {@link https://www.w3.org/TR/did-core/ | W3C DID Core specification} and the + * respective DID method specifications. + */ +export abstract class DidMethod {} \ No newline at end of file diff --git a/packages/dids/src/methods/did-web.ts b/packages/dids/src/methods/did-web.ts new file mode 100644 index 000000000..8ed80d29e --- /dev/null +++ b/packages/dids/src/methods/did-web.ts @@ -0,0 +1,96 @@ +import type { DidDocument, DidResolutionOptions, DidResolutionResult } from '../types/did-core.js'; + +import { DidUri } from '../did-uri.js'; +import { DidMethod } from './did-method.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; + +/** + * The `DidWeb` class provides an implementation of the `did:web` DID method. + * + * Features: + * - DID Resolution: Resolve a `did:web` to its corresponding DID Document. + * + * @remarks + * The `did:web` method uses a web domain's existing reputation and aims to integrate decentralized + * identities with the existing web infrastructure to drive adoption. It leverages familiar web + * security models and domain ownership to provide accessible, interoperable digital identity + * management. + * + * @see {@link https://w3c-ccg.github.io/did-method-web/ | DID Web Specification} + * + * @example + * ```ts + * // DID Resolution + * const resolutionResult = await DidWeb.resolve({ did: did.uri }); + * ``` + */ +export class DidWeb extends DidMethod { + + /** + * Name of the DID method, as defined in the DID Web specification. + */ + public static methodName = 'web'; + + /** + * Resolves a `did:web` identifier to a DID Document. + * + * @param didUri - The DID to be resolved. + * @param _options - Optional parameters for resolving the DID. Unused by this DID method. + * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. + */ + public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise { + // Attempt to parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // If parsing failed, the DID is invalid. + if (!parsedDid) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'invalidDid' } + }; + } + + // If the DID method is not "web", return an error. + if (parsedDid.method !== DidWeb.methodName) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'methodNotSupported' } + }; + } + + // Replace ":" with "/" in the identifier and prepend "https://" to obtain the fully qualified + // domain name and optional path. + let baseUrl = `https://${parsedDid.id.replace(/:/g, '/')}`; + + // If the domain contains a percent encoded port value, decode the colon. + baseUrl = decodeURIComponent(baseUrl); + + // Append the expected location of the DID document depending on whether a path was specified. + const didDocumentUrl = parsedDid.id.includes(':') ? + `${baseUrl}/did.json` : + `${baseUrl}/.well-known/did.json`; + + try { + // Perform an HTTP GET request to obtain the DID document. + const response = await fetch(didDocumentUrl); + + // If the response status code is not 200, return an error. + if (!response.ok) throw new Error('HTTP error status code returned'); + + // Parse the DID document. + const didDocument = await response.json() as DidDocument; + + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didDocument, + }; + + } catch (error: any) { + // If the DID document could not be retrieved, return an error. + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'notFound' } + }; + } + } +} \ No newline at end of file diff --git a/packages/dids/src/types.ts b/packages/dids/src/types.ts index 06803ba50..a4867568e 100644 --- a/packages/dids/src/types.ts +++ b/packages/dids/src/types.ts @@ -1,282 +1,45 @@ import type { KeyValueStore } from '@web5/common'; -import type { PrivateKeyJwk, PublicKeyJwk } from '@web5/crypto'; -import { DidKeyKeySet } from './did-key.js'; -import { DidIonKeySet } from './did-ion.js'; -import { DidDhtKeySet } from './did-dht.js'; +import type { DidKeySet } from './methods/did-method.js'; +import type { DidDocument, DidResolutionResult } from './types/did-core.js'; -export type DidDereferencingMetadata = { - /** The Media Type of the returned contentStream SHOULD be expressed using this property if - * dereferencing is successful. */ - contentType?: string; - /** - * The error code from the dereferencing process. This property is REQUIRED when there is an - * error in the dereferencing process. The value of this property MUST be a single keyword - * expressed as an ASCII string. The possible property values of this field SHOULD be registered - * in the {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}. - * The DID Core specification defines the following common error values. - * - * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | Section 7.2.2, DID URL Dereferencing Metadata} - */ - error?: - /** The DID URL supplied to the DID URL dereferencing function does not conform to valid - * syntax. */ - | 'invalidDidUrl' - - /** The DID URL dereferencer was unable to find the contentStream resulting from this - * dereferencing request. */ - | 'notFound' - | string; - - /** Additional output metadata generated during DID Resolution. */ - [key: string]: any -} - -/** - * A metadata structure consisting of input options to the dereference function. - * - * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-options} - */ -export interface DidDereferencingOptions { - /** The Media Type that the caller prefers for contentStream. */ - accept?: string; - - /** Additional properties used during DID dereferencing. */ - [key: string]: any; -} - -export type DidDereferencingResult = { - /** - * A metadata structure consisting of values relating to the results of the DID URL dereferencing - * process. This structure is REQUIRED, and in the case of an error in the dereferencing process, - * this MUST NOT be empty. Properties defined by this specification are in 7.2.2 DID URL - * Dereferencing Metadata. If the dereferencing is not successful, this structure MUST contain an - * `error` property describing the error. - */ - dereferencingMetadata: DidDereferencingMetadata; - - /** - * If the `dereferencing` function was called and successful, this MUST contain a resource - * corresponding to the DID URL. The contentStream MAY be a resource such as: - * - a DID document that is serializable in one of the conformant representations - * - a Verification Method - * - a service. - * - any other resource format that can be identified via a Media Type and obtained through the - * resolution process. - * - * If the dereferencing is unsuccessful, this value MUST be empty. - */ - contentStream: DidResource | null; - - /** - * If the dereferencing is successful, this MUST be a metadata structure, but the structure MAY be - * empty. This structure contains metadata about the contentStream. If the contentStream is a DID - * document, this MUST be a didDocumentMetadata structure as described in DID Resolution. If the - * dereferencing is unsuccessful, this output MUST be an empty metadata structure. - */ - contentMetadata: DidDocumentMetadata; -} +// export interface DidMethodOperator { +// new (): DidMethod; +// methodName: string; -export type DidDocument = { - '@context'?: 'https://www.w3.org/ns/did/v1' | string | string[]; - id: string; - alsoKnownAs?: string[]; - controller?: string | string[]; - verificationMethod?: VerificationMethod[]; - service?: DidService[]; - assertionMethod?: VerificationMethod[] | string[]; - authentication?: VerificationMethod[] | string[]; - keyAgreement?: VerificationMethod[] | string[]; - capabilityDelegation?: VerificationMethod[] | string[]; - capabilityInvocation?: VerificationMethod[] | string[]; -} +// create(options: any): Promise; -export type DidDocumentMetadata = { - // indicates the timestamp of the Create operation. ISO8601 timestamp - created?: string - // indicates the timestamp of the last Update operation for the document version which was - // resolved. ISO8601 timestamp - updated?: string - // indicates whether the DID has been deactivated - deactivated?: boolean - // indicates the version of the last Update operation for the document version which - // was resolved - versionId?: string - // indicates the timestamp of the next Update operation if the resolved document version - // is not the latest version of the document. - nextUpdate?: string - // indicates the version of the next Update operation if the resolved document version - // is not the latest version of the document. - nextVersionId?: string - // @see https://www.w3.org/TR/did-core/#dfn-equivalentid - equivalentId?: string - // @see https://www.w3.org/TR/did-core/#dfn-canonicalid - canonicalId?: string - // Additional output metadata generated during DID Resolution. - [key: string]: any -}; +// generateKeySet(): Promise; -export type DidKeySet = DidKeyKeySet | DidIonKeySet | DidDhtKeySet; +// getDefaultSigningKey(options: { didDocument: DidDocument }): Promise; +// } -export type DidKeySetVerificationMethodKey = { - /** Unique identifier for the key in the KeyManager store. */ - keyManagerId?: string; - publicKeyJwk?: PublicKeyJwk; - privateKeyJwk?: PrivateKeyJwk; - relationships: VerificationRelationship[]; -} -export type DidMetadata = { - /** - * Additional properties of any type. - */ - [key: string]: any; -} -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface DidMethod {} -export interface DidMethodApi extends DidMethodOperator, DidMethodResolver { - new (): DidMethod; - methodName: string; -} -export interface DidMethodResolver { - new (): DidMethod; - methodName: string; - resolve(options: { - didUrl: string, - resolutionOptions?: DidResolutionOptions - }): Promise; -} - -export interface DidMethodOperator { - new (): DidMethod; - methodName: string; - - create(options: any): Promise; - - generateKeySet(): Promise; - - getDefaultSigningKey(options: { didDocument: DidDocument }): Promise; -} - -/** - * A DID Resource is either a DID Document, a DID Verification method or a DID Service - */ -export type DidResource = DidDocument | VerificationMethod | DidService - -/** - * Services are used in DID documents to express ways of communicating with the DID subject or associated entities. - * A service can be any type of service the DID subject wants to advertise. - * - * @see {@link https://www.w3.org/TR/did-core/#services} - */ -export type DidService = { - id: string; - type: string; - serviceEndpoint: string | DidServiceEndpoint | DidServiceEndpoint[]; - description?: string; -}; /** - * A service endpoint is a URI (Uniform Resource Identifier) that can be used to interact with the service. - * - * @see {@link https://www.w3.org/TR/did-core/#dfn-serviceendpoint} + * implement this interface to provide your own cache for did resolution results. can be plugged in through Web5 API */ -export interface DidServiceEndpoint { - [key: string]: any; -} - -export interface DwnServiceEndpoint extends DidServiceEndpoint { - encryptionKeys?: string[]; - nodes: string[]; - signingKeys: string[]; -} +export type DidResolverCache = KeyValueStore; -export type DidResolutionMetadata = { +type DidMetadata = { /** - * The Media Type of the returned `didDocumentStream`. This property is REQUIRED if resolution is - * successful and if the `resolveRepresentation` function was called. This property MUST NOT be - * present if the `resolve` function was called. The value of this property MUST be an ASCII - * string that is the Media Type of the conformant representations. The caller of the - * `resolveRepresentation` function MUST use this value when determining how to parse and process - * the `didDocumentStream` returned by this function into the data model. + * Additional properties of any type. */ - contentType?: string - - error?: - /** - * When an unexpected error occurs during DID Resolution or DID URL dereferencing, the value of - * the DID Resolution or DID URL Dereferencing Metadata error property MUST be internalError. - */ - | 'internalError' - - /** - * If an invalid DID is detected during DID Resolution, the value of the - * DID Resolution Metadata error property MUST be invalidDid. - */ - | 'invalidDid' - - /** - * If a DID method is not supported during DID Resolution or DID URL - * dereferencing, the value of the DID Resolution or DID URL Dereferencing - * Metadata error property MUST be methodNotSupported. - */ - | 'methodNotSupported' - - /** - * If during DID Resolution or DID URL dereferencing a DID or DID URL - * doesn't exist, the value of the DID Resolution or DID URL dereferencing - * Metadata error property MUST be notFound. - */ - | 'notFound' - - /** - * If a DID document representation is not supported during DID Resolution - * or DID URL dereferencing, the value of the DID Resolution Metadata error - * property MUST be representationNotSupported. - */ - | 'representationNotSupported' - | string - - /** Additional output metadata generated during DID Resolution. */ - [key: string]: any -}; - -/** - * DID Resolution input metadata. - * - * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options} - */ -export interface DidResolutionOptions { - accept?: string - - // Additional properties used during DID Resolution. - [key: string]: any + [key: string]: any; } -export type DidResolutionResult = { - '@context'?: 'https://w3id.org/did-resolution/v1' | string | string[] - didResolutionMetadata: DidResolutionMetadata - didDocument?: DidDocument - didDocumentMetadata: DidDocumentMetadata -}; - -/** - * implement this interface to provide your own cache for did resolution results. can be plugged in through Web5 API - */ -export type DidResolverCache = KeyValueStore; - /** * Format to document a DID identifier, along with its associated data, * which can be exported, saved to a file, or imported. The intent is * bundle all of the necessary metadata to enable usage of the DID in * different contexts. */ -export interface PortableDid { +interface PortableDid { did: string; /** @@ -312,54 +75,4 @@ export interface PortableDid { * each managed DID and additional properties of any type. */ metadata?: DidMetadata; -} - -export type VerificationMethod = { - id: string; - // one of the valid verification method types as per - // https://www.w3.org/TR/did-spec-registries/#verification-method-types - type: string; - // DID of the key's controller - controller: string; - // a JSON Web Key that conforms to https://datatracker.ietf.org/doc/html/rfc7517 - publicKeyJwk?: PublicKeyJwk; - // an encoded (e.g, base58) key with a Multibase-prefix that conforms to - // https://datatracker.ietf.org/doc/draft-multiformats-multibase/ - publicKeyMultibase?: string; -}; - -export type VerificationRelationship = - /** - * Used to specify how the DID subject is expected to express claims, such - * as for the purposes of issuing a Verifiable Credential - */ - | 'assertionMethod' - - /** - * Used to specify how the DID subject is expected to be authenticated, for - * purposes such as logging into a website or engaging in any sort of - * challenge-response protocol. - */ - | 'authentication' - - /** - * Used to specify how an entity can generate encryption material in order to - * transmit confidential information intended for the DID subject, such as - * for the purposes of establishing a secure communication channel with the - * recipient. - */ - | 'keyAgreement' - - /** - * Used to specify a mechanism that might be used by the DID subject to - * delegate a cryptographic capability to another party, such as delegating - * the authority to access a specific HTTP API to a subordinate. - */ - | 'capabilityDelegation' - - /** - * Used to specify a verification method that might be used by the DID - * subject to invoke a cryptographic capability, such as the authorization - * to update the DID Document. - */ - | 'capabilityInvocation'; \ No newline at end of file +} \ No newline at end of file diff --git a/packages/dids/src/types/did-core.ts b/packages/dids/src/types/did-core.ts new file mode 100644 index 000000000..f2f702279 --- /dev/null +++ b/packages/dids/src/types/did-core.ts @@ -0,0 +1,560 @@ +import { Jwk } from '@web5/crypto'; + +/** + * Represents metadata related to the process of DID dereferencing. + * + * This type includes fields that provide information about the outcome of a DID dereferencing operation, + * including the content type of the returned resource and any errors that occurred during the dereferencing process. + * + * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | DID Core Specification, § DID URL Dereferencing Metadata} + */ +export type DidDereferencingMetadata = { + /** + * The Media Type of the returned contentStream SHOULD be expressed using this property if + * dereferencing is successful. + */ + contentType?: string; + + /** + * The error code from the dereferencing process. This property is REQUIRED when there is an + * error in the dereferencing process. The value of this property MUST be a single keyword + * expressed as an ASCII string. The possible property values of this field SHOULD be registered + * in the {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}. + * The DID Core specification defines the following common error values: + * + * - `invalidDidUrl`: The DID URL supplied to the DID URL dereferencing function does not conform + * to valid syntax. + * - `notFound`: The DID URL dereferencer was unable to find the `contentStream` resulting from + * this dereferencing request. + * + * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | DID Core Specification, § DID URL Dereferencing Metadata} + */ + error?: string; + + // Additional output metadata generated during DID Resolution. + [key: string]: any; +} + +/** + * Represents the options that can be used during the process of DID dereferencing. + * + * This interface allows the caller to specify preferences and additional parameters for the DID + * dereferencing operation. + * + * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-options} + */ +export interface DidDereferencingOptions { + /** The Media Type that the caller prefers for contentStream. */ + accept?: string; + + /** Additional properties used during DID dereferencing. */ + [key: string]: any; +} + +/** + * Represents the result of a DID dereferencing operation. + * + * This type encapsulates the outcomes of the DID URL dereferencing process, including metadata + * about the dereferencing operation, the content stream retrieved (if any), and metadata about the + * content stream. + * + * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core Specification, § DID URL Dereferencing} + */ +export type DidDereferencingResult = { + /** + * A metadata structure consisting of values relating to the results of the DID URL dereferencing + * process. This structure is REQUIRED, and in the case of an error in the dereferencing process, + * this MUST NOT be empty. Properties defined by this specification are in 7.2.2 DID URL + * Dereferencing Metadata. If the dereferencing is not successful, this structure MUST contain an + * `error` property describing the error. + */ + dereferencingMetadata: DidDereferencingMetadata; + + /** + * If the `dereferencing` function was called and successful, this MUST contain a resource + * corresponding to the DID URL. The contentStream MAY be a resource such as: + * - a DID document that is serializable in one of the conformant representations + * - a Verification Method + * - a service. + * - any other resource format that can be identified via a Media Type and obtained through the + * resolution process. + * + * If the dereferencing is unsuccessful, this value MUST be empty. + */ + contentStream: DidResource | null; + + /** + * If the dereferencing is successful, this MUST be a metadata structure, but the structure MAY be + * empty. This structure contains metadata about the contentStream. If the contentStream is a DID + * document, this MUST be a didDocumentMetadata structure as described in DID Resolution. If the + * dereferencing is unsuccessful, this output MUST be an empty metadata structure. + */ + contentMetadata: DidDocumentMetadata; +} + +/** + * A set of data describing the Decentralized Identifierr (DID) subject. + * + * A DID Document contains information associated with the DID, such as cryptographic public keys + * and service endpoints, enabling trustable interactions associated with the DID subject. + * + * - Cryptographic public keys - Used by the DID subject or a DID delegate to authenticate itself + * and prove its association with the DID. + * - Service endpoints - Used to communicate or interact with the DID subject or associated + * entities. Examples include discovery, agent, social networking, file + * storage, and verifiable credential repository services. + * + * A DID Document can be retrieved by resolving a DID, as described in + * {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, § DID Resolution}. + */ +export type DidDocument = { + /** + * A JSON-LD context link, which provides a JSON-LD processor with the information necessary to + * interpret the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'. + */ + '@context'?: 'https://www.w3.org/ns/did/v1' | string | string[]; + + /** + * The DID Subject to which this DID Document pertains. + * + * The `id` property is REQUIRED and must be a valid DID. + * + * @see {@link https://www.w3.org/TR/did-core/#did-subject | DID Core Specification, § DID Subject} + */ + id: string; + + /** + * A DID subject can have multiple identifiers for different purposes, or at different times. + * The assertion that two or more DIDs (or other types of URI) refer to the same DID subject can + * be made using the `alsoKnownAs` property. + * + * @see {@link https://www.w3.org/TR/did-core/#also-known-as | DID Core Specification, § Also Known As} + */ + alsoKnownAs?: string[]; + + /** + * A DID controller is an entity that is authorized to make changes to a DID document. The process + * of authorizing a DID controller is defined by the DID method. + * + * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, § DID Controller} + */ + controller?: string | string[]; + + /** + * A DID document can express verification methods, such as cryptographic public keys, which can + * be used to authenticate or authorize interactions with the DID subject or associated parties. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} + */ + verificationMethod?: DidVerificationMethod[]; + + /** + * The `assertionMethod` verification relationship is used to specify how the DID subject is + * expected to express claims, such as for the purposes of issuing a Verifiable Credential. + * + * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, § Assertion} + */ + assertionMethod?: DidVerificationMethod[] | string[]; + + /** + * The `authentication` verification relationship is used to specify how the DID subject is expected + * to be authenticated, for purposes such as logging into a website or engaging in any sort of + * challenge-response protocol. + + * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, § Authentication} + */ + authentication?: DidVerificationMethod[] | string[]; + + /** + * The `keyAgreement` verification relationship is used to specify how an entity can generate + * encryption material in order to transmit confidential information intended for the DID + * subject, such as for the purposes of establishing a secure communication channel with the + * recipient. + * + * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, § Key Agreement} + */ + keyAgreement?: DidVerificationMethod[] | string[]; + + /** + * The `capabilityDelegation` verification relationship is used to specify a mechanism that might + * be used by the DID subject to delegate a cryptographic capability to another party, such as + * delegating the authority to access a specific HTTP API to a subordinate. + * + * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, § Capability Delegation} + */ + capabilityDelegation?: DidVerificationMethod[] | string[]; + + /** + * The `capabilityInvocation` verification relationship is used to specify a verification method + * that might be used by the DID subject to invoke a cryptographic capability, such as the + * authorization to update the DID Document. + */ + capabilityInvocation?: DidVerificationMethod[] | string[]; + + /** + * Services are used in DID documents to express ways of communicating with the DID subject or + * associated entities. A service can be any type of service the DID subject wants to advertise, + * including decentralized identity management services for further discovery, authentication, + * authorization, or interaction. + * + * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, § Services} + */ + service?: DidService[]; +} + +/** + * Represents metadata about the DID document resulting from a DID resolution operation. + * + * This metadata typically does not change between invocations of the `resolve` and + * `resolveRepresentation` functions unless the DID document changes, as it represents metadata + * about the DID document. + * + * @see {@link https://www.w3.org/TR/did-core/#did-document-metadata | DID Core Specification, § DID Document Metadata} + */ +export type DidDocumentMetadata = { + /** + * Timestamp of the Create operation. + * + * The value of the property MUST be a string formatted as an XML Datetime normalized to + * UTC 00:00:00 and without sub-second decimal precision. For example: `2020-12-20T19:17:47Z`. + */ + created?: string; + + /** + * Timestamp of the last Update operation for the document version which was resolved. + * + * The value of the property MUST follow the same formatting rules as the `created` property. + * The `updated` property is omitted if an Update operation has never been performed on the DID + * document. If an `updated` property exists, it can be the same value as the `created` property + * when the difference between the two timestamps is less than one second. + */ + updated?: string; + + /** + * Whether the DID has been deactivated. + * + * If a DID has been deactivated, DID document metadata MUST include this property with the + * boolean value `true`. If a DID has not been deactivated, this properrty is OPTIONAL, but if + * present, MUST have the boolean value `false`. + */ + deactivated?: boolean; + + /** + * Version ID of the last Update operation for the document version which was resolved. + */ + versionId?: string; + + /** + * Timestamp of the next Update operation if the resolved document version is not the latest + * version of the document. + * + * The value of the property MUST follow the same formatting rules as the `created` property. + */ + nextUpdate?: string; + + /** + * Version ID of the next Update operation if the resolved document version is not the latest + * version of the document. + */ + nextVersionId?: string; + + /** + * A DID method can define different forms of a DID that are logically equivalent. An example is + * when a DID takes one form prior to registration in a verifiable data registry and another form + * after such registration. In this case, the DID method specification might need to express one + * or more DIDs that are logically equivalent to the resolved DID as a property of the DID + * document. This is the purpose of the `equivalentId` property. + * + * A requesting party is expected to retain the values from the id and equivalentId properties to + * ensure any subsequent interactions with any of the values they contain are correctly handled as + * logically equivalent (e.g., retain all variants in a database so an interaction with any one + * maps to the same underlying account). + * + * @see {@link https://www.w3.org/TR/did-core/#dfn-equivalentid | DID Core Specification, § DID Document Metadata} + */ + equivalentId?: string; + + /** + * The `canonicalId` property is identical to the `equivalentId` property except: + * - it is associated with a single value rather than a set + * - the DID is defined to be the canonical ID for the DID subject within the scope of the + * containing DID document. + * + * A requesting party is expected to use the `canonicalId` value as its primary ID value for the + * DID subject and treat all other equivalent values as secondary aliases (e.g., update + * corresponding primary references in their systems to reflect the new canonical ID directive). + * + * @see {@link https://www.w3.org/TR/did-core/#dfn-canonicalid | DID Core Specification, § DID Document Metadata} + */ + canonicalId?: string; + + // Additional output metadata generated during DID Resolution. + [key: string]: any; +}; + +/** + * Represents metadata related to the result of a DID resolution operation. + * + * This type includes fields that provide information about the outcome of a DID resolution process, + * including the content type of the returned DID document and any errors that occurred during the + * resolution process. + * + * This metadata typically changes between invocations of the `resolve` and `resolveRepresentation` + * functions, as it represents data about the resolution process itself. + * + * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata | DID Core Specification, § DID Resolution Metadata} + */ +export type DidResolutionMetadata = { + /** + * The Media Type of the returned `didDocumentStream`. + * + * This property is REQUIRED if resolution is successful and if the `resolveRepresentation` + * function was called. This property MUST NOT be present if the `resolve` function was called. + * The value of this property MUST be an ASCII string that is the Media Type of the conformant + * representations. The caller of the `resolveRepresentation` function MUST use this value when + * determining how to parse and process the `didDocumentStream` returned by this function into the + * data model. + */ + contentType?: string; + + /** + * An error code indicating issues encountered during the DID Resolution or DID URL + * Dereferencing process. + * + * Defined error codes include: + * - `internalError`: An unexpected error occurred during DID Resolution or DID URL + * dereferencing process. + * - `invalidDid`: The provided DID is invalid. + * - `methodNotSupported`: The DID method specified is not supported. + * - `notFound`: The DID or DID URL does not exist. + * - `representationNotSupported`: The DID document representation is not supported. + * - Custom error codes can also be provided as strings. + * + * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata | DID Core Specification, § DID Resolution Metadata} + * @see {@link https://www.w3.org/TR/did-spec-registries/#error | DID Specification Registries, § Error} + */ + error?: string; + + // Additional output metadata generated during DID Resolution. + [key: string]: any; +}; + +/** + * DID Resolution input metadata. +* +* The DID Core specification defines the following common properties: +* - `accept`: The Media Type that the caller prefers for the returned representation of the DID +* Document. +* +* The possible properties within this structure and their possible values are registered in the +* {@link https://www.w3.org/TR/did-spec-registries/#did-resolution-options | DID Specification Registries}. + * + * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options | DID Core Specification, § DID Resolution Options} + */ +export interface DidResolutionOptions { + /** + * The Media Type that the caller prefers for the returned representation of the DID Document. + * + * This property is REQUIRED if the `resolveRepresentation` function was called. This property + * MUST NOT be present if the `resolve` function was called. + * + * The value of this property MUST be an ASCII string that is the Media Type of the conformant + * representations. The caller of the `resolveRepresentation` function MUST use this value when + * determining how to parse and process the `didDocumentStream` returned by this function into the + * data model. + * + * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options | DID Core Specification, § DID Resolution Options} + */ + accept?: string; + + // Additional properties used during DID Resolution. + [key: string]: any; +} + +/** + * Represents the result of a Decentralized Identifier (DID) resolution operation. + * + * This type encapsulates the complete outcome of resolving a DID, including the resolution metadata, + * the DID document (if resolution is successful), and metadata about the DID document. + * + * @see {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, § DID Resolution} + */ +export type DidResolutionResult = { + /** + * A JSON-LD context link, which provides the JSON-LD processor with the information necessary to + * interpret the resolution result JSON. The default context URL is + * 'https://w3id.org/did-resolution/v1'. + */ + '@context'?: 'https://w3id.org/did-resolution/v1' | string | string[]; + + /** + * A metadata structure consisting of values relating to the results of the DID resolution + * process. + * + * This structure is REQUIRED, and in the case of an error in the resolution process, + * this MUST NOT be empty. If the resolution is not successful, this structure MUST contain an + * `error` property describing the error. + * + * @see {@link https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata | DID Core Specification, § DID Resolution Metadata} + */ + didResolutionMetadata: DidResolutionMetadata; + + /** + * The DID document resulting from the resolution process, if successful. + * + * If the `resolve` function was called and successful, this MUST contain a DID document + * corresponding to the DID. If the resolution is unsuccessful, this value MUST be empty. + * + * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, § DID Document} + */ + didDocument: DidDocument | null; + + /** + * Metadata about the DID Document. + * + * This structure contains information about the DID Document like creation and update timestamps, + * deactivation status, versioning information, and other details relevant to the DID Document. + * + * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata | DID Core Specification, § DID Document Metadata} + */ + didDocumentMetadata: DidDocumentMetadata; +}; + +/** + * A DID Resource is either a DID Document, a DID Verification method or a DID Service + */ +export type DidResource = DidDocument | DidService | DidVerificationMethod; + +/** + * Services are used in DID documents to express ways of communicating with the DID subject or + * associated entities. A service can be any type of service the DID subject wants to advertise. + * + * @see {@link https://www.w3.org/TR/did-core/#services} + */ +export type DidService = { + /** + * Identifier of the service. + * + * The `id` property is REQUIRED. It MUST be a URI conforming to + * {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986} and MUST be unique within the + * DID document. + */ + id: string; + + /** + * The type of service being described. + * + * The `type` property is REQUIRED. It MUST be a string. To maximize interoperability, the value + * SHOULD be registered in the + * {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}. Examples of + * service types can be found in + * {@link https://www.w3.org/TR/did-spec-registries/#service-types | § Service Types}. + */ + type: string; + + /** + * A URI that can be used to interact with the DID service. + * + * The value of the `serviceEndpoint` property MUST be a string, an object containing key/value + * pairs, or an array composed of strings or objects. All string values MUST be valid URIs + * conforming to {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986}. + */ + serviceEndpoint: DidServiceEndpoint | DidServiceEndpoint[]; + + // DID methods MAY include additional service properties. + [key: string]: any; +}; + +/** + * A service endpoint is a URI (Uniform Resource Identifier) that can be used to interact with the + * DID service. + * + * The value of the `serviceEndpoint` property MUST be a string or an object containing key/value + * pairs. All string values MUST be valid URIs conforming to + * {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986}. + * + * @see {@link https://www.w3.org/TR/did-core/#dfn-serviceendpoint | RFC3986, § 5.4 Services} + */ +export type DidServiceEndpoint = string | Record; + +/** + * Represents a verification method in the context of a DID document. + * + * A verification method is a mechanism by which a DID controller can cryptographically assert proof + * of ownership or control over a DID or DID document. This can include, but is not limited to, + * cryptographic public keys or other data that can be used to authenticate or authorize actions. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} + */ +export type DidVerificationMethod = { + /** + * The identifier of the verification method, which must be a URI. + */ + id: string; + + /** + * The type of the verification method. + * + * To maximize interoperability this value SHOULD be one of the valid verification method types + * registered in the {@link https://www.w3.org/TR/did-spec-registries/#verification-method-types | DID Specification Registries}. + */ + type: string; + + /** + * The DID of the entity that controls this verification method. + */ + controller: string; + + /** + * Express the public key in JWK format. + * + * (Optional) A JSON Web Key that conforms to {@link https://datatracker.ietf.org/doc/html/rfc7517 | RFC 7517}. + */ + publicKeyJwk?: Jwk; + + /** + * (Optional) A public key encoded with a Multibase-prefix, conforming to the draft Multibase + * specification (https://datatracker.ietf.org/doc/draft-multiformats-multibase/). Typically used + * for expressing keys in formats like base58. + */ + // an encoded (e.g, base58) key with a Multibase-prefix that conforms to + // https://datatracker.ietf.org/doc/draft-multiformats-multibase/ + publicKeyMultibase?: string; +}; + +/** + * Represents the various verification relationships defined in a DID document. + * + * These relationships indicate the intended use of verification methods associated with a DID. Each + * type specifies a particular way in which a verification method (such as a public key) can be used + * by the DID subject. + * + * The DID Core Specification defines the following verification relationships: + * - `assertionMethod`: Specifies how the DID subject is expected to express claims, such as for + * issuing Verifiable Credentials. This relationship is typically used when the + * DID subject is the issuer of a credential. + * + * - `authentication`: Specifies how the DID subject is expected to be authenticated. This is + * commonly used for purposes like logging into a website or participating in + * challenge-response protocols. + * + * - `keyAgreement`: Specifies how an entity can generate encryption material to communicate + * confidentially with the DID subject. Often used in scenarios requiring secure + * communication channels. + * + * - `capabilityDelegation`: Specifies a mechanism used by the DID subject to delegate a + * cryptographic capability to another party. This can include delegating + * access to a specific resource or API. + * + * - `capabilityInvocation`: Specifies a verification method used by the DID subject to invoke a + * cryptographic capability. This is frequently associated with + * authorization actions, like updating the DID Document. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, § Verification Relationships} + */ +export type DidVerificationRelationship = + | 'assertionMethod' + | 'authentication' + | 'keyAgreement' + | 'capabilityDelegation' + | 'capabilityInvocation'; \ No newline at end of file diff --git a/packages/dids/src/utils.ts b/packages/dids/src/utils.ts index d4ed0881f..5ee1258e8 100644 --- a/packages/dids/src/utils.ts +++ b/packages/dids/src/utils.ts @@ -1,92 +1,178 @@ -import type { PublicKeyJwk } from '@web5/crypto'; -import { parse, type ParsedDID } from 'did-resolver'; - -import type { DidDocument, DidResource, VerificationMethod, DidService, DidServiceEndpoint, DwnServiceEndpoint } from './types.js'; - -export interface ParsedDid { - did: string - didUrl: string - method: string - id: string - path?: string - fragment?: string - query?: string - params?: ParsedDID['params'] -} +import type { Jwk } from '@web5/crypto'; + +import { computeJwkThumbprint } from '@web5/crypto'; -export const DID_REGEX = /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\/[^#?]*)?([?][^#]*)?(#.*)?$/; +import type { DidDocument, DidService, DidVerificationMethod } from './types/did-core.js'; /** - * Retrieves services from a given DID document based on provided options. - * If no `id` or `type` filters are provided, all defined services are returned. + * Represents a Decentralized Web Node (DWN) service in a DID Document. * - * Note: The DID document must adhere to the W3C DID specification. + * A DWN DID service is a specialized type of DID service with the `type` set to + * `DecentralizedWebNode`. It includes specific properties `enc` and `sig` that are used to identify + * the public keys that can be used to interact with the DID Subject. The values of these properties + * are strings or arrays of strings containing one or more verification method `id` values present in + * the same DID document. If the `enc` and/or `sig` properties are an array of strings, an entity + * interacting with the DID subject is expected to use the verification methods in the order they + * are listed. * - * @param options - An object containing input parameters for retrieving services. - * @param options.didDocument - The DID document from which services are retrieved. - * @param options.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned. - * @param options.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned. + * @example + * ```ts + * const service: DwnDidService = { + * id: 'did:example:123#dwn', + * type: 'DecentralizedWebNode', + * serviceEndpoint: 'https://dwn.tbddev.org/dwn0', + * enc: 'did:example:123#key-1', + * sig: 'did:example:123#key-2' + * } + * ``` * - * @returns An array of services. If no matching service is found, an empty array is returned. + * @see {@link https://identity.foundation/decentralized-web-node/spec/ | DIF Decentralized Web Node (DWN) Specification} + */ +export interface DwnDidService extends DidService { + /** + * One or more verification method `id` values that can be used to encrypt information + * intended for the DID subject. + */ + enc?: string | string[]; + + /** + * One or more verification method `id` values that will be used by the DID subject to sign data + * or by another entity to verify signatures created by the DID subject. + */ + sig: string | string[]; +} + +/** + * Retrieves services from a given DID document based on provided options. + * If no `id` or `type` filters are provided, all defined services are returned. + * + * The given DID Document must adhere to the + * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}. * * @example + * ```ts + * const didDocument = { ... }; // W3C DID document + * const services = getServices({ didDocument, type: 'DecentralizedWebNode' }); + * ``` * - * const didDoc = { ... }; // W3C DID document - * const services = getServices({ didDocument: didDoc, type: 'DecentralizedWebNode' }); + * @param params - An object containing input parameters for retrieving services. + * @param params.didDocument - The DID document from which services are retrieved. + * @param params.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned. + * @param params.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned. + * @returns An array of services. If no matching service is found, an empty array is returned. */ -export function getServices(options: { - didDocument: DidDocument, - id?: string, - type?: string +export function getServices({ didDocument, id, type }: { + didDocument: DidDocument; + id?: string; + type?: string; }): DidService[] { - const { didDocument, id, type } = options ?? {}; - return didDocument?.service?.filter(service => { if (id && service.id !== id) return false; if (type && service.type !== type) return false; return true; - }) ?? [ ]; + }) ?? []; } -export function getVerificationMethodIds(options: { - didDocument: DidDocument, - publicKeyJwk?: PublicKeyJwk, - publicKeyMultibase?: string -}): string | undefined { - const { didDocument, publicKeyJwk, publicKeyMultibase } = options; +/** + * Retrieves the ID of a verification method from a DID document that matches a specified + * public key. + * + * This function searches the verification methods in a given DID document for a match with the + * provided public key (either in JWK or multibase format). If a matching verification method is + * found, the function returns the method's ID. + * +* +* @example +* ```ts +* const didDocument = { + * // ... contents of a DID document ... + * }; + * const publicKeyJwk = { kty: 'OKP', crv: 'Ed25519', x: '...' }; + * + * const verificationMethodId = await getVerificationMethodId({ + * didDocument, + * publicKeyJwk + * }); + * ``` + * + * @param params - An object containing input parameters for retrieving the verification method ID. + * @param params.didDocument - The DID document to search for the verification method. + * @param params.publicKeyJwk - The public key in JSON Web Key (JWK) format to match against the verification methods in the DID document. + * @param params.publicKeyMultibase - The public key as a multibase encoded string to match against the verification methods in the DID document. + * @returns A promise that resolves with the ID of the matching verification method, or `null` if no match is found. + * @throws Throws an `Error` if the `didDocument` parameter is missing or if the `didDocument` does not contain any verification methods. + */ +export async function getVerificationMethodId({ didDocument, publicKeyJwk, publicKeyMultibase }: { + didDocument: DidDocument; + publicKeyJwk?: Jwk; + publicKeyMultibase?: string; +}): Promise { if (!didDocument) throw new Error(`Required parameter missing: 'didDocument'`); - if (!didDocument.verificationMethod) throw new Error('Given `didDocument` is missing `verificationMethod` entries.'); + if (!didDocument.verificationMethod) throw new Error('Given `didDocument` is missing `verificationMethod` entries'); for (let method of didDocument.verificationMethod) { - if (publicKeyMultibase && 'publicKeyMultibase' in method) { + if (publicKeyMultibase && method.publicKeyMultibase) { if (publicKeyMultibase === method.publicKeyMultibase) { return method.id; } - } else if (publicKeyJwk && 'crv' in publicKeyJwk && - 'publicKeyJwk' in method && 'crv' in method.publicKeyJwk) { - if (publicKeyJwk.crv === method.publicKeyJwk.crv && - publicKeyJwk.x === method.publicKeyJwk.x) { + } else if (publicKeyJwk && method.publicKeyJwk) { + const publicKeyThumbprint = await computeJwkThumbprint({ jwk: publicKeyJwk }); + if (publicKeyThumbprint === await computeJwkThumbprint({ jwk: method.publicKeyJwk })) { return method.id; } } } + + return null; } /** * Retrieves DID verification method types from a given DID document. * - * Note: The DID document must adhere to the W3C DID specification. + * The given DID Document must adhere to the + * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}. * - * @param options - An object containing input parameters for retrieving types. - * @param options.didDocument - The DID document from which types are retrieved. + * @example + * ```ts + * const didDocument = { + * verificationMethod: [ + * { + * 'id' : 'did:example:123#key-0', + * 'type' : 'Ed25519VerificationKey2018', + * 'controller' : 'did:example:123', + * 'publicKeyBase58' : '3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J' + * }, + * { + * 'id' : 'did:example:123#key-1', + * 'type' : 'X25519KeyAgreementKey2019', + * 'controller' : 'did:example:123', + * 'publicKeyBase58' : 'FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x' + * }, + * { + * 'id' : 'did:example:123#key-3', + * 'type' : 'JsonWebKey2020', + * 'controller' : 'did:example:123', + * 'publicKeyJwk' : { + * 'kty' : 'EC', + * 'crv' : 'P-256', + * 'x' : 'Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M', + * 'y' : 'pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk' + * } + * } + * ] + * }, + * const vmTypes = getVerificationMethodTypes({ didDocument }); + * console.log(vmTypes); + * // Output: ['Ed25519VerificationKey2018', 'X25519KeyAgreementKey2019', 'JsonWebKey2020'] + * ``` * + * @param params - An object containing input parameters for retrieving types. + * @param params.didDocument - The DID document from which types are retrieved. * @returns An array of types. If no types were found, an empty array is returned. */ -export function getVerificationMethodTypes(options: { - didDocument: Record +export function getVerificationMethodTypes({ didDocument }: { + didDocument: Record; }): string[] { - const { didDocument } = options; - let types: string[] = []; for (let key in didDocument) { @@ -104,30 +190,137 @@ export function getVerificationMethodTypes(options: { } /** - * Type guard function to check if the given endpoint is a DwnServiceEndpoint. + * Checks if a given object is a {@link DidService}. * - * @param key The endpoint to check. - * @returns True if the endpoint is a DwnServiceEndpoint, false otherwise. + * A {@link DidService} in the context of DID resources must include the properties `id`, `type`, + * and `serviceEndpoint`. The `serviceEndpoint` can be a `DidServiceEndpoint` or an array of + * `DidServiceEndpoint` objects. + * + * @example + * ```ts + * const service = { + * id: "did:example:123#service-1", + * type: "OidcService", + * serviceEndpoint: "https://example.com/oidc" + * }; + * + * if (isDidService(service)) { + * console.log('The object is a DidService'); + * } else { + * console.log('The object is not a DidService'); + * } + * ``` + * + * @param obj - The object to be checked. + * @returns `true` if `obj` is a `DidService`; otherwise, `false`. */ -export function isDwnServiceEndpoint(endpoint: string | DidServiceEndpoint | DidServiceEndpoint[]): endpoint is DwnServiceEndpoint { - return endpoint !== undefined && - typeof endpoint !== 'string' && - !Array.isArray(endpoint) && - 'nodes' in endpoint && - 'signingKeys' in endpoint; +export function isDidService(obj: unknown): obj is DidService { + // Validate that the given value is an object. + if (!obj || typeof obj !== 'object' || obj === null) return false; + + // Validate that the object has the necessary properties of DidService. + return 'id' in obj && 'type' in obj && 'serviceEndpoint' in obj; } -export function parseDid({ didUrl }: { didUrl: string }): ParsedDid | undefined { - const parsedDid: ParsedDid = parse(didUrl); +/** + * Checks if a given object is a {@link DwnDidService}. + * + * A {@link DwnDidService} is defined as {@link DidService} object with a `type` of + * "DecentralizedWebNode" and `enc` and `sig` properties, where both properties are either strings + * or arrays of strings. + * + * @example + * ```ts + * const didDocument: DidDocument = { + * id: 'did:example:123', + * verificationMethod: [ + * { + * id: 'did:example:123#key-1', + * type: 'JsonWebKey2020', + * controller: 'did:example:123', + * publicKeyJwk: { ... } + * }, + * { + * id: 'did:example:123#key-2', + * type: 'JsonWebKey2020', + * controller: 'did:example:123', + * publicKeyJwk: { ... } + * } + * ], + * service: [ + * { + * id: 'did:example:123#dwn', + * type: 'DecentralizedWebNode', + * serviceEndpoint: 'https://dwn.tbddev.org/dwn0', + * enc: 'did:example:123#key-1', + * sig: 'did:example:123#key-2' + * } + * ] + * }; + * + * if (isDwnService(didDocument.service[0])) { + * console.log('The object is a DwnDidService'); + * } else { + * console.log('The object is not a DwnDidService'); + * } + * ``` + * + * @see {@link https://identity.foundation/decentralized-web-node/spec/ | Decentralized Web Node (DWN) Specification} + * + * @param obj - The object to be checked. + * @returns `true` if `obj` is a DwnDidService; otherwise, `false`. + */ +export function isDwnDidService(obj: unknown): obj is DwnDidService { + // Validate that the given value is a {@link DidService}. + if (!isDidService(obj)) return false; + + // Validate that the `type` property is `DecentralizedWebNode`. + if (obj.type !== 'DecentralizedWebNode') return false; + + // Validate that the given object has the `enc` and `sig` properties. + if (!('enc' in obj && 'sig' in obj)) return false; - return parsedDid; + // Validate that the `enc` and `sig` properties are either strings or arrays of strings. + const isStringOrStringArray = (prop: any): boolean => + typeof prop === 'string' || Array.isArray(prop) && prop.every(item => typeof item === 'string'); + return (isStringOrStringArray(obj.enc)) && (isStringOrStringArray(obj.sig)); } /** - * type guard for {@link VerificationMethod} - * @param didResource - the resource to check - * @returns true if the didResource is a `VerificationMethod` + * Checks if a given object is a DID Verification Method. + * + * A {@link DidVerificationMethod} in the context of DID resources must include the properties `id`, + * `type`, and `controller`. + * + * @example + * ```ts + * const resource = { + * id : "did:example:123#0", + * type : "JsonWebKey2020", + * controller : "did:example:123", + * publicKeyJwk : { ... } + * }; + * + * if (isDidVerificationMethod(resource)) { + * console.log('The resource is a DidVerificationMethod'); + * } else { + * console.log('The resource is not a DidVerificationMethod'); + * } + * ``` + * + * @param obj - The object to be checked. + * @returns `true` if `obj` is a `DidVerificationMethod`; otherwise, `false`. */ -export function isVerificationMethod(didResource: DidResource): didResource is VerificationMethod { - return didResource && 'id' in didResource && 'type' in didResource && 'controller' in didResource; +export function isDidVerificationMethod(obj: unknown): obj is DidVerificationMethod { + // Validate that the given value is an object. + if (!obj || typeof obj !== 'object' || obj === null) return false; + + // Validate that the object has the necessary properties of a DidVerificationMethod. + if (!('id' in obj && 'type' in obj && 'controller' in obj)) return false; + + if (typeof obj.id !== 'string') return false; + if (typeof obj.type !== 'string') return false; + if (typeof obj.controller !== 'string') return false; + + return true; } \ No newline at end of file diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/did-jwk.spec.ts new file mode 100644 index 000000000..dae8c1060 --- /dev/null +++ b/packages/dids/tests/did-jwk.spec.ts @@ -0,0 +1,342 @@ +import type { Jwk } from '@web5/crypto'; + +import sinon from 'sinon'; +import { expect } from 'chai'; +import { Ed25519, LocalKmsCrypto, Secp256k1 } from '@web5/crypto'; + +import type { DidDocument } from '../src/types/did-core.js'; +import type { DidKeySet } from '../src/methods/did-method.js'; + +import { DidJwk } from '../src/methods/did-jwk.js'; +import DidJwkResolveTestVector from '../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; + +describe('DidJwk', () => { + let keyManager: LocalKmsCrypto; + + before(() => { + keyManager = new LocalKmsCrypto(); + }); + + describe('create()', () => { + it('creates a DID and generates keys using the given algorithm', async () => { + const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); + + // Verify expected result. + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri'); + expect(did.metadata).to.have.property('keySet'); + expect(did.metadata.keySet).to.have.property('keys'); + expect(did.metadata.keySet.keys).to.have.length(1); + expect(did.metadata.keySet.keys?.[0]).to.have.property('keyUri'); + expect(did.metadata.keySet.keys?.[0]).to.have.property('purposes'); + }); + + it('creates a DID using any signature algorithm supported by the provided KMS', async () => { + expect( + await DidJwk.create({ keyManager, options: { algorithm: 'ES256K' } }) + ).to.have.property('uri'); + + expect( + await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }) + ).to.have.property('uri'); + }); + + it('creates a DID using the given keySet', async () => { + const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); + const keySet: DidKeySet = { keys: [{ keyUri, purposes: ['authentication'] }] }; + const did = await DidJwk.create({ keyManager, options: { keySet } }); + + expect(did).to.have.property('uri'); + expect(did.metadata.keySet).to.deep.equal(keySet); + }); + + it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { + // Generate a random Ed25519 private key. + let privateKey = await Ed25519.generateKey(); + + // Add the `sig` key use property. + privateKey.use = 'sig'; + + // Import the private key into the key manager. + const keyUri = await keyManager.importKey({ key: privateKey }); + + // Create a key set with the imported key. + const keySet: DidKeySet = { keys: [{ keyUri, purposes: ['authentication'] }] }; + + // Create the DID using the key set. + let did = await DidJwk.create({ keyManager, options: { keySet } }); + + // Verify the DID document does not contain the `keyAgreement` relationship. + expect(did.didDocument).to.not.have.property('keyAgreement'); + }); + + it(`only specifies 'keyAgreement' relationship when JWK use is 'enc'`, async () => { + // Generate a random secp256k1 private key. + let privateKey = await Secp256k1.generateKey(); + + // Add the `enc` key use property. + privateKey.use = 'enc'; + + // Import the private key into the key manager. + const keyUri = await keyManager.importKey({ key: privateKey }); + + // Create a key set with the imported key. + const keySet: DidKeySet = { keys: [{ keyUri, purposes: ['authentication'] }] }; + + // Create the DID using the key set. + let did = await DidJwk.create({ keyManager, options: { keySet } }); + + // Verrify the DID document does not contain any verification relationships other than + // `keyAgreement`. + expect(did.didDocument).to.have.property('keyAgreement'); + expect(did.didDocument).to.not.have.property('assertionMethod'); + expect(did.didDocument).to.not.have.property('authentication'); + expect(did.didDocument).to.not.have.property('capabilityDelegation'); + expect(did.didDocument).to.not.have.property('capabilityInvocation'); + }); + + it('throws an error if the key set is empty', async () => { + try { + await DidJwk.create({ keyManager, options: { keySet: {} } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('exactly one key'); + } + }); + + it('throws an error if the key set contains two or more keys', async () => { + const keyUri = 'did:jwk:fake'; + + try { + await DidJwk.create({ + keyManager, + options: { + keySet: { + keys: [ + { keyUri, purposes: ['authentication'] }, + { keyUri, purposes: ['authentication'] } + ] + } + } + }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('exactly one key'); + } + }); + }); + + describe('getSigner()', () => { + it('creates valid signatures that can be verified', async () => { + const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); + + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + let keyManagerMock: any; + let publicKey: Jwk; + let didDocument: DidDocument; + + beforeEach(() => { + // Mock for CryptoApi + keyManagerMock = { + digest : sinon.stub(), + generateKey : sinon.stub(), + getKeyUri : sinon.stub(), + getPublicKey : sinon.stub(), + sign : sinon.stub(), + verify : sinon.stub(), + }; + + // Example public key in JWK format + publicKey = { + kty : 'OKP', + use : 'sig', + crv : 'Ed25519', + kid : '...', + x : 'abc123', + alg : 'EdDSA' + }; + + // Example DID Document + didDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:jwk:example', + verificationMethod : [{ + id : 'did:jwk:example#0', + type : 'JsonWebKey2020', + controller : 'did:jwk:example', + publicKeyJwk : publicKey, + }], + }; + + keyManagerMock.getKeyUri.resolves('urn:jwk:example'); // Mock key URI retrieval + keyManagerMock.getPublicKey.resolves(publicKey); // Mock public key retrieval + keyManagerMock.sign.resolves(new Uint8Array(64).fill(0)); // Mock signature creation + keyManagerMock.verify.resolves(true); // Mock verification result + }); + + it('returns a signer with sign and verify functions', async () => { + const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); + + expect(signer).to.be.an('object'); + expect(signer).to.have.property('sign').that.is.a('function'); + expect(signer).to.have.property('verify').that.is.a('function'); + }); + + it('sign function should call keyManager.sign with correct parameters', async () => { + const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); + const dataToSign = new Uint8Array([0x00, 0x01]); + + await signer.sign({ data: dataToSign }); + + expect(keyManagerMock.sign.calledOnce).to.be.true; + expect(keyManagerMock.sign.calledWith(sinon.match({ data: dataToSign }))).to.be.true; + }); + + it('verify function should call keyManager.verify with correct parameters', async () => { + const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); + const dataToVerify = new Uint8Array([0x00, 0x01]); + const signature = new Uint8Array([0x01, 0x02]); + + await signer.verify({ data: dataToVerify, signature }); + + expect(keyManagerMock.verify.calledOnce).to.be.true; + expect(keyManagerMock.verify.calledWith(sinon.match({ data: dataToVerify, signature }))).to.be.true; + }); + + it('uses the provided keyUri to fetch the public key', async () => { + const keyUri = 'some-key-uri'; + keyManagerMock.getPublicKey.withArgs({ keyUri }).resolves(publicKey); + + const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock, keyUri }); + + expect(signer).to.be.an('object'); + expect(keyManagerMock.getPublicKey.calledWith({ keyUri })).to.be.true; + }); + + it('handles undefined params', async function () { + // Create a `did:jwk` DID. + const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); + + // Simulate the creation of a signer with undefined params + const signer = await did.getSigner({ }); + + // Note: Since this test does not interact with an actual keyManager, it primarily ensures + // that the method doesn't break with undefined params. + expect(signer).to.have.property('sign'); + expect(signer).to.have.property('verify'); + }); + + it('throws an error if the keyUri does not match any key in the DID Document', async () => { + const keyUri = 'nonexistent-key-uri'; + keyManagerMock.getPublicKey.withArgs({ keyUri }).resolves({ ...publicKey, x: 'def456' }); + + try { + await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock, keyUri }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include(`is not present in the provided DID Document for '${didDocument.id}'`); + } + }); + + it('throws an error if no verification methods are found in the DID Document', async () => { + // Example DID Document with no verification methods + didDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:jwk:...', + verificationMethod : [], // Empty array indicates no verification methods + }; + + try { + await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('No verification methods found'); + } + }); + + it('throws an error if the keys needed to create a signer are not determined', async function () { + keyManagerMock.getKeyUri.resolves(undefined); // Resolves to undefined to simulate missing publicKey + + try { + await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('Failed to determine the keys needed to create a signer'); + } + }); + }); + + describe('getSigningMethod()', () => { + it('handles didDocuments missing verification methods', async function () { + const result = await DidJwk.getSigningMethod({ + didDocument: { id: 'did:jwk:123' } + }); + + expect(result).to.be.undefined; + }); + + it('throws an error if a non-jwk method is used', async function () { + // Example DID Document with a non-jwk method + const didDocument: DidDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:example:123', + verificationMethod : [ + { + id : 'did:example:123#0', + type : 'JsonWebKey2020', + controller : 'did:example:123', + publicKeyJwk : {} as Jwk + } + ], + }; + + try { + await DidJwk.getSigningMethod({ didDocument }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.equal('DidJwk: Method not supported: example'); + } + }); + }); + + describe('resolve()', () => { + it('returns an error due to DID parsing failing', async function () { + const invalidDidUri = 'did:invalidFormat'; + const resolutionResult = await DidJwk.resolve(invalidDidUri); + expect(resolutionResult.didResolutionMetadata.error).to.equal('invalidDid'); + }); + + it('returns an error due to failing to decode the publicKeyJwk', async function () { + const didUriWithInvalidEncoding = 'did:jwk:invalidEncoding'; + const resolutionResult = await DidJwk.resolve(didUriWithInvalidEncoding); + expect(resolutionResult.didResolutionMetadata.error).to.equal('invalidDid'); + }); + + it('returns an error because the DID method is not "jwk"', async function () { + const didUriWithDifferentMethod = 'did:notjwk:eyJmb28iOiJiYXIifQ'; + const resolutionResult = await DidJwk.resolve(didUriWithDifferentMethod); + expect(resolutionResult.didResolutionMetadata.error).to.equal('methodNotSupported'); + }); + }); + + describe('Web5TestVectorsDidJwk', () => { + it('resolve', async () => { + for (const vector of DidJwkResolveTestVector.vectors) { + const didResolutionResult = await DidJwk.resolve(vector.input); + + expect(didResolutionResult).to.deep.equal(vector.output); + } + }); + }); +}); \ No newline at end of file diff --git a/packages/dids/tests/did-uri.spec.ts b/packages/dids/tests/did-uri.spec.ts new file mode 100644 index 000000000..8f9cf0772 --- /dev/null +++ b/packages/dids/tests/did-uri.spec.ts @@ -0,0 +1,188 @@ +import { expect } from 'chai'; + +import { DidUri } from '../src/did-uri.js'; + +describe('DidUri', () => { + it('constructor', () => { + const didUriComponents = { + method : 'example', + id : '123', + path : '/path', + query : 'versionId=1', + fragment : 'key1', + params : { versionId: '1' }, + }; + + const didUri = new DidUri(didUriComponents); + + expect(didUri).to.deep.equal({ ...didUriComponents, uri: 'did:example:123' }); + }); + + describe('parse()', () => { + it('parses a basic DID URI', () => { + const didUri = DidUri.parse('did:example:123'); + + expect(didUri).to.deep.equal({ + uri : 'did:example:123', + method : 'example', + id : '123', + }); + }); + + it('parses a DID URI with unusual identifier characters', () => { + let didUri = DidUri.parse('did:123:test::test2'); + expect(didUri).to.deep.equal({ + method : '123', + id : 'test::test2', + uri : 'did:123:test::test2', + }); + + didUri = DidUri.parse('did:method:%12%AF'); + expect(didUri).to.deep.equal({ + method : 'method', + id : '%12%AF', + uri : 'did:method:%12%AF', + }); + + didUri = DidUri.parse('did:web:example.com%3A8443'); + expect(didUri).to.deep.equal({ + uri : 'did:web:example.com%3A8443', + method : 'web', + id : 'example.com%3A8443', + }); + + didUri = DidUri.parse('did:web:example.com:path:some%2Bsubpath'); + expect(didUri).to.deep.equal({ + uri : 'did:web:example.com:path:some%2Bsubpath', + method : 'web', + id : 'example.com:path:some%2Bsubpath', + }); + }); + + it('parses a DID URI with a path', () => { + const didUri = DidUri.parse('did:example:123/path'); + + expect(didUri).to.deep.equal({ + uri : 'did:example:123', + method : 'example', + id : '123', + path : '/path', + }); + }); + + it('parses a DID URI with a query', () => { + const didUri = DidUri.parse('did:example:123?versionId=1'); + + expect(didUri).to.deep.equal({ + uri : 'did:example:123', + method : 'example', + id : '123', + query : 'versionId=1', + params : { versionId: '1' }, + }); + }); + + it('parses a DID URI with a fragment', () => { + const didUri = DidUri.parse('did:example:123#key-1'); + + expect(didUri).to.deep.equal({ + uri : 'did:example:123', + method : 'example', + id : '123', + fragment : 'key-1', + }); + }); + + it('parses a DID URI with an identifier containing an underscore', () => { + const didUri = DidUri.parse('did:example:abcdefg_123456790'); + + expect(didUri).to.deep.equal({ + uri : 'did:example:abcdefg_123456790', + method : 'example', + id : 'abcdefg_123456790', + }); + }); + + it('parses a complex DID URI with all components', () => { + const didUri = DidUri.parse('did:example:123/some/path?versionId=1#key1'); + + expect(didUri).to.deep.equal({ + uri : 'did:example:123', + method : 'example', + id : '123', + path : '/some/path', + query : 'versionId=1', + fragment : 'key1', + params : { versionId: '1' }, + }); + }); + + it('parses DID URIs with various combinations of components', () => { + expect( + DidUri.parse('did:uport:123/some/path#fragment=123') + ).to.deep.equal({ + uri : 'did:uport:123', + method : 'uport', + id : '123', + path : '/some/path', + fragment : 'fragment=123', + }); + + expect( + DidUri.parse('did:example:123?service=agent&relativeRef=/credentials#degree') + ).to.deep.equal({ + uri : 'did:example:123', + method : 'example', + id : '123', + query : 'service=agent&relativeRef=/credentials', + fragment : 'degree', + params : { + service : 'agent', + relativeRef : '/credentials', + }, + }); + + expect( + DidUri.parse('did:example:test:123/some/path?versionId=1#key1') + ).to.deep.equal({ + uri : 'did:example:test:123', + method : 'example', + id : 'test:123', + path : '/some/path', + query : 'versionId=1', + fragment : 'key1', + params : { versionId: '1' }, + }); + }); + + it('extracts ION DID long form identifier from a DID URI', async () => { + const { uri } = DidUri.parse( + 'did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19' + ) ?? {}; + + expect(uri).to.equal('did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19'); + }); + + it('extracts ION DID long form identifier from a DID URI with query and fragment', async () => { + const { uri } = DidUri.parse( + 'did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19?service=files&relativeRef=/credentials#degree' + ) ?? {}; + + expect(uri).to.equal('did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19'); + }); + + it('returns null for an invalid DID URI', () => { + expect(DidUri.parse('')).to.equal(null); + expect(DidUri.parse('not-a-did-uri')).to.equal(null); + expect(DidUri.parse('did:')).to.equal(null); + expect(DidUri.parse('did:uport')).to.equal(null); + expect(DidUri.parse('did:uport:')).to.equal(null); + expect(DidUri.parse('did:uport:1234_12313***')).to.equal(null); + expect(DidUri.parse('123')).to.equal(null); + expect(DidUri.parse('did:method:%12%1')).to.equal(null); + expect(DidUri.parse('did:method:%1233%Ay')).to.equal(null); + expect(DidUri.parse('did:CAP:id')).to.equal(null); + expect(DidUri.parse('did:method:id::anotherid%r9')).to.equal(null); + }); + }); +}); \ No newline at end of file diff --git a/packages/dids/tests/did-web.spec.ts b/packages/dids/tests/did-web.spec.ts new file mode 100644 index 000000000..36d9c02e5 --- /dev/null +++ b/packages/dids/tests/did-web.spec.ts @@ -0,0 +1,69 @@ +import sinon from 'sinon'; +import { expect } from 'chai'; + +import { DidWeb } from '../src/methods/did-web.js'; +import DidWebResolveTestVector from '../../../test-vectors/did_web/resolve.json' assert { type: 'json' }; + +describe('DidWeb', () => { + describe('resolve()', () => { + it(`returns a 'notFound' error if the HTTP GET response is not status code 200`, async () => { + // Setup stub so that a mocked response is returned rather than calling over the network. + let fetchStub = sinon.stub(globalThis as any, 'fetch'); + fetchStub.callsFake(() => Promise.resolve(fetchFailedResponse())); + + const resolutionResult = await DidWeb.resolve('did:web:non-existent-domain.com'); + + expect(resolutionResult.didResolutionMetadata.error).to.equal('notFound'); + + fetchStub.restore(); + }); + }); + + describe('Web5TestVectorsDidJwk', () => { + let fetchStub: sinon.SinonStub; + beforeEach(() => { + // Setup stub so that a mocked response is returned rather than calling over the network. + fetchStub = sinon.stub(globalThis as any, 'fetch'); + }); + + afterEach(() => { + fetchStub.restore(); + }); + + it('resolve', async () => { + for (const vector of DidWebResolveTestVector.vectors) { + + // Only mock the response if the test vector contains a `mockServer` property. + if (vector.input.mockServer) { + const mockResponses = vector.input.mockServer as { [url: string]: any }; + fetchStub.callsFake((url: string) => { + if (url in mockResponses) return Promise.resolve(fetchOkResponse(mockResponses[url])); + }); + } + + const didResolutionResult = await DidWeb.resolve(vector.input.didUri); + + expect(didResolutionResult.didDocument).to.deep.equal(vector.output.didDocument); + expect(didResolutionResult.didDocumentMetadata).to.deep.equal(vector.output.didDocumentMetadata); + expect(didResolutionResult.didResolutionMetadata).to.deep.equal(vector.output.didResolutionMetadata); + } + }); + }); +}); + +// Helper function to create a mocked fetch response that is successful and returns the given +// response. +const fetchFailedResponse = () => ({ + status : 404, + statusText : 'Not Found', + ok : false +}); + +// Helper function to create a mocked fetch response that is successful and returns the given +// response. +const fetchOkResponse = (response: any) => ({ + status : 200, + statusText : 'OK', + ok : true, + json : async () => Promise.resolve(response) +}); \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/did-utils.ts b/packages/dids/tests/fixtures/test-vectors/did-utils.ts index 0aed2d3de..05e86166f 100644 --- a/packages/dids/tests/fixtures/test-vectors/did-utils.ts +++ b/packages/dids/tests/fixtures/test-vectors/did-utils.ts @@ -103,7 +103,7 @@ export const didDocumentIdTestVectors = [ x : 'k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI' }, }, - output: undefined + output: null } ]; @@ -220,29 +220,29 @@ export const didDocumentTypeTestVectors = [ 'id' : 'did:example:123#key-0', 'type' : 'Ed25519VerificationKey2018', 'controller' : 'did:example:123', - 'publicKeyBase58' : '3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J' // external (property name) + 'publicKeyBase58' : '3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J' }, { 'id' : 'did:example:123#key-1', 'type' : 'X25519KeyAgreementKey2019', 'controller' : 'did:example:123', - 'publicKeyBase58' : 'FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x' // external (property name) + 'publicKeyBase58' : 'FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x' }, { 'id' : 'did:example:123#key-2', 'type' : 'EcdsaSecp256k1VerificationKey2019', 'controller' : 'did:example:123', - 'publicKeyBase58' : 'ns2aFDq25fEV1NUd3wZ65sgj5QjFW8JCAHdUJfLwfodt' // external (property name) + 'publicKeyBase58' : 'ns2aFDq25fEV1NUd3wZ65sgj5QjFW8JCAHdUJfLwfodt' }, { 'id' : 'did:example:123#key-3', 'type' : 'JsonWebKey2020', 'controller' : 'did:example:123', 'publicKeyJwk' : { - 'kty' : 'EC', // external (property name) - 'crv' : 'P-256', // external (property name) - 'x' : 'Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M', // external (property name) - 'y' : 'pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk' // external (property name) + 'kty' : 'EC', + 'crv' : 'P-256', + 'x' : 'Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M', + 'y' : 'pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk' } } ] diff --git a/packages/dids/tests/utils.spec.ts b/packages/dids/tests/utils.spec.ts index 59160fa12..75221c30b 100644 --- a/packages/dids/tests/utils.spec.ts +++ b/packages/dids/tests/utils.spec.ts @@ -1,55 +1,395 @@ import { expect } from 'chai'; +import type { DidDocument } from '../src/types/did-core.js'; + import { - getVerificationMethodIds, + getServices, + isDidService, + isDwnDidService, + getVerificationMethodId, + isDidVerificationMethod, getVerificationMethodTypes, - parseDid, } from '../src/utils.js'; -import { didDocumentIdTestVectors, didDocumentTypeTestVectors } from './fixtures/test-vectors/did-utils.js'; +import { + didDocumentIdTestVectors, + didDocumentTypeTestVectors, +} from './fixtures/test-vectors/did-utils.js'; describe('DID Utils', () => { - describe('getVerificationMethodIds()', () => { + describe('getServices()', () => { + let didDocument: DidDocument = { + id : 'did:example:123', + service : [ + { id: 'service1', type: 'TypeA', serviceEndpoint: 'http://example.com/service1' }, + { id: 'service2', type: 'TypeB', serviceEndpoint: 'http://example.com/service2' }, + { id: 'service3', type: 'TypeA', serviceEndpoint: 'http://example.com/service3' } + ] + }; + + it('returns all services if no id or type filter is provided', () => { + const services = getServices({ didDocument }); + expect(services).to.have.lengthOf(3); + }); + + it('should filter services by id', () => { + const services = getServices({ didDocument, id: 'service1' }); + expect(services).to.have.lengthOf(1); + expect(services[0].id).to.equal('service1'); + }); + + it('returns an empty array if no services are present', () => { + const emptyDidDocument = {} as DidDocument; + const services = getServices({ didDocument: emptyDidDocument }); + expect(services).to.be.an('array').that.is.empty; + }); + + it('should filter services by type', () => { + const services = getServices({ didDocument, type: 'TypeA' }); + expect(services).to.have.lengthOf(2); + services.forEach(service => expect(service.type).to.equal('TypeA')); + }); + + it('returns an empty array if no service matches the specified type', () => { + const services = getServices({ didDocument, type: 'NonExistingType' }); + expect(services).to.be.an('array').that.is.empty; + }); + + it('should filter services by both id and type', () => { + const services = getServices({ didDocument, id: 'service3', type: 'TypeA' }); + expect(services).to.have.lengthOf(1); + expect(services[0].id).to.equal('service3'); + expect(services[0].type).to.equal('TypeA'); + }); + + it('returns an empty array if no service matches both the specified id and type', () => { + const services = getServices({ didDocument, id: 'service3', type: 'TypeB' }); + expect(services).to.be.an('array').that.is.empty; + }); + + it('returns an empty array if didDocument is null', () => { + // @ts-expect-error - Testing invalid input + const services = getServices({ didDocument: null }); + expect(services).to.be.an('array').that.is.empty; + }); + + it('returns an empty array if didDocument is undefined', () => { + // @ts-expect-error - Testing invalid input + const services = getServices({ didDocument: undefined }); + expect(services).to.be.an('array').that.is.empty; + }); + }); + + describe('getVerificationMethodId()', () => { for (const vector of didDocumentIdTestVectors) { - it(`passes test vector ${vector.id}`, () => { - const methodIds = getVerificationMethodIds(vector.input as any); + it(`passes test vector ${vector.id}`, async () => { + const methodIds = await getVerificationMethodId(vector.input as any); expect(methodIds).to.deep.equal(vector.output); }); } }); - describe('getTypesFromDocument()', () => { + describe('getVerificationMethodTypes()', () => { for (const vector of didDocumentTypeTestVectors) { it(`passes test vector ${vector.id}`, () => { const types = getVerificationMethodTypes(vector.input); expect(types).to.deep.equal(vector.output); }); } + + it('returns an empty array if no verification methods are present', () => { + const emptyDidDocument = {} as DidDocument; + const types = getVerificationMethodTypes({ didDocument: emptyDidDocument }); + expect(types).to.be.an('array').that.is.empty; + }); + + it('throws an error when didDocument is not provided', async () => { + try { + // @ts-expect-error - Testing invalid input + await getVerificationMethodId({ }); + throw new Error('Test failed - error not thrown'); + } catch (error: any) { + expect(error.message).to.include('parameter missing'); + } + }); + + it('throws an error when didDocument is missing verificationMethod entries', async () => { + const didDocumentWithoutVerificationMethod = { + id : 'did:example:123', + verificationMethod : undefined + }; + + try { + await getVerificationMethodId({ didDocument: didDocumentWithoutVerificationMethod, publicKeyJwk: undefined }); + throw new Error('Test failed - error not thrown'); + } catch (error: any) { + expect(error.message).to.equal('Given `didDocument` is missing `verificationMethod` entries'); + } + }); }); - describe('parseDid()', () => { - it('extracts ION DID long form identifier from DID URL', async () => { - const { did } = parseDid({ - didUrl: 'did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19' - }) ?? {}; + describe('isDidService', () => { + it('returns true for a valid DidService object', () => { + const validService = { + id : 'did:example:123#service-1', + type : 'OidcService', + serviceEndpoint : 'https://example.com/oidc' + }; + expect(isDidService(validService)).to.be.true; + }); + + it('returns false for an object missing the id property', () => { + const noIdService = { + type : 'OidcService', + serviceEndpoint : 'https://example.com/oidc' + }; + expect(isDidService(noIdService)).to.be.false; + }); + + it('returns false for an object missing the type property', () => { + const noTypeService = { + id : 'did:example:123#service-1', + serviceEndpoint : 'https://example.com/oidc' + }; + expect(isDidService(noTypeService)).to.be.false; + }); + + it('returns false for an object missing the serviceEndpoint property', () => { + const noEndpointService = { + id : 'did:example:123#service-1', + type : 'OidcService' + }; + expect(isDidService(noEndpointService)).to.be.false; + }); - expect(did).to.equal('did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19'); + it('returns false for a null object', () => { + expect(isDidService(null)).to.be.false; }); - it('extracts ION DID long form identifier from DID URL with query and fragment', async () => { - const { did } = parseDid({ - didUrl: 'did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19?service=agent&relativeRef=/credentials#degree' - }) ?? {}; + it('returns false for an undefined object', () => { + expect(isDidService(undefined)).to.be.false; + }); - expect(did).to.equal('did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19'); + it('returns false for a non-object value', () => { + expect(isDidService('string')).to.be.false; + expect(isDidService(123)).to.be.false; + expect(isDidService(true)).to.be.false; }); - it('extracts query and fragment from DID URL', () => { - const { fragment, query } = parseDid({ - didUrl: 'did:example:123?service=agent&relativeRef=/credentials#degree' - }) ?? {}; + it('returns false for an empty object', () => { + expect(isDidService({})).to.be.false; + }); + + it('returns false for an object with extra properties', () => { + const extraPropsService = { + id : 'did:example:123#service-1', + type : 'OidcService', + serviceEndpoint : 'https://example.com/oidc', + extraProp : 'extraValue' + }; + expect(isDidService(extraPropsService)).to.be.true; // Note: Extra properties do not invalidate a DidService. + }); + }); + + describe('isDwnDidService', () => { + it('returns true for a valid DwnDidService object', () => { + const validDwnService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + enc : 'did:example:123#key-1', + sig : 'did:example:123#key-2' + }; + expect(isDwnDidService(validDwnService)).to.be.true; + }); + + it('returns false for a non-DwnDidService type', () => { + const nonDwnService = { + id : 'did:example:123#service', + type : 'SomeOtherType', + serviceEndpoint : 'https://service.example.org', + enc : 'did:example:123#key-1', + sig : 'did:example:123#key-2' + }; + expect(isDwnDidService(nonDwnService)).to.be.false; + }); + + it('returns false for missing enc property', () => { + const missingEncService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + sig : 'did:example:123#key-2' + }; + expect(isDwnDidService(missingEncService)).to.be.false; + }); + + it('returns false for missing sig property', () => { + const missingSigService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + enc : 'did:example:123#key-1' + }; + expect(isDwnDidService(missingSigService)).to.be.false; + }); + + it('returns false for invalid enc property type', () => { + const invalidEncService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + enc : 123, + sig : 'did:example:123#key-2' + }; + expect(isDwnDidService(invalidEncService)).to.be.false; + }); + + it('returns false for invalid sig property type', () => { + const invalidSigService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + enc : 'did:example:123#key-1', + sig : true + }; + expect(isDwnDidService(invalidSigService)).to.be.false; + }); + + it('returns false for an array of non-string in enc', () => { + const arrayEncService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + enc : [123, 'did:example:123#key-1'], + sig : 'did:example:123#key-2' + }; + expect(isDwnDidService(arrayEncService)).to.be.false; + }); + + it('returns false for an array of non-string in sig', () => { + const arraySigService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://dwn.example.org', + enc : 'did:example:123#key-1', + sig : ['did:example:123#key-2', null] + }; + expect(isDwnDidService(arraySigService)).to.be.false; + }); + + it('returns false for a null object', () => { + expect(isDwnDidService(null)).to.be.false; + }); + + it('returns false for an undefined object', () => { + expect(isDwnDidService(undefined)).to.be.false; + }); + + it('returns false for a non-object value', () => { + expect(isDwnDidService('string')).to.be.false; + expect(isDwnDidService(123)).to.be.false; + expect(isDwnDidService(true)).to.be.false; + }); + + it('returns false for an object not adhering to DidService structure', () => { + const invalidStructureService = { + id : 'did:example:123#dwn', + type : 'DecentralizedWebNode', + wrongProperty : 'https://dwn.example.org', + enc : 'did:example:123#key-1', + sig : 'did:example:123#key-2' + }; + expect(isDwnDidService(invalidStructureService)).to.be.false; + }); + + it('returns false for an empty object', () => { + expect(isDwnDidService({})).to.be.false; + }); + }); + + describe('isDidVerificationMethod', () => { + it('returns true for a valid DidVerificationMethod object', () => { + const validVerificationMethod = { + id : 'did:example:123#0', + type : 'JsonWebKey2020', + controller : 'did:example:123', + publicKeyJwk : {} + }; + expect(isDidVerificationMethod(validVerificationMethod)).to.be.true; + }); + + it('returns false for an object missing the id property', () => { + const missingId = { + type : 'JsonWebKey2020', + controller : 'did:example:123', + publicKeyJwk : {} + }; + expect(isDidVerificationMethod(missingId)).to.be.false; + }); + + it('returns false for an object missing the type property', () => { + const missingType = { + id : 'did:example:123#0', + controller : 'did:example:123', + publicKeyJwk : {} + }; + expect(isDidVerificationMethod(missingType)).to.be.false; + }); + + it('returns false for an object missing the controller property', () => { + const missingController = { + id : 'did:example:123#0', + type : 'JsonWebKey2020', + publicKeyJwk : {} + }; + expect(isDidVerificationMethod(missingController)).to.be.false; + }); + + it('returns false for an object with incorrect property types', () => { + expect(isDidVerificationMethod({ + id : 123, + type : {}, + controller : false + })).to.be.false; + expect(isDidVerificationMethod({ + id : 'did:example:123', + type : {}, + controller : false + })).to.be.false; + expect(isDidVerificationMethod({ + id : 'did:example:123', + type : 'JsonWebKey2020', + controller : false + })).to.be.false; + }); + + it('returns false for a null object', () => { + expect(isDidVerificationMethod(null)).to.be.false; + }); + + it('returns false for an undefined object', () => { + expect(isDidVerificationMethod(undefined)).to.be.false; + }); + + it('returns false for a non-object value', () => { + expect(isDidVerificationMethod('string')).to.be.false; + expect(isDidVerificationMethod(123)).to.be.false; + expect(isDidVerificationMethod(true)).to.be.false; + }); + + it('returns false for an empty object', () => { + expect(isDidVerificationMethod({})).to.be.false; + }); - expect(fragment).to.equal('degree'); - expect(query).to.equal('service=agent&relativeRef=/credentials'); + it('returns true for an object with extra properties', () => { + const extraProps = { + id : 'did:example:123#0', + type : 'JsonWebKey2020', + controller : 'did:example:123', + publicKeyJwk : {}, + extra : 'extraValue' + }; + expect(isDidVerificationMethod(extraProps)).to.be.true; }); }); }); \ No newline at end of file From 1187a09b5cd3e405d99a2af713eed7727066b036 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Mon, 15 Jan 2024 06:51:59 -0500 Subject: [PATCH 06/39] Add utility type to @web5/common Signed-off-by: Frank Hinek --- packages/common/src/type-utils.ts | 53 ++++++++++++++++++++++++++++- packages/common/src/types.ts | 7 +--- packages/dids/tests/did-jwk.spec.ts | 10 +++++- packages/dids/tests/did-web.spec.ts | 51 ++++++++++++++++----------- 4 files changed, 94 insertions(+), 27 deletions(-) diff --git a/packages/common/src/type-utils.ts b/packages/common/src/type-utils.ts index dbf14d310..ff121f1ef 100644 --- a/packages/common/src/type-utils.ts +++ b/packages/common/src/type-utils.ts @@ -72,6 +72,34 @@ export function isDefined(arg: T): arg is Exclude { return arg !== null && typeof arg !== 'undefined'; } +/** + * Utility type that transforms a type `T` to have only certain keys `K` as required, while the + * rest remain optional, except for keys specified in `O`, which are omitted entirely. + * + * This type is useful when you need a variation of a type where only specific properties are + * required, and others are either optional or not included at all. It allows for more flexible type + * definitions based on existing types without the need to redefine them. + * + * @template T - The original type to be transformed. + * @template K - The keys of `T` that should be required. + * @template O - The keys of `T` that should be omitted from the resulting type (optional). + * + * @example + * ```ts + * // Given an interface + * interface Example { + * requiredProp: string; + * optionalProp?: number; + * anotherOptionalProp?: boolean; + * } + * + * // Making 'optionalProp' required and omitting 'anotherOptionalProp' + * type ModifiedExample = RequireOnly; + * // Result: { requiredProp?: string; optionalProp: number; } + * ``` + */ +export type RequireOnly = Required> & Omit, O>; + /** * universalTypeOf * @@ -114,4 +142,27 @@ export function universalTypeOf(value: unknown) { const [_, type] = match as RegExpMatchArray; return type; -} \ No newline at end of file +} + +/** + * Utility type to extract the type resolved by a Promise. + * + * This type unwraps the type `T` from `Promise` if `T` is a Promise, otherwise returns `T` as + * is. It's useful in situations where you need to handle the type returned by a promise-based + * function in a synchronous context, such as defining types for test vectors or handling return + * types in non-async code blocks. + * + * @template T - The type to unwrap from the Promise. + * + * @example + * ```ts + * // For a Promise type, it extracts the resolved type. + * type AsyncNumber = Promise; + * type UnwrappedNumber = UnwrapPromise; // number + * + * // For a non-Promise type, it returns the type as is. + * type StringValue = string; + * type UnwrappedString = UnwrapPromise; // string + * ``` + */ +export type UnwrapPromise = T extends Promise ? U : T; \ No newline at end of file diff --git a/packages/common/src/types.ts b/packages/common/src/types.ts index cd24722c8..59e0800e6 100644 --- a/packages/common/src/types.ts +++ b/packages/common/src/types.ts @@ -40,9 +40,4 @@ export interface KeyValueStore { * @returns A promise that resolves when the value has been set. */ set(key: K, value: V): Promise; -} - -/** - * Represents an object type where a subset of keys are required and everything else is optional. - */ -export type RequireOnly = Required> & Omit, O>; \ No newline at end of file +} \ No newline at end of file diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/did-jwk.spec.ts index dae8c1060..e14c8887e 100644 --- a/packages/dids/tests/did-jwk.spec.ts +++ b/packages/dids/tests/did-jwk.spec.ts @@ -1,4 +1,5 @@ import type { Jwk } from '@web5/crypto'; +import type { UnwrapPromise } from '@web5/common'; import sinon from 'sinon'; import { expect } from 'chai'; @@ -332,7 +333,14 @@ describe('DidJwk', () => { describe('Web5TestVectorsDidJwk', () => { it('resolve', async () => { - for (const vector of DidJwkResolveTestVector.vectors) { + type TestVector = { + description: string; + input: Parameters[0]; + output: UnwrapPromise>; + errors: boolean; + }; + + for (const vector of DidJwkResolveTestVector.vectors as unknown as TestVector[]) { const didResolutionResult = await DidJwk.resolve(vector.input); expect(didResolutionResult).to.deep.equal(vector.output); diff --git a/packages/dids/tests/did-web.spec.ts b/packages/dids/tests/did-web.spec.ts index 36d9c02e5..a208a3b61 100644 --- a/packages/dids/tests/did-web.spec.ts +++ b/packages/dids/tests/did-web.spec.ts @@ -1,9 +1,28 @@ +import type { UnwrapPromise } from '@web5/common'; + import sinon from 'sinon'; import { expect } from 'chai'; import { DidWeb } from '../src/methods/did-web.js'; import DidWebResolveTestVector from '../../../test-vectors/did_web/resolve.json' assert { type: 'json' }; +// Helper function to create a mocked fetch response that is successful and returns the given +// response. +const fetchFailedResponse = () => ({ + status : 404, + statusText : 'Not Found', + ok : false +}); + +// Helper function to create a mocked fetch response that is successful and returns the given +// response. +const fetchOkResponse = (response: any) => ({ + status : 200, + statusText : 'OK', + ok : true, + json : async () => Promise.resolve(response) +}); + describe('DidWeb', () => { describe('resolve()', () => { it(`returns a 'notFound' error if the HTTP GET response is not status code 200`, async () => { @@ -21,6 +40,7 @@ describe('DidWeb', () => { describe('Web5TestVectorsDidJwk', () => { let fetchStub: sinon.SinonStub; + beforeEach(() => { // Setup stub so that a mocked response is returned rather than calling over the network. fetchStub = sinon.stub(globalThis as any, 'fetch'); @@ -31,11 +51,21 @@ describe('DidWeb', () => { }); it('resolve', async () => { - for (const vector of DidWebResolveTestVector.vectors) { + type TestVector = { + description: string; + input: { + didUri: Parameters[0]; + mockServer: { [url: string]: any }; + }; + output: UnwrapPromise>; + errors: boolean; + }; + + for (const vector of DidWebResolveTestVector.vectors as unknown as TestVector[]) { // Only mock the response if the test vector contains a `mockServer` property. if (vector.input.mockServer) { - const mockResponses = vector.input.mockServer as { [url: string]: any }; + const mockResponses = vector.input.mockServer; fetchStub.callsFake((url: string) => { if (url in mockResponses) return Promise.resolve(fetchOkResponse(mockResponses[url])); }); @@ -49,21 +79,4 @@ describe('DidWeb', () => { } }); }); -}); - -// Helper function to create a mocked fetch response that is successful and returns the given -// response. -const fetchFailedResponse = () => ({ - status : 404, - statusText : 'Not Found', - ok : false -}); - -// Helper function to create a mocked fetch response that is successful and returns the given -// response. -const fetchOkResponse = (response: any) => ({ - status : 200, - statusText : 'OK', - ok : true, - json : async () => Promise.resolve(response) }); \ No newline at end of file From b8cd77e96c32da1387d9179b6b44c086b58be607 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Mon, 15 Jan 2024 06:55:08 -0500 Subject: [PATCH 07/39] Improve DID Utility functions Signed-off-by: Frank Hinek --- packages/dids/src/methods/did-jwk.ts | 8 +- packages/dids/src/utils.ts | 138 +++-- .../tests/fixtures/test-vectors/did-utils.ts | 253 -------- .../utils/get-verification-method-by-key.json | 541 ++++++++++++++++++ .../utils/get-verification-method-types.json | 169 ++++++ .../utils/get-verification-methods.json | 175 ++++++ packages/dids/tests/utils.spec.ts | 95 ++- 7 files changed, 1048 insertions(+), 331 deletions(-) delete mode 100644 packages/dids/tests/fixtures/test-vectors/did-utils.ts create mode 100644 packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-by-key.json create mode 100644 packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-types.json create mode 100644 packages/dids/tests/fixtures/test-vectors/utils/get-verification-methods.json diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 74b3e706f..73453690a 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -7,12 +7,12 @@ import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerific import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; -import { getVerificationMethodId } from '../utils.js'; +import { getVerificationMethodByKey } from '../utils.js'; import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; /** - * Specifies options that can be specified when creating a new "did:jwk" Decentralized Identifier - * (DID). + * Defines the set of options available when creating a new Decentralized Identifier (DID) with the + * 'did:jwk' method. * * Either the `algorithm` or `keySet` option must be specified. If both are specified, the `keySet` * option takes precedence. @@ -175,7 +175,7 @@ export class DidJwk extends DidMethod { // Get the public key from the key store, which also verifies that the key is present. publicKey = await keyManager.getPublicKey({ keyUri }); // Verify the public key exists in the DID Document. - if (!(await getVerificationMethodId({ didDocument, publicKeyJwk: publicKey }))) { + if (!(await getVerificationMethodByKey({ didDocument, publicKeyJwk: publicKey }))) { throw new Error(`DidJwk: Key referenced by '${keyUri}' is not present in the provided DID Document for '${didDocument.id}'`); } diff --git a/packages/dids/src/utils.ts b/packages/dids/src/utils.ts index 5ee1258e8..588650241 100644 --- a/packages/dids/src/utils.ts +++ b/packages/dids/src/utils.ts @@ -2,7 +2,12 @@ import type { Jwk } from '@web5/crypto'; import { computeJwkThumbprint } from '@web5/crypto'; -import type { DidDocument, DidService, DidVerificationMethod } from './types/did-core.js'; +import type { + DidService, + DidDocument, + DidVerificationMethod, + DidVerificationRelationship, +} from './types/did-core.js'; /** * Represents a Decentralized Web Node (DWN) service in a DID Document. @@ -43,7 +48,8 @@ export interface DwnDidService extends DidService { } /** - * Retrieves services from a given DID document based on provided options. + * Retrieves services from a given DID document, optionally filtered by `id` or `type`. + * * If no `id` or `type` filters are provided, all defined services are returned. * * The given DID Document must adhere to the @@ -74,51 +80,51 @@ export function getServices({ didDocument, id, type }: { } /** - * Retrieves the ID of a verification method from a DID document that matches a specified + * Retrieves a verification method object from a DID document if there is a match for the given * public key. * * This function searches the verification methods in a given DID document for a match with the * provided public key (either in JWK or multibase format). If a matching verification method is - * found, the function returns the method's ID. - * -* -* @example -* ```ts -* const didDocument = { - * // ... contents of a DID document ... - * }; - * const publicKeyJwk = { kty: 'OKP', crv: 'Ed25519', x: '...' }; - * - * const verificationMethodId = await getVerificationMethodId({ - * didDocument, - * publicKeyJwk - * }); - * ``` - * + * found it is returned. If no match is found `null` is returned. + * + * + * @example + * ```ts + * const didDocument = { + * // ... contents of a DID document ... + * }; + * const publicKeyJwk = { kty: 'OKP', crv: 'Ed25519', x: '...' }; + * + * const verificationMethod = await getVerificationMethodByKey({ + * didDocument, + * publicKeyJwk + * }); + * ``` + * * @param params - An object containing input parameters for retrieving the verification method ID. * @param params.didDocument - The DID document to search for the verification method. * @param params.publicKeyJwk - The public key in JSON Web Key (JWK) format to match against the verification methods in the DID document. * @param params.publicKeyMultibase - The public key as a multibase encoded string to match against the verification methods in the DID document. - * @returns A promise that resolves with the ID of the matching verification method, or `null` if no match is found. + * @returns A promise that resolves with the matching verification method, or `null` if no match is found. * @throws Throws an `Error` if the `didDocument` parameter is missing or if the `didDocument` does not contain any verification methods. */ -export async function getVerificationMethodId({ didDocument, publicKeyJwk, publicKeyMultibase }: { +export async function getVerificationMethodByKey({ didDocument, publicKeyJwk, publicKeyMultibase }: { didDocument: DidDocument; publicKeyJwk?: Jwk; publicKeyMultibase?: string; -}): Promise { - if (!didDocument) throw new Error(`Required parameter missing: 'didDocument'`); - if (!didDocument.verificationMethod) throw new Error('Given `didDocument` is missing `verificationMethod` entries'); +}): Promise { + // Collect all verification methods from the DID document. + const verificationMethods = getVerificationMethods({ didDocument }); - for (let method of didDocument.verificationMethod) { - if (publicKeyMultibase && method.publicKeyMultibase) { - if (publicKeyMultibase === method.publicKeyMultibase) { - return method.id; - } - } else if (publicKeyJwk && method.publicKeyJwk) { + for (let method of verificationMethods) { + if (publicKeyJwk && method.publicKeyJwk) { const publicKeyThumbprint = await computeJwkThumbprint({ jwk: publicKeyJwk }); if (publicKeyThumbprint === await computeJwkThumbprint({ jwk: method.publicKeyJwk })) { - return method.id; + return method; + } + } else if (publicKeyMultibase && method.publicKeyMultibase) { + if (publicKeyMultibase === method.publicKeyMultibase) { + return method; } } } @@ -127,7 +133,56 @@ export async function getVerificationMethodId({ didDocument, publicKeyJwk, publi } /** - * Retrieves DID verification method types from a given DID document. + * Retrieves all verification methods from a given DID document, including embedded methods. + * + * This function consolidates all verification methods into a single array for easy access and + * processing. It checks both the primary `verificationMethod` array and the individual verification + * relationship properties `authentication`, `assertionMethod`, `keyAgreement`, + * `capabilityInvocation`, and `capabilityDelegation` for embedded methods. + * + * The given DID Document must adhere to the + * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}. + * + * @example + * ```ts + * const didDocument = { ... }; // W3C DID document + * const verificationMethods = getVerificationMethods({ didDocument }); + * ``` + * + * @param params - An object containing input parameters for retrieving verification methods. + * @param params.didDocument - The DID document from which verification methods are retrieved. + * @returns An array of `DidVerificationMethod`. If no verification methods are found, an empty array is returned. + * @throws Throws an `TypeError` if the `didDocument` parameter is missing. + */ +export function getVerificationMethods({ didDocument }: { + didDocument: DidDocument; +}): DidVerificationMethod[] { + if (!didDocument) throw new TypeError(`Required parameter missing: 'didDocument'`); + + const verificationMethods: DidVerificationMethod[] = []; + + // Check the 'verificationMethod' array. + verificationMethods.push(...didDocument?.verificationMethod?.filter(isDidVerificationMethod) ?? []); + + // Define the verification relationship properties to check. + const verificationRelationships: DidVerificationRelationship[] = [ + 'authentication', + 'assertionMethod', + 'keyAgreement', + 'capabilityInvocation', + 'capabilityDelegation', + ]; + + // Check verification relationship properties for embedded verification methods. + verificationRelationships.forEach((relationship) => { + verificationMethods.push(...(didDocument[relationship] as any[])?.filter(isDidVerificationMethod) ?? []); + }); + + return verificationMethods; +} + +/** + * Retrieves all DID verification method types from a given DID document. * * The given DID Document must adhere to the * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}. @@ -171,22 +226,15 @@ export async function getVerificationMethodId({ didDocument, publicKeyJwk, publi * @returns An array of types. If no types were found, an empty array is returned. */ export function getVerificationMethodTypes({ didDocument }: { - didDocument: Record; + didDocument: DidDocument; }): string[] { - let types: string[] = []; - - for (let key in didDocument) { - if (typeof didDocument[key] === 'object') { - types = types.concat(getVerificationMethodTypes({ - didDocument: didDocument[key] - })); + // Collect all verification methods from the DID document. + const verificationMethods = getVerificationMethods({ didDocument }); - } else if (key === 'type') { - types.push(didDocument[key]); - } - } + // Map to extract 'type' from each verification method. + const types = verificationMethods.map(method => method.type); - return [...new Set(types)]; // return only unique types + return [...new Set(types)]; // Return only unique types. } /** diff --git a/packages/dids/tests/fixtures/test-vectors/did-utils.ts b/packages/dids/tests/fixtures/test-vectors/did-utils.ts deleted file mode 100644 index 05e86166f..000000000 --- a/packages/dids/tests/fixtures/test-vectors/did-utils.ts +++ /dev/null @@ -1,253 +0,0 @@ -const didDocumentForIdTestVectors = { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1', - 'https://w3id.org/security/suites/ed25519-2020/v1', - ], - id : 'did:method:alice', - verificationMethod : [ - { - id : 'did:method:alice#key-1', - type : 'JsonWebKey2020', - controller : 'did:method:alice', - publicKeyJwk : { - alg : 'EdDSA', - kty : 'OKP', - crv : 'Ed25519', - x : 'GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc' - } - }, - { - id : 'did:method:alice#key-2', - type : 'Ed25519VerificationKey2020', - controller : 'did:method:alice', - publicKeyMultibase : 'z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd' - }, - ], - 'authentication': [ - 'did:method:alice#key-1', - { - id : 'did:method:alice#key-3', - type : 'JsonWebKey2020', - controller : 'did:method:alice', - publicKeyJwk : { - alg : 'EdDSA', - kty : 'OKP', - crv : 'Ed25519', - x : 'k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI' - }, - }, - ], - 'keyAgreement': [ - { - id : 'did:method:alice#key-5', - type : 'JsonWebKey2020', - controller : 'did:method:alice', - publicKeyJwk : { - alg : 'EdDSA', - kty : 'OKP', - crv : 'X25519', - x : 'SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA' - }, - }, - { - id : 'did:method:alice#key-6', - type : 'X25519KeyAgreementKey2020', - controller : 'did:method:alice', - publicKeyMultibase : 'z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d' - }, - ] -}; - -export const didDocumentIdTestVectors = [ - { - id : 'did.getIdByKey.1', - input : { - didDocument : didDocumentForIdTestVectors, - publicKeyJwk : { - kty : 'OKP', - crv : 'Ed25519', - x : 'GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc' - }, - }, - output: 'did:method:alice#key-1' - }, - { - id : 'did.getIdByKey.2', - input : { - didDocument : didDocumentForIdTestVectors, - publicKeyMultibase : 'z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd', - }, - output: 'did:method:alice#key-2' - }, - { - id : 'did.getIdByKey.3', - input : { - didDocument : didDocumentForIdTestVectors, - publicKeyJwk : { - kty : 'OKP', - crv : 'Ed25519', - x : 'k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI' - }, - publicKeyMultibase: 'z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd', - }, - output: 'did:method:alice#key-2' - }, - { - id : 'did.getIdByKey.4', - input : { - didDocument : didDocumentForIdTestVectors, - publicKeyJwk : { - kty : 'OKP', - crv : 'Ed25519', - x : 'k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI' - }, - }, - output: null - } -]; - -export const didDocumentTypeTestVectors = [ - { - id : 'did.getTypes.1', - input : { - didDocument: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/ed25519-2020/v1', - 'https://w3id.org/security/suites/x25519-2020/v1' - ], - 'id' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - 'type' : 'Ed25519VerificationKey2020', - 'controller' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - 'publicKeyMultibase' : 'z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp' - }, - { - 'id' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6LShs9GGnqk85isEBzzshkuVWrVKsRp24GnDuHk8QWkARMW', - 'type' : 'X25519KeyAgreementKey2020', - 'controller' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - 'publicKeyMultibase' : 'z6LShs9GGnqk85isEBzzshkuVWrVKsRp24GnDuHk8QWkARMW' - } - ], - 'authentication': [ - 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - { - 'id' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV', - 'type' : 'Ed25519VerificationKey2020', - 'controller' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - 'publicKeyMultibase' : 'zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV' - } - ], - 'assertionMethod': [ - 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - { - 'id' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MknGc3ocHs3zdPiJbnaaqDi58NGb4pk1Sp9WxWufuXSdxf', - 'type' : 'Ed25519VerificationKey2020', - 'controller' : 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp', - 'publicKeyMultibase' : 'z6MknGc3ocHs3zdPiJbnaaqDi58NGb4pk1Sp9WxWufuXSdxf' - } - ], - 'capabilityDelegation': [ - 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp' - ], - 'capabilityInvocation': [ - 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp' - ], - 'keyAgreement': [ - 'did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6LShs9GGnqk85isEBzzshkuVWrVKsRp24GnDuHk8QWkARMW' - ] - }, - }, - output: ['Ed25519VerificationKey2020', 'X25519KeyAgreementKey2020'] - }, - - { - id : 'did.getTypes.2', - input : { - didDocument: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'ZuVpK6HnahBtV1Y_jhnYK-fqHAz3dXmWXT_h-J7SL6I' - } - } - ], - 'assertionMethod': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'authentication': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityDelegation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityInvocation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ] - }, - }, - output: ['JsonWebKey2020'] - }, - - // Source: https://w3c.github.io/did-core/#example-did-document-with-different-verification-method-types - { - id : 'did.type.w3c.32', - input : { - didDocument: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/ed25519-2018/v1', - 'https://w3id.org/security/suites/x25519-2019/v1', - 'https://w3id.org/security/suites/secp256k1-2019/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'verificationMethod': [ - { - 'id' : 'did:example:123#key-0', - 'type' : 'Ed25519VerificationKey2018', - 'controller' : 'did:example:123', - 'publicKeyBase58' : '3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J' - }, - { - 'id' : 'did:example:123#key-1', - 'type' : 'X25519KeyAgreementKey2019', - 'controller' : 'did:example:123', - 'publicKeyBase58' : 'FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x' - }, - { - 'id' : 'did:example:123#key-2', - 'type' : 'EcdsaSecp256k1VerificationKey2019', - 'controller' : 'did:example:123', - 'publicKeyBase58' : 'ns2aFDq25fEV1NUd3wZ65sgj5QjFW8JCAHdUJfLwfodt' - }, - { - 'id' : 'did:example:123#key-3', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:example:123', - 'publicKeyJwk' : { - 'kty' : 'EC', - 'crv' : 'P-256', - 'x' : 'Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M', - 'y' : 'pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk' - } - } - ] - }, - }, - output: ['Ed25519VerificationKey2018', 'X25519KeyAgreementKey2019', 'EcdsaSecp256k1VerificationKey2019', 'JsonWebKey2020'] - } -]; \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-by-key.json b/packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-by-key.json new file mode 100644 index 000000000..6ff6b5122 --- /dev/null +++ b/packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-by-key.json @@ -0,0 +1,541 @@ +{ + "description": "DID Utils getVerificationMethodByKey test vectors", + "vectors": [ + { + "description": "returns verification method of given key in JWK format", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "verificationMethod": [ + { + "type": "JsonWebKey2020", + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0", + "controller": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", + "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", + "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", + "alg": "ES256K" + } + } + ], + "authentication": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "assertionMethod": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "capabilityInvocation": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "capabilityDelegation": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ] + }, + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", + "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", + "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", + "alg": "ES256K" + } + }, + "output": { + "type": "JsonWebKey2020", + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0", + "controller": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", + "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", + "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", + "alg": "ES256K" + } + }, + "errors": false + }, + { + "description": "returns verification method of given key in multibase format", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:method:alice", + "verificationMethod": [ + { + "id": "did:method:alice#key-1", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc" + } + }, + { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + } + ], + "authentication": [ + "did:method:alice#key-1", + { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + } + ], + "keyAgreement": [ + { + "id": "did:method:alice#key-5", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "X25519", + "x": "SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA" + } + }, + { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + } + ] + }, + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + }, + "output": { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + }, + "errors": false + }, + { + "description": "returns embedded verification method of given key in JWK format", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:method:alice", + "verificationMethod": [ + { + "id": "did:method:alice#key-1", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc" + } + }, + { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + } + ], + "authentication": [ + "did:method:alice#key-1", + { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + } + ], + "keyAgreement": [ + { + "id": "did:method:alice#key-5", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "X25519", + "x": "SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA" + } + }, + { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + } + ] + }, + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + }, + "output": { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + }, + "errors": false + }, + { + "description": "returns embedded verification method of given key in multibase format", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:method:alice", + "verificationMethod": [ + { + "id": "did:method:alice#key-1", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc" + } + }, + { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + } + ], + "authentication": [ + "did:method:alice#key-1", + { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + } + ], + "keyAgreement": [ + { + "id": "did:method:alice#key-5", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "X25519", + "x": "SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA" + } + }, + { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + } + ] + }, + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + }, + "output": { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + }, + "errors": false + }, + { + "description": "returns publicKeyJwk match before publicKeyMultibase if both are given", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:method:alice", + "verificationMethod": [ + { + "id": "did:method:alice#key-1", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc" + } + }, + { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + } + ], + "authentication": [ + "did:method:alice#key-1", + { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + } + ], + "keyAgreement": [ + { + "id": "did:method:alice#key-5", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "X25519", + "x": "SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA" + } + }, + { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + } + ] + }, + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + }, + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + }, + "output": { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + }, + "errors": false + }, + { + "description": "returns null if no match is found", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:method:alice", + "verificationMethod": [ + { + "id": "did:method:alice#key-1", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc" + } + }, + { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + } + ], + "authentication": [ + "did:method:alice#key-1", + { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + } + ], + "keyAgreement": [ + { + "id": "did:method:alice#key-5", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "X25519", + "x": "SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA" + } + }, + { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + } + ] + }, + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "WAZghWazRgO-V858h_USUXWIeUZv1DfV_NmS_WIXkgU" + } + }, + "output": null, + "errors": false + }, + { + "description": "returns null if no match is found", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:method:alice", + "verificationMethod": [ + { + "id": "did:method:alice#key-1", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "GM_NcTChsLlfdODKG573OSWGO7wNwzhkHRPHPxdAYfc" + } + }, + { + "id": "did:method:alice#key-2", + "type": "Ed25519VerificationKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd" + } + ], + "authentication": [ + "did:method:alice#key-1", + { + "id": "did:method:alice#key-3", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "k1GKchkMMp9nbYsShY1R2UVzPsQill6zv2De38ERkfI" + } + } + ], + "keyAgreement": [ + { + "id": "did:method:alice#key-5", + "type": "JsonWebKey2020", + "controller": "did:method:alice", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "X25519", + "x": "SOKzporeWqJMJxf1NgPtup3whiBLPLZxgLDORNzbXwA" + } + }, + { + "id": "did:method:alice#key-6", + "type": "X25519KeyAgreementKey2020", + "controller": "did:method:alice", + "publicKeyMultibase": "z6LSgah1r8rDCT2brDg7Vhh2LYmTkcEVgUHng1Ji68XBy4d" + } + ] + }, + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "x": "WAZghWazRgO-V858h_USUXWIeUZv1DfV_NmS_WIXkgU" + } + }, + "output": null, + "errors": false + }, + { + "description": "error if didDocument is an empty object", + "input": { + "didDocument": {} + }, + "errors": true + }, + { + "description": "error if didDocument is missing", + "input": {}, + "errors": true + } + ] +} \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-types.json b/packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-types.json new file mode 100644 index 000000000..59f3f4adf --- /dev/null +++ b/packages/dids/tests/fixtures/test-vectors/utils/get-verification-method-types.json @@ -0,0 +1,169 @@ +{ + "description": "DID Utils getVerificationMethodTypes test vectors", + "vectors": [ + { + "description": "returns expected types from a DID document with only multibase keys", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1", + "https://w3id.org/security/suites/x25519-2020/v1" + ], + "id": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + "verificationMethod": [ + { + "id": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + "type": "Ed25519VerificationKey2020", + "controller": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + "publicKeyMultibase": "z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp" + }, + { + "id": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6LShs9GGnqk85isEBzzshkuVWrVKsRp24GnDuHk8QWkARMW", + "type": "X25519KeyAgreementKey2020", + "controller": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + "publicKeyMultibase": "z6LShs9GGnqk85isEBzzshkuVWrVKsRp24GnDuHk8QWkARMW" + } + ], + "authentication": [ + "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + { + "id": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV", + "type": "Ed25519VerificationKey2020", + "controller": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV" + } + ], + "assertionMethod": [ + "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + { + "id": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MknGc3ocHs3zdPiJbnaaqDi58NGb4pk1Sp9WxWufuXSdxf", + "type": "Ed25519VerificationKey2020", + "controller": "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp", + "publicKeyMultibase": "z6MknGc3ocHs3zdPiJbnaaqDi58NGb4pk1Sp9WxWufuXSdxf" + } + ], + "capabilityDelegation": [ + "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp" + ], + "capabilityInvocation": [ + "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp" + ], + "keyAgreement": [ + "did:key:z6MkiTBz1ymuepAQ4HEHYSF1H8quG5GLVVQR3djdX3mDooWp#z6LShs9GGnqk85isEBzzshkuVWrVKsRp24GnDuHk8QWkARMW" + ] + } + }, + "output": [ + "Ed25519VerificationKey2020", + "X25519KeyAgreementKey2020" + ], + "errors": false + }, + { + "description": "returns expected types from a DID document with only JWK keys", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D", + "verificationMethod": [ + { + "id": "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D", + "publicKeyJwk": { + "alg": "EdDSA", + "crv": "Ed25519", + "kty": "OKP", + "x": "ZuVpK6HnahBtV1Y_jhnYK-fqHAz3dXmWXT_h-J7SL6I" + } + } + ], + "assertionMethod": [ + "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D" + ], + "authentication": [ + "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D" + ], + "capabilityDelegation": [ + "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D" + ], + "capabilityInvocation": [ + "did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D" + ] + } + }, + "output": [ + "JsonWebKey2020" + ], + "errors": false + }, + { + "description": "returns expected types from a DID document with a mix of JWK and multibase keys", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1", + "https://w3id.org/security/suites/secp256k1-2019/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "verificationMethod": [ + { + "id": "did:example:123#key-0", + "type": "Ed25519VerificationKey2018", + "controller": "did:example:123", + "publicKeyBase58": "3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J" + }, + { + "id": "did:example:123#key-1", + "type": "X25519KeyAgreementKey2019", + "controller": "did:example:123", + "publicKeyBase58": "FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x" + }, + { + "id": "did:example:123#key-2", + "type": "EcdsaSecp256k1VerificationKey2019", + "controller": "did:example:123", + "publicKeyBase58": "ns2aFDq25fEV1NUd3wZ65sgj5QjFW8JCAHdUJfLwfodt" + }, + { + "id": "did:example:123#key-3", + "type": "JsonWebKey2020", + "controller": "did:example:123", + "publicKeyJwk": { + "kty": "EC", + "crv": "P-256", + "x": "Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M", + "y": "pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk" + } + } + ] + } + }, + "output": [ + "Ed25519VerificationKey2018", + "X25519KeyAgreementKey2019", + "EcdsaSecp256k1VerificationKey2019", + "JsonWebKey2020" + ], + "errors": false + }, + { + "description": "error if didDocument is an empty object", + "input": { + "didDocument": {} + }, + "errors": true + }, + { + "description": "error if didDocument is missing", + "input": {}, + "errors": true + } + ] +} \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/utils/get-verification-methods.json b/packages/dids/tests/fixtures/test-vectors/utils/get-verification-methods.json new file mode 100644 index 000000000..ead1d58ea --- /dev/null +++ b/packages/dids/tests/fixtures/test-vectors/utils/get-verification-methods.json @@ -0,0 +1,175 @@ +{ + "description": "DID Utils getVerificationMethods test vectors", + "vectors": [ + { + "description": "returns expected result from a didDocument with one verificationMethod", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "verificationMethod": [ + { + "type": "JsonWebKey2020", + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0", + "controller": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", + "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", + "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", + "alg": "ES256K" + } + } + ], + "authentication": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "assertionMethod": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "capabilityInvocation": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ], + "capabilityDelegation": [ + "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" + ] + } + }, + "output": [ + { + "type": "JsonWebKey2020", + "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0", + "controller": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", + "publicKeyJwk": { + "kty": "EC", + "crv": "secp256k1", + "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", + "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", + "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", + "alg": "ES256K" + } + } + ], + "errors": false + }, + { + "description": "returns expected result from a didDocument with one embedded method", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "verificationMethod": [ + { + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "M6cuSLXzNrcydvtfswnRxDhnictOvjyzXne6ljRVw9Q" + } + } + ] + } + }, + "output": [ + { + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "M6cuSLXzNrcydvtfswnRxDhnictOvjyzXne6ljRVw9Q" + } + } + ], + "errors": false + }, + { + "description": "returns expected result from a didDocument with verificationMethod and embedded methods", + "input": { + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "verificationMethod": [ + { + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "M6cuSLXzNrcydvtfswnRxDhnictOvjyzXne6ljRVw9Q" + } + } + ], + "authentication": [ + "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9" + ], + "keyAgreement": [ + { + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6LSmYay64jcWvnDohtW3KKDUiKYs1XzFtJSbfBLuqBPgwjq", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "publicKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "kqMjAf2VRvY5jOgn3y-rJ9uII_ad2c5Ru3-mqmpTAAQ" + } + } + ] + } + }, + "output": [ + { + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "publicKeyJwk": { + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519", + "x": "M6cuSLXzNrcydvtfswnRxDhnictOvjyzXne6ljRVw9Q" + } + }, + { + "id": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9#z6LSmYay64jcWvnDohtW3KKDUiKYs1XzFtJSbfBLuqBPgwjq", + "type": "JsonWebKey2020", + "controller": "did:key:z6MkhvthBZDxVvLUswRey729CquxMiaoYXrT5SYbCAATc8V9", + "publicKeyJwk": { + "kty": "OKP", + "crv": "X25519", + "x": "kqMjAf2VRvY5jOgn3y-rJ9uII_ad2c5Ru3-mqmpTAAQ" + } + } + ], + "errors": false + }, + { + "description": "error if didDocument is an empty object", + "input": { + "didDocument": {} + }, + "errors": true + }, + { + "description": "error if didDocument is missing", + "input": {}, + "errors": true + } + ] +} \ No newline at end of file diff --git a/packages/dids/tests/utils.spec.ts b/packages/dids/tests/utils.spec.ts index 75221c30b..c6791a63d 100644 --- a/packages/dids/tests/utils.spec.ts +++ b/packages/dids/tests/utils.spec.ts @@ -6,14 +6,15 @@ import { getServices, isDidService, isDwnDidService, - getVerificationMethodId, + getVerificationMethodByKey, isDidVerificationMethod, + getVerificationMethods, getVerificationMethodTypes, } from '../src/utils.js'; -import { - didDocumentIdTestVectors, - didDocumentTypeTestVectors, -} from './fixtures/test-vectors/did-utils.js'; + +import DidUtilsgetVerificationMethodsTestVector from './fixtures/test-vectors/utils/get-verification-methods.json' assert { type: 'json' }; +import DidUtilsGetVerificationMethodTypesTestVector from './fixtures/test-vectors/utils/get-verification-method-types.json' assert { type: 'json' }; +import DidUtilsGetVerificationMethodByKeyTestVector from './fixtures/test-vectors/utils/get-verification-method-by-key.json' assert { type: 'json' }; describe('DID Utils', () => { describe('getServices()', () => { @@ -79,20 +80,70 @@ describe('DID Utils', () => { }); }); - describe('getVerificationMethodId()', () => { - for (const vector of didDocumentIdTestVectors) { - it(`passes test vector ${vector.id}`, async () => { - const methodIds = await getVerificationMethodId(vector.input as any); - expect(methodIds).to.deep.equal(vector.output); + describe('getVerificationMethodByKey()', () => { + type TestVector = { + description: string; + input: Parameters[0]; + output: ReturnType; + errors: boolean; + }; + + for (const vector of DidUtilsGetVerificationMethodByKeyTestVector.vectors as unknown as TestVector[]) { + it(vector.description, async () => { + let errorOccurred = false; + try { + const verificationMethods = await getVerificationMethodByKey(vector.input); + + expect(verificationMethods).to.deep.equal(vector.output, vector.description); + + } catch { errorOccurred = true; } + expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); + }); + } + }); + + describe('getVerificationMethods()', () => { + type TestVector = { + description: string; + input: Parameters[0]; + output: ReturnType; + errors: boolean; + }; + + for (const vector of DidUtilsgetVerificationMethodsTestVector.vectors as unknown as TestVector[]) { + it(vector.description, async () => { + let errorOccurred = false; + try { + const verificationMethods = getVerificationMethods({ + didDocument: vector.input.didDocument as DidDocument + }); + + expect(verificationMethods).to.deep.equal(vector.output, vector.description); + + } catch { errorOccurred = true; } + expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); }); } }); describe('getVerificationMethodTypes()', () => { - for (const vector of didDocumentTypeTestVectors) { - it(`passes test vector ${vector.id}`, () => { - const types = getVerificationMethodTypes(vector.input); - expect(types).to.deep.equal(vector.output); + type TestVector = { + description: string; + input: Parameters[0]; + output: ReturnType; + errors: boolean; + }; + + for (const vector of DidUtilsGetVerificationMethodTypesTestVector.vectors as unknown as TestVector[]) { + it(vector.description, async () => { + let errorOccurred = false; + try { + const types = getVerificationMethodTypes(vector.input); + + expect(types).to.deep.equal(vector.output, vector.description); + + } catch { errorOccurred = true; } + expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); }); } @@ -105,26 +156,12 @@ describe('DID Utils', () => { it('throws an error when didDocument is not provided', async () => { try { // @ts-expect-error - Testing invalid input - await getVerificationMethodId({ }); + getVerificationMethodTypes({ }); throw new Error('Test failed - error not thrown'); } catch (error: any) { expect(error.message).to.include('parameter missing'); } }); - - it('throws an error when didDocument is missing verificationMethod entries', async () => { - const didDocumentWithoutVerificationMethod = { - id : 'did:example:123', - verificationMethod : undefined - }; - - try { - await getVerificationMethodId({ didDocument: didDocumentWithoutVerificationMethod, publicKeyJwk: undefined }); - throw new Error('Test failed - error not thrown'); - } catch (error: any) { - expect(error.message).to.equal('Given `didDocument` is missing `verificationMethod` entries'); - } - }); }); describe('isDidService', () => { From b79dfff388fd69625edb370a7fce69c5ce896ab1 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sun, 21 Jan 2024 07:53:49 -0500 Subject: [PATCH 08/39] Add FixedLengthArray utility type Signed-off-by: Frank Hinek --- packages/common/src/type-utils.ts | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/packages/common/src/type-utils.ts b/packages/common/src/type-utils.ts index ff121f1ef..251208896 100644 --- a/packages/common/src/type-utils.ts +++ b/packages/common/src/type-utils.ts @@ -1,3 +1,67 @@ +/** + * Represents an array of a fixed length, preventing modifications to its size. + * + * The `FixedLengthArray` utility type transforms a standard array into a variant where + * methods that could alter the length are omitted. It leverages TypeScript's advanced types, + * such as conditional types and mapped types, to ensure that the array cannot be resized + * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type + * maintains all other characteristics of a standard array, including indexing, iteration, + * and type checking for its elements. + * + * Note: The type does not prevent direct assignment to indices, even if it would exceed + * the original length. However, such actions would lead to TypeScript type errors. + * + * @example + * ```ts + * // Declare a variable with a type of fixed-length array of three strings. + * let myFixedLengthArray: FixedLengthArray< [string, string, string]>; + * + * // Array declaration tests + * myFixedLengthArray = [ 'a', 'b', 'c' ]; // OK + * myFixedLengthArray = [ 'a', 'b', 123 ]; // TYPE ERROR + * myFixedLengthArray = [ 'a' ]; // LENGTH ERROR + * myFixedLengthArray = [ 'a', 'b' ]; // LENGTH ERROR + * + * // Index assignment tests + * myFixedLengthArray[1] = 'foo'; // OK + * myFixedLengthArray[1000] = 'foo'; // INVALID INDEX ERROR + * + * // Methods that mutate array length + * myFixedLengthArray.push('foo'); // MISSING METHOD ERROR + * myFixedLengthArray.pop(); // MISSING METHOD ERROR + * + * // Direct length manipulation + * myFixedLengthArray.length = 123; // READ-ONLY ERROR + * + * // Destructuring + * let [ a ] = myFixedLengthArray; // OK + * let [ a, b ] = myFixedLengthArray; // OK + * let [ a, b, c ] = myFixedLengthArray; // OK + * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR + * ``` + * + * @template T extends any[] - The array type to be transformed. + */ +export type FixedLengthArray = + Pick> + & { + /** + * Custom iterator for the `FixedLengthArray` type. + * + * This iterator allows the `FixedLengthArray` to be used in standard iteration + * contexts, such as `for...of` loops and spread syntax. It ensures that even though + * the array is of a fixed length with disabled mutation methods, it still retains + * iterable behavior similar to a regular array. + * + * @returns An IterableIterator for the array items. + */ + [Symbol.iterator]: () => IterableIterator> + }; + +/** Helper types for {@link FixedLengthArray} */ +type ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number; +type ArrayItems> = T extends Array ? TItems : never; + /** * isArrayBufferSlice * From 42bae5925afd470f256798bbe4e467f038123ad6 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sun, 21 Jan 2024 07:54:11 -0500 Subject: [PATCH 09/39] Add support for Base32Z to Convert utility Signed-off-by: Frank Hinek --- packages/common/src/convert.ts | 21 ++++++++++++++++ packages/common/tests/convert.spec.ts | 36 +++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/packages/common/src/convert.ts b/packages/common/src/convert.ts index 3ae75ef7b..036a8b7b3 100644 --- a/packages/common/src/convert.ts +++ b/packages/common/src/convert.ts @@ -1,5 +1,6 @@ import type { Multibase } from 'multiformats'; +import { base32z } from 'multiformats/bases/base32'; import { base58btc } from 'multiformats/bases/base58'; import { base64url } from 'multiformats/bases/base64'; @@ -28,6 +29,10 @@ export class Convert { return new Convert(data, 'AsyncIterable'); } + static base32Z(data: string): Convert { + return new Convert(data, 'Base32Z'); + } + static base58Btc(data: string): Convert { return new Convert(data, 'Base58Btc'); } @@ -131,6 +136,18 @@ export class Convert { } } + toBase32Z(): string { + switch (this.format) { + + case 'Uint8Array': { + return base32z.baseEncode(this.data); + } + + default: + throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`); + } + } + toBase58Btc(): string { switch (this.format) { @@ -357,6 +374,10 @@ export class Convert { return new Uint8Array(this.data); } + case 'Base32Z': { + return base32z.baseDecode(this.data); + } + case 'Base58Btc': { return base58btc.baseDecode(this.data); } diff --git a/packages/common/tests/convert.spec.ts b/packages/common/tests/convert.spec.ts index a4ae8740f..5df3eb665 100644 --- a/packages/common/tests/convert.spec.ts +++ b/packages/common/tests/convert.spec.ts @@ -236,6 +236,23 @@ describe('Convert', () =>{ }); }); + describe('from: Base64Z', () => { + it('to: Uint8Array', () => { + // Test Vector 1. + let input = '5umembtazeybqcd7grysfp711g1z56wzo8irzhae494hh58zguhy'; + let output = new Uint8Array([ + 220, 214, 133, 134, 56, 186, 0, 23, + 48, 125, 49, 1, 98, 183, 178, 145, + 165, 125, 250, 151, 129, 234, 75, 243, + 8, 215, 245, 206, 108, 247, 52, 248 + ]); + + let result = Convert.base32Z(input).toUint8Array(); + + expect(result).to.deep.equal(output); + }); + }); + describe('from: BufferSource', () => { it('to: ArrayBuffer', () => { // Test Vector 1 - BufferSource is Uint8Array. @@ -500,6 +517,21 @@ describe('Convert', () =>{ expect(result).to.deep.equal(output); }); + it('to: Base32Z', () => { + // Test Vector 1. + let input = new Uint8Array([ + 220, 214, 133, 134, 56, 186, 0, 23, + 48, 125, 49, 1, 98, 183, 178, 145, + 165, 125, 250, 151, 129, 234, 75, 243, + 8, 215, 245, 206, 108, 247, 52, 248 + ]); + let output = '5umembtazeybqcd7grysfp711g1z56wzo8irzhae494hh58zguhy'; + + let result = Convert.uint8Array(input).toBase32Z(); + + expect(result).to.deep.equal(output); + }); + it('to: Base58Btc', () => { // Test Vector 1. let input = new Uint8Array([51, 52, 53]); @@ -567,6 +599,10 @@ describe('Convert', () =>{ } }); + it('toBase32Z() throw an error', () => { + expect(() => unsupported.toBase32Z()).to.throw(TypeError, 'not supported'); + }); + it('toBase58Btc() throw an error', () => { expect(() => unsupported.toBase58Btc()).to.throw(TypeError, 'not supported'); }); From 197181cb2bb42757c0cd8651038c43f0e837e914 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sun, 21 Jan 2024 07:55:01 -0500 Subject: [PATCH 10/39] Improve JWK type Signed-off-by: Frank Hinek --- packages/crypto/src/jose.ts | 4 +- packages/crypto/src/jose/jwk.ts | 70 ++++++++++++++++++- .../crypto/tests/algorithms/aes-ctr.spec.ts | 2 +- .../crypto/tests/algorithms/aes-gcm.spec.ts | 2 +- .../crypto/tests/algorithms/ecdsa.spec.ts | 4 -- .../crypto/tests/algorithms/eddsa.spec.ts | 4 -- .../tests/fixtures/test-vectors/jose.ts | 46 ++++++------ .../crypto/tests/local-kms-crypto.spec.ts | 1 - .../crypto/tests/primitives/aes-ctr.spec.ts | 6 +- 9 files changed, 99 insertions(+), 40 deletions(-) diff --git a/packages/crypto/src/jose.ts b/packages/crypto/src/jose.ts index f53c3cf58..c9e32d712 100644 --- a/packages/crypto/src/jose.ts +++ b/packages/crypto/src/jose.ts @@ -78,9 +78,9 @@ export class Jose { }): Promise> { const params: string[] = []; - if ('crv' in jwk) { + if (jwk.crv) { params.push(jwk.crv); - if ('d' in jwk) { + if (jwk.d) { params.push('private'); } else { params.push('public'); diff --git a/packages/crypto/src/jose/jwk.ts b/packages/crypto/src/jose/jwk.ts index 901c20df3..dec4ed956 100644 --- a/packages/crypto/src/jose/jwk.ts +++ b/packages/crypto/src/jose/jwk.ts @@ -343,7 +343,75 @@ export type JwkKeyPair = { * JSON Web Key ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK}). * "RSA", "EC", "OKP", and "oct" key types are supported. */ -export type Jwk = PrivateKeyJwk | PublicKeyJwk; +export interface Jwk { + // Common properties that apply to all key types. + + /** JWK Algorithm Parameter. The algorithm intended for use with the key. */ + alg?: string; + /** JWK Extractable Parameter */ + ext?: 'true' | 'false'; + /** JWK Key Operations Parameter */ + key_ops?: JwkOperation[]; + /** JWK Key ID Parameter */ + kid?: string; + /** JWK Key Type Parameter */ + kty: JwkType; + /** JWK Public Key Use Parameter */ + use?: JwkUse; + /** JWK X.509 Certificate Chain Parameter */ + x5c?: string; + /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */ + x5t?: string; + /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */ + 'x5t#S256'?: string; + /** JWK X.509 URL Parameter */ + x5u?: string; + + // Elliptic Curve (EC or OKP) public key properties. + + /** The cryptographic curve used with the key. */ + crv?: string; + /** The x-coordinate for the Elliptic Curve point. */ + x?: string; + /** The y-coordinate for the Elliptic Curve point. */ + y?: string; + + // Symmetric key properties. + + /** The "k" (key value) parameter contains the value of the symmetric (or other single-valued) key. */ + k?: string; + + // RSA public key properties. + + /** Public exponent for RSA */ + e?: string; + /** Modulus for RSA */ + n?: string; + /** First prime factor for RSA */ + p?: string; + /** Second prime factor for RSA */ + q?: string; + /** First factor's CRT exponent for RSA */ + dp?: string; + /** Second factor's CRT exponent for RSA */ + dq?: string; + /** First CRT coefficient for RSA */ + qi?: string; + /** Other primes information (optional in RFC 7518) */ + oth?: { + r: string; + d: string; + t: string; + }[]; + + // Elliptic Curve and RSA private key properties. + + /** Private key component for EC, OKP, or RSA keys. */ + d?: string; + + // Additional public or private properties. + [key: string]: unknown; +} /** * JSON Web Key Set ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK Set}) diff --git a/packages/crypto/tests/algorithms/aes-ctr.spec.ts b/packages/crypto/tests/algorithms/aes-ctr.spec.ts index 28c151bb0..7111940e9 100644 --- a/packages/crypto/tests/algorithms/aes-ctr.spec.ts +++ b/packages/crypto/tests/algorithms/aes-ctr.spec.ts @@ -79,7 +79,7 @@ describe('AesCtrAlgorithm', () => { const algorithms = ['A128CTR', 'A192CTR', 'A256CTR'] as const; for (const algorithm of algorithms) { const privateKey = await aesCtr.generateKey({ algorithm }); - if (!('k' in privateKey)) throw new Error('Expected privateKey to have a `k` property'); // TypeScript type guard. + if (!privateKey.k) throw new Error('Expected privateKey to have a `k` property'); // TypeScript type guard. const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array(); expect(privateKeyBytes.byteLength * 8).to.equal(parseInt(algorithm.slice(1, 4))); } diff --git a/packages/crypto/tests/algorithms/aes-gcm.spec.ts b/packages/crypto/tests/algorithms/aes-gcm.spec.ts index cca1cb966..132431a5f 100644 --- a/packages/crypto/tests/algorithms/aes-gcm.spec.ts +++ b/packages/crypto/tests/algorithms/aes-gcm.spec.ts @@ -80,7 +80,7 @@ describe('AesGcmAlgorithm', () => { const algorithms = ['A128GCM', 'A192GCM', 'A256GCM'] as const; for (const algorithm of algorithms) { const privateKey = await aesGcm.generateKey({ algorithm }); - if (!('k' in privateKey)) throw new Error('Expected privateKey to have a `k` property'); // TypeScript type guard. + if (!privateKey.k) throw new Error('Expected privateKey to have a `k` property'); // TypeScript type guard. const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array(); expect(privateKeyBytes.byteLength * 8).to.equal(parseInt(algorithm.slice(1, 4))); } diff --git a/packages/crypto/tests/algorithms/ecdsa.spec.ts b/packages/crypto/tests/algorithms/ecdsa.spec.ts index 0a3b86009..bf2e98f54 100644 --- a/packages/crypto/tests/algorithms/ecdsa.spec.ts +++ b/packages/crypto/tests/algorithms/ecdsa.spec.ts @@ -80,7 +80,6 @@ describe('EcdsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const privateKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', d : 'd', kty : 'EC', @@ -183,7 +182,6 @@ describe('EcdsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const privateKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', d : 'd', kty : 'EC', @@ -250,7 +248,6 @@ describe('EcdsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const privateKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', d : 'd', kty : 'EC', @@ -334,7 +331,6 @@ describe('EcdsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const publicKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', kty : 'EC', x : 'x', diff --git a/packages/crypto/tests/algorithms/eddsa.spec.ts b/packages/crypto/tests/algorithms/eddsa.spec.ts index 3175c04bd..df7bccc60 100644 --- a/packages/crypto/tests/algorithms/eddsa.spec.ts +++ b/packages/crypto/tests/algorithms/eddsa.spec.ts @@ -81,7 +81,6 @@ describe('EdDsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const privateKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', d : 'd', kty : 'OKP', @@ -183,7 +182,6 @@ describe('EdDsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const privateKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', d : 'd', kty : 'OKP', @@ -250,7 +248,6 @@ describe('EdDsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const privateKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', d : 'd', kty : 'OKP', @@ -334,7 +331,6 @@ describe('EdDsaAlgorithm', () => { it('throws an error for an unsupported curve', async () => { // Setup. const publicKey: Jwk = { - // @ts-expect-error because an unsupported curve is intentionally provided. crv : 'unsupported-curve', kty : 'OKP', x : 'x' diff --git a/packages/crypto/tests/fixtures/test-vectors/jose.ts b/packages/crypto/tests/fixtures/test-vectors/jose.ts index c5b0de666..131f589de 100644 --- a/packages/crypto/tests/fixtures/test-vectors/jose.ts +++ b/packages/crypto/tests/fixtures/test-vectors/jose.ts @@ -5,17 +5,17 @@ export const joseToMulticodecTestVectors = [ alg : 'EdDSA', crv : 'Ed25519', kty : 'OKP', - x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', + x : 'lSPJrpccK4uv3f7IUCVYDz5qcUhSjiPHFyRcr5Z5VYg', }, }, { output : { code: 4864, name: 'ed25519-priv' }, input : { - d : '', + d : 'fbGqifMN3h7tjLMd2gi5dggG-A2s7paNkBbdFAyGZyU', alg : 'EdDSA', crv : 'Ed25519', kty : 'OKP', - x : 'c5UR1q2r1lOT_ygDhSkU3paf5Bmukg-jX-1t4kIKJvA', + x : 'lSPJrpccK4uv3f7IUCVYDz5qcUhSjiPHFyRcr5Z5VYg', }, }, { @@ -24,19 +24,19 @@ export const joseToMulticodecTestVectors = [ alg : 'ES256K', crv : 'secp256k1', kty : 'EC', - x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', - y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', + x : 'hEpfKD1BpSyoP9CYULUxD8JoTGB6Y8NNxe2cX0p_bQY', + y : 'SNP8nyU4iDWeu7nfcjpJ04htOgF8u94pFUzBYiPw75g', }, }, { output : { code: 4865, name: 'secp256k1-priv' }, input : { - d : '', + d : 'KvnTJGCOHzsUHEaIj1gy5uOE22K-3Shpl6NYLG7TRGQ', alg : 'ES256K', crv : 'secp256k1', kty : 'EC', - x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', - y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', + x : 'hEpfKD1BpSyoP9CYULUxD8JoTGB6Y8NNxe2cX0p_bQY', + y : 'SNP8nyU4iDWeu7nfcjpJ04htOgF8u94pFUzBYiPw75g', }, }, { @@ -44,65 +44,65 @@ export const joseToMulticodecTestVectors = [ input : { crv : 'X25519', kty : 'OKP', - x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', + x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', }, }, { output : { code: 4866, name: 'x25519-priv' }, input : { - d : '', + d : 'MJf4AAqcwfBC68Wkb8nRbmnIdHb07zYM7vU_TAOgmtM', crv : 'X25519', kty : 'OKP', - x : 'MBZd77wAy5932AEP7MHXOevv_MLzzD9OP_fZAOlnIWM', + x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', }, }, ]; export const jwkToThumbprintTestVectors = [ { - output : 'NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs', - input : { + input: { kty : 'RSA', n : '0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw', e : 'AQAB', alg : 'RS256', kid : '2011-04-29', }, + output: 'NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs', }, { - output : 'legaImFEtXYAJYZ8_ZGbZnx-bhc_9nN53pxGpOum3Io', - input : { + input: { alg : 'A128CBC', kty : 'oct', k : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', }, + output: 'legaImFEtXYAJYZ8_ZGbZnx-bhc_9nN53pxGpOum3Io', }, { - output : 'dwzDb6KNsqS3QMTqH0jfBHcoHJzYZBc5scB5n5VLe1E', - input : { + input: { alg : 'ES256K', crv : 'secp256k1', kty : 'EC', x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', }, + output: 'dwzDb6KNsqS3QMTqH0jfBHcoHJzYZBc5scB5n5VLe1E', }, { - output : 'KCfBQ0EA2cWr1Kbt-mnlj8LQ9C2AJfcuEm8mtgOe7wQ', - input : { + input: { crv : 'X25519', kty : 'OKP', x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', }, + output: 'KCfBQ0EA2cWr1Kbt-mnlj8LQ9C2AJfcuEm8mtgOe7wQ', }, { - output : 'TQdUBtR3MvnNE-7p5sotzCGgZNyQC7EgsiKQz1Erzc4', - input : { - d : '', + input: { + d : 'MJf4AAqcwfBC68Wkb8nRbmnIdHb07zYM7vU_TAOgmtM', crv : 'X25519', kty : 'OKP', - x : 'MBZd77wAy5932AEP7MHXOevv_MLzzD9OP_fZAOlnIWM', + x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', }, + output: 'lQN1EkHZz4VkAcVGD4gsc0JBcLwvkUprOxkiO4kpbbs', }, ]; diff --git a/packages/crypto/tests/local-kms-crypto.spec.ts b/packages/crypto/tests/local-kms-crypto.spec.ts index ef687ac2d..63ef76e68 100644 --- a/packages/crypto/tests/local-kms-crypto.spec.ts +++ b/packages/crypto/tests/local-kms-crypto.spec.ts @@ -401,7 +401,6 @@ describe('LocalKmsCrypto', () => { it('throws an error when public key algorithm and curve are unsupported', async () => { // Setup. - // @ts-expect-error because an unsupported algorithm and currve is being tested. const key: Jwk = { kty: 'EC', alg: 'unsupported-algorithm', crv: 'unsupported-curve', x: 'x', y: 'y' }; const signature = new Uint8Array(64); const data = new Uint8Array(0); diff --git a/packages/crypto/tests/primitives/aes-ctr.spec.ts b/packages/crypto/tests/primitives/aes-ctr.spec.ts index 8899ce383..440a793f3 100644 --- a/packages/crypto/tests/primitives/aes-ctr.spec.ts +++ b/packages/crypto/tests/primitives/aes-ctr.spec.ts @@ -182,17 +182,17 @@ describe('AesCtr', () => { // 128 bits privateKey = await AesCtr.generateKey({ length: 128 }) as JwkParamsOctPrivate; - privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array(); + privateKeyBytes = Convert.base64Url(privateKey.k!).toUint8Array(); expect(privateKeyBytes.byteLength).to.equal(16); // 192 bits privateKey = await AesCtr.generateKey({ length: 192 }) as JwkParamsOctPrivate; - privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array(); + privateKeyBytes = Convert.base64Url(privateKey.k!).toUint8Array(); expect(privateKeyBytes.byteLength).to.equal(24); // 256 bits privateKey = await AesCtr.generateKey({ length: 256 }) as JwkParamsOctPrivate; - privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array(); + privateKeyBytes = Convert.base64Url(privateKey.k!).toUint8Array(); expect(privateKeyBytes.byteLength).to.equal(32); }); From 2da26ee1fc3e7638548a14112f8eb46ffe1449fd Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sun, 21 Jan 2024 07:55:51 -0500 Subject: [PATCH 11/39] Add InferKeyGeneratorAlgorithm utility type Signed-off-by: Frank Hinek --- packages/crypto/src/types/key-generator.ts | 53 +++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/packages/crypto/src/types/key-generator.ts b/packages/crypto/src/types/key-generator.ts index 672529bc1..4591c5c95 100644 --- a/packages/crypto/src/types/key-generator.ts +++ b/packages/crypto/src/types/key-generator.ts @@ -65,4 +65,55 @@ export interface AsymmetricKeyGenerator< * @returns A Promise resolving to the public key in JWK format. */ getPublicKey(params: GetPublicKeyInput): Promise; -} \ No newline at end of file +} + +/** + * Infers the supported algorithm type from the `generateKey` method of a key generator. + * + * @remarks + * The `InferKeyGeneratorAlgorithm` utility type extracts the algorithm type from the input + * parameters of the `generateKey` method implemented in a key generator. This type is useful when + * working with various cryptographic key generators, as it enables TypeScript to infer the + * supported algorithms based on the key generator's implementation. This inference ensures type + * safety and improves developer experience by providing relevant suggestions and checks for the + * supported algorithms during development. + * + * This utility type can be particularly advantageous in contexts where the specific key generator + * may vary, but the code needs to adapt dynamically based on the supported algorithms of the + * provided key generator instance. + * + * @example + * ```ts + * export interface MyKmsGenerateKeyParams extends KmsGenerateKeyParams { + * algorithm: 'Ed25519' | 'ES256K'; + * } + * + * class MyKms implements KeyGenerator { + * generateKey(params: MyKmsGenerateKeyParams): Promise { + * // Implementation for generating a key... + * } + * } + * + * type SupportedAlgorithms = InferKeyGeneratorAlgorithm; + * // `SupportedAlgorithms` will be inferred as 'Ed25519' | 'ES256K' + * ``` + * + * @template T - The type of the key generator from which to infer the algorithm type. + */ +export type InferKeyGeneratorAlgorithm = T extends { + /** + * The `generateKey` method signature from which the algorithm type is inferred. + * This is an internal implementation detail and not part of the public API. + */ + generateKey(params: infer P): any; + } + ? P extends { + /** + * The `algorithm` property within the parameters of `generateKey`. + * This internal element is used to infer the algorithm type. + */ + algorithm: infer A + } + ? A + : never + : never; \ No newline at end of file From cf4cb3359f716b957b67fbc72f2b15510c0dada7 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sun, 21 Jan 2024 07:56:16 -0500 Subject: [PATCH 12/39] Remove did-resolver dependency Signed-off-by: Frank Hinek --- packages/dids/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/dids/package.json b/packages/dids/package.json index 817e54c9f..eca64978f 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -79,7 +79,6 @@ "@decentralized-identity/ion-sdk": "1.0.1", "@web5/common": "0.2.2", "@web5/crypto": "0.3.0", - "did-resolver": "4.1.0", "dns-packet": "5.6.1", "level": "8.0.0", "ms": "2.1.3", From 80ae0bd4a9c866396c642069d8cbb5088ebf209e Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sun, 21 Jan 2024 07:57:42 -0500 Subject: [PATCH 13/39] Temporarily disable old implementations Signed-off-by: Frank Hinek --- packages/dids/{ => old}/src/dht.ts | 0 packages/dids/{ => old}/src/did-dht.ts | 0 packages/dids/{ => old}/src/did-ion.ts | 0 packages/dids/{ => old}/src/did-key.ts | 0 packages/dids/old/src/did-resolver.ts | 208 ++++++ .../{ => old}/src/resolver-cache-level.ts | 0 .../dids/{ => old}/src/resolver-cache-noop.ts | 0 packages/dids/{ => old}/tests/dht.spec.ts | 0 packages/dids/old/tests/did-dht.spec.ts | 512 +++++++++++++ packages/dids/{ => old}/tests/did-ion.spec.ts | 0 packages/dids/{ => old}/tests/did-key.spec.ts | 0 .../dids/{ => old}/tests/did-resolver.spec.ts | 0 .../tests/resolver-cache-level.spec.ts | 0 packages/dids/src/index.ts | 25 +- packages/dids/src/methods/did-dht.ts | 670 ++++++++++++++++++ packages/dids/src/methods/did-ion.ts | 8 + packages/dids/src/methods/did-jwk.ts | 360 ++++++---- packages/dids/src/methods/did-key.ts | 208 ++++++ packages/dids/src/methods/did-method.ts | 359 ++++++++-- packages/dids/src/types/did-core.ts | 94 ++- packages/dids/src/utils.ts | 17 +- packages/dids/tests/did-dht.spec.ts | 596 +++------------- packages/dids/tests/did-jwk.spec.ts | 529 ++++++++++---- packages/dids/tests/did-method.spec.ts | 295 ++++++++ 24 files changed, 3027 insertions(+), 854 deletions(-) rename packages/dids/{ => old}/src/dht.ts (100%) rename packages/dids/{ => old}/src/did-dht.ts (100%) rename packages/dids/{ => old}/src/did-ion.ts (100%) rename packages/dids/{ => old}/src/did-key.ts (100%) create mode 100644 packages/dids/old/src/did-resolver.ts rename packages/dids/{ => old}/src/resolver-cache-level.ts (100%) rename packages/dids/{ => old}/src/resolver-cache-noop.ts (100%) rename packages/dids/{ => old}/tests/dht.spec.ts (100%) create mode 100644 packages/dids/old/tests/did-dht.spec.ts rename packages/dids/{ => old}/tests/did-ion.spec.ts (100%) rename packages/dids/{ => old}/tests/did-key.spec.ts (100%) rename packages/dids/{ => old}/tests/did-resolver.spec.ts (100%) rename packages/dids/{ => old}/tests/resolver-cache-level.spec.ts (100%) create mode 100644 packages/dids/src/methods/did-dht.ts create mode 100644 packages/dids/src/methods/did-ion.ts create mode 100644 packages/dids/src/methods/did-key.ts create mode 100644 packages/dids/tests/did-method.spec.ts diff --git a/packages/dids/src/dht.ts b/packages/dids/old/src/dht.ts similarity index 100% rename from packages/dids/src/dht.ts rename to packages/dids/old/src/dht.ts diff --git a/packages/dids/src/did-dht.ts b/packages/dids/old/src/did-dht.ts similarity index 100% rename from packages/dids/src/did-dht.ts rename to packages/dids/old/src/did-dht.ts diff --git a/packages/dids/src/did-ion.ts b/packages/dids/old/src/did-ion.ts similarity index 100% rename from packages/dids/src/did-ion.ts rename to packages/dids/old/src/did-ion.ts diff --git a/packages/dids/src/did-key.ts b/packages/dids/old/src/did-key.ts similarity index 100% rename from packages/dids/src/did-key.ts rename to packages/dids/old/src/did-key.ts diff --git a/packages/dids/old/src/did-resolver.ts b/packages/dids/old/src/did-resolver.ts new file mode 100644 index 000000000..1c0933b7f --- /dev/null +++ b/packages/dids/old/src/did-resolver.ts @@ -0,0 +1,208 @@ +import type { + DidResource, + DidResolverCache, + DidMethodResolver, + DidResolutionResult, + DidResolutionOptions, + DidDereferencingResult, + DidDereferencingOptions, +} from './types.js'; + +import { parseDid } from './utils.js'; +import { DidResolverCacheNoop } from './resolver-cache-noop.js'; + +export type DidResolverOptions = { + didResolvers: DidMethodResolver[]; + cache?: DidResolverCache; +} + +/** + * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to + * their corresponding DID documents. + * + * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver` + * instances, each responsible for a specific DID method. It also employs a caching mechanism to + * store and retrieve previously resolved DID documents for efficiency. + * + * Usage: + * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache. + * - Use `resolve` to resolve a DID to its DID Resolution Result. + * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods. + * + * @example + * ```ts + * const resolver = new DidResolver({ + * didResolvers: [], + * cache: new DidResolverCacheNoop() + * }); + * + * const resolutionResult = await resolver.resolve('did:example:123456'); + * const dereferenceResult = await resolver.dereference({ didUrl: 'did:example:123456#key-1' }); + * ``` + */ +export class DidResolver { + /** + * A cache for storing resolved DID documents. + */ + private cache: DidResolverCache; + + /** + * A map to store method resolvers against method names. + */ + private didResolvers: Map = new Map(); + + /** + * Constructs a new `DidResolver`. + * + * @param options - The options for constructing the `DidResolver`. + * @param options.didResolvers - An array of `DidMethodResolver` instances. + * @param options.cache - Optional. A cache for storing resolved DID documents. If not provided, a no-operation cache is used. + */ + constructor(options: DidResolverOptions) { + this.cache = options.cache || DidResolverCacheNoop; + + for (const resolver of options.didResolvers) { + this.didResolvers.set(resolver.methodName, resolver); + } + } + + /** + * Resolves a DID to a DID Resolution Result. + * If the DID Resolution Result is present in the cache, it returns the cached + * result. Otherwise, it uses the appropriate method resolver to resolve + * the DID, stores the resolution result in the cache, and returns the + * resolultion result. + * + * Note: The method signature for resolve() in this implementation must match + * the `DidResolver` implementation in + * {@link https://github.com/TBD54566975/dwn-sdk-js | dwn-sdk-js} so that + * Web5 apps and the underlying DWN instance can share the same DID + * resolution cache. + * + * @param didUrl - The DID or DID URL to resolve. + * @returns A promise that resolves to the DID Resolution Result. + */ + async resolve(didUrl: string, resolutionOptions?: DidResolutionOptions): Promise { + + const parsedDid = parseDid({ didUrl }); + if (!parsedDid) { + return { + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument : undefined, + didDocumentMetadata : {}, + didResolutionMetadata : { + error : 'invalidDid', + errorMessage : `Cannot parse DID: ${didUrl}` + } + }; + } + + const resolver = this.didResolvers.get(parsedDid.method); + if (!resolver) { + return { + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument : undefined, + didDocumentMetadata : {}, + didResolutionMetadata : { + error : 'methodNotSupported', + errorMessage : `Method not supported: ${parsedDid.method}` + } + }; + } + + const cachedResolutionResult = await this.cache.get(parsedDid.did); + + if (cachedResolutionResult) { + return cachedResolutionResult; + } else { + const resolutionResult = await resolver.resolve({ + didUrl: parsedDid.did, + resolutionOptions + }); + + await this.cache.set(parsedDid.did, resolutionResult); + + return resolutionResult; + } + } + + /** + * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource. This method + * interprets the DID URL's components, which include the DID method, method-specific identifier, + * path, query, and fragment, and retrieves the related resource as per the DID Core specifications. + * The dereferencing process involves resolving the DID contained in the DID URL to a DID document, + * and then extracting the specific part of the document identified by the fragment in the DID URL. + * If no fragment is specified, the entire DID document is returned. + * + * This method supports resolution of different components within a DID document such as service + * endpoints and verification methods, based on their IDs. It accommodates both full and + * DID URLs as specified in the DID Core specification. + * + * More information on DID URL dereferencing can be found in the + * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}. + * + * @param didUrl - The DID URL string to dereference. + * @param [dereferenceOptions] - Input options to the dereference function. Optional. + * @returns a {@link DidDereferencingResult} + */ + async dereference({ didUrl }: { + didUrl: string, + dereferenceOptions?: DidDereferencingOptions + }): Promise { + const { didDocument, didResolutionMetadata = {}, didDocumentMetadata = {} } = await this.resolve(didUrl); + if (didResolutionMetadata.error) { + return { + dereferencingMetadata : { error: 'invalidDidUrl' }, + contentStream : null, + contentMetadata : {} + }; + } + + const parsedDid = parseDid({ didUrl }); + + // Return the entire DID Document if no fragment is present on the did url + if (!parsedDid.fragment) { + return { + dereferencingMetadata : { contentType: 'application/did+json' }, + contentStream : didDocument, + contentMetadata : didDocumentMetadata + }; + } + + const { service = [], verificationMethod = [] } = didDocument; + + // Create a set of possible id matches. The DID spec allows for an id to be the entire + // did#fragment or just #fragment. + // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}. + // Using a Set for fast string comparison since some DID methods have long identifiers. + const idSet = new Set([didUrl, parsedDid.fragment, `#${parsedDid.fragment}`]); + + let didResource: DidResource; + for (let vm of verificationMethod) { + if (idSet.has(vm.id)) { + didResource = vm; + break; + } + } + + for (let svc of service) { + if (idSet.has(svc.id)) { + didResource = svc; + break; + } + } + if (didResource) { + return { + dereferencingMetadata : { contentType: 'application/did+json' }, + contentStream : didResource, + contentMetadata : didResolutionMetadata + }; + } else { + return { + dereferencingMetadata : { error: 'notFound' }, + contentStream : null, + contentMetadata : {}, + }; + } + } +} \ No newline at end of file diff --git a/packages/dids/src/resolver-cache-level.ts b/packages/dids/old/src/resolver-cache-level.ts similarity index 100% rename from packages/dids/src/resolver-cache-level.ts rename to packages/dids/old/src/resolver-cache-level.ts diff --git a/packages/dids/src/resolver-cache-noop.ts b/packages/dids/old/src/resolver-cache-noop.ts similarity index 100% rename from packages/dids/src/resolver-cache-noop.ts rename to packages/dids/old/src/resolver-cache-noop.ts diff --git a/packages/dids/tests/dht.spec.ts b/packages/dids/old/tests/dht.spec.ts similarity index 100% rename from packages/dids/tests/dht.spec.ts rename to packages/dids/old/tests/dht.spec.ts diff --git a/packages/dids/old/tests/did-dht.spec.ts b/packages/dids/old/tests/did-dht.spec.ts new file mode 100644 index 000000000..040f0be90 --- /dev/null +++ b/packages/dids/old/tests/did-dht.spec.ts @@ -0,0 +1,512 @@ +import type { PublicKeyJwk } from '@web5/crypto'; + +import sinon from 'sinon'; +import chai, { expect } from 'chai'; +import chaiAsPromised from 'chai-as-promised'; + +import type { DidDhtKeySet } from '../src/did-dht.js'; +import type { DidDocument, DidKeySetVerificationMethodKey, DidService, PortableDid } from '../src/types.js'; + +import { DidDht } from '../src/dht.js'; +import { parseDid } from '../src/utils.js'; +import { DidDhtMethod } from '../src/did-dht.js'; +import { DidResolver } from '../src/did-resolver.js'; + +chai.use(chaiAsPromised); + +describe('DidDhtMethod', () => { + describe('generateJwkKeyPair()', () => { + it('generates Ed25519 JWK key pairs', async () => { + const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); + + expect(ed25519KeyPair).to.exist; + expect(ed25519KeyPair).to.have.property('privateKeyJwk'); + expect(ed25519KeyPair).to.have.property('publicKeyJwk'); + expect(ed25519KeyPair.publicKeyJwk.kid).to.exist; + expect(ed25519KeyPair.publicKeyJwk.alg).to.equal('EdDSA'); + expect(ed25519KeyPair.publicKeyJwk.kty).to.equal('OKP'); + }); + + it('generates secp256k1 JWK key pairs', async () => { + const secp256k1KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'secp256k1' }); + + expect(secp256k1KeyPair).to.exist; + expect(secp256k1KeyPair).to.have.property('privateKeyJwk'); + expect(secp256k1KeyPair).to.have.property('publicKeyJwk'); + expect(secp256k1KeyPair.publicKeyJwk.kid).to.exist; + expect(secp256k1KeyPair.publicKeyJwk.alg).to.equal('ES256K'); + expect(secp256k1KeyPair.publicKeyJwk.kty).to.equal('EC'); + }); + + it('throws an error if an unsupported key algorithm is passed in', async () => { + await expect( + DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'unsupported' as any }) + ).to.be.rejectedWith(Error, 'unsupported'); + }); + }); + + describe('getDidIdentifierFragment()', () => { + it('should return the encoded identifier fragment for a given public key', async () => { + const testPublicKey: PublicKeyJwk = { + kty : 'OKP', + crv : 'Ed25519', + x : '9ZOlXQ7pZw7voYfQsrPPzvd1dA4ktXB5VbD1PWvl_jg', + ext : 'true', + 'key_ops' : ['verify'] + }; + + const result = await DidDhtMethod.getDidIdentifierFragment({ key: testPublicKey }); + + expect(result).to.equal('6sj4kzeq7fuo757bo9emfc6x355zk7yqr14zy6kisd4u449f9ahy'); + }); + }); + + describe('resolve()', () => { + it(`should return 'internalError' if DHT request throws error`, async () => { + const dhtDidResolutionStub = sinon.stub(DidDht, 'getDidDocument').rejects(new Error('Invalid SignedPacket bytes length, expected at least 72 bytes but got: 25')); + + const didResolutionResult = await DidDhtMethod.resolve({ didUrl: 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o' }); + const didResolutionMetadata = didResolutionResult.didResolutionMetadata; + expect(didResolutionMetadata.error).to.equal('internalError'); + + expect(dhtDidResolutionStub.calledOnce).to.be.true; + sinon.restore(); + }); + }); + + describe('key sets', () => { + it('should generate a key set with the identity key if no keys are passed in', async () => { + const keySet = await DidDhtMethod.generateKeySet(); + + expect(keySet).to.exist; + expect(keySet).to.have.property('verificationMethodKeys'); + expect(keySet).to.not.have.property('recoveryKey'); + expect(keySet).to.not.have.property('updateKey'); + expect(keySet).to.not.have.property('signingKey'); + expect(keySet.verificationMethodKeys).to.have.lengthOf(1); + expect(keySet.verificationMethodKeys[0].publicKeyJwk.kid).to.equal('0'); + }); + + it('should return the key set unmodified if only the identity key is passed in', async () => { + const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyId: '0', keyAlgorithm: 'Ed25519' }); + const identityKey: DidKeySetVerificationMethodKey = { + publicKeyJwk : ed25519KeyPair.publicKeyJwk, + privateKeyJwk : ed25519KeyPair.privateKeyJwk, + relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] + }; + + const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [identityKey] } }); + + expect(keySet).to.exist; + expect(keySet).to.have.property('verificationMethodKeys'); + expect(keySet).to.not.have.property('recoveryKey'); + expect(keySet).to.not.have.property('updateKey'); + expect(keySet).to.not.have.property('signingKey'); + expect(keySet.verificationMethodKeys).to.have.lengthOf(1); + expect(keySet.verificationMethodKeys[0]).to.deep.equal(identityKey); + }); + + it('should generate the identity key if non-identity keys are passed in', async () => { + const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); + const vm: DidKeySetVerificationMethodKey = { + publicKeyJwk : ed25519KeyPair.publicKeyJwk, + privateKeyJwk : ed25519KeyPair.privateKeyJwk, + relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] + }; + + const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [vm] } }); + + expect(keySet).to.exist; + expect(keySet).to.have.property('verificationMethodKeys'); + expect(keySet).to.not.have.property('recoveryKey'); + expect(keySet).to.not.have.property('updateKey'); + expect(keySet).to.not.have.property('signingKey'); + expect(keySet.verificationMethodKeys).to.have.lengthOf(2); + + if (keySet.verificationMethodKeys[0].publicKeyJwk.kid === '0') { + expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.not.equal('0'); + } else { + expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.equal('0'); + } + }); + + it('should generate key ID values for provided keys, if missing', async () => { + const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); + + // Remove the kid values from the key pair. + delete ed25519KeyPair.publicKeyJwk.kid; + delete ed25519KeyPair.privateKeyJwk.kid; + + const vm: DidKeySetVerificationMethodKey = { + publicKeyJwk : ed25519KeyPair.publicKeyJwk, + privateKeyJwk : ed25519KeyPair.privateKeyJwk, + relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] + }; + + const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [vm] } }); + + // Verify that the key ID values were generated. + expect(keySet.verificationMethodKeys[0].publicKeyJwk.kid).to.exist; + expect(keySet.verificationMethodKeys[0].privateKeyJwk.kid).to.exist; + expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.exist; + expect(keySet.verificationMethodKeys[1].privateKeyJwk.kid).to.exist; + }); + }); + + describe('DIDs', () => { + it('should generate a DID identifier given a public key jwk', async () => { + const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); + const did = await DidDhtMethod.getDidIdentifier({ key: ed25519KeyPair.publicKeyJwk }); + + expect(did).to.exist; + expect(did).to.contain('did:dht:'); + }); + + it('should create a DID document without options', async () => { + const { document, keySet } = await DidDhtMethod.create(); + + expect(document).to.exist; + expect(document.id).to.contain('did:dht:'); + expect(document.verificationMethod).to.exist; + expect(document.verificationMethod).to.have.lengthOf(1); + expect(document.verificationMethod[0].id).to.equal(`${document.id}#0`); + expect(document.verificationMethod[0].publicKeyJwk).to.exist; + expect(document.verificationMethod[0].publicKeyJwk.kid).to.equal('0'); + + expect(document.service).to.not.exist; + expect(document.assertionMethod.length).to.equal(1); + expect(document.assertionMethod[0]).to.equal(`#0`); + expect(document.authentication.length).to.equal(1); + expect(document.authentication[0]).to.equal(`#0`); + expect(document.capabilityDelegation.length).to.equal(1); + expect(document.capabilityDelegation[0]).to.equal(`#0`); + expect(document.capabilityInvocation.length).to.equal(1); + expect(document.capabilityInvocation[0]).to.equal(`#0`); + + const ks = keySet as DidDhtKeySet; + expect(ks).to.exist; + const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); + expect(identityKey).to.exist; + expect(identityKey.publicKeyJwk).to.exist; + expect(identityKey.privateKeyJwk).to.exist; + expect(identityKey.publicKeyJwk.kid).to.equal('0'); + }); + + it('should create a DID document with a non identity key option', async () => { + const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); + const keySet: DidDhtKeySet = { + verificationMethodKeys: [{ + publicKeyJwk : ed25519KeyPair.publicKeyJwk, + privateKeyJwk : ed25519KeyPair.privateKeyJwk, + relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] + }] + }; + + const { document } = await DidDhtMethod.create({ keySet }); + + expect(document).to.exist; + expect(document.id).to.contain('did:dht:'); + expect(document.verificationMethod).to.exist; + expect(document.verificationMethod).to.have.lengthOf(2); + expect(document.verificationMethod[1].id).to.equal(`${document.id}#0`); + expect(document.verificationMethod[1].publicKeyJwk).to.exist; + expect(document.verificationMethod[1].publicKeyJwk.kid).to.equal('0'); + + expect(document.service).to.not.exist; + expect(document.assertionMethod.length).to.equal(2); + expect(document.assertionMethod[1]).to.equal(`#0`); + expect(document.authentication.length).to.equal(2); + expect(document.authentication[1]).to.equal(`#0`); + expect(document.capabilityDelegation.length).to.equal(2); + expect(document.capabilityDelegation[1]).to.equal(`#0`); + expect(document.capabilityInvocation.length).to.equal(2); + expect(document.capabilityInvocation[1]).to.equal(`#0`); + + expect(keySet).to.exist; + const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); + expect(identityKey).to.exist; + expect(identityKey.publicKeyJwk).to.exist; + expect(identityKey.privateKeyJwk).to.exist; + expect(identityKey.publicKeyJwk.kid).to.equal('0'); + }); + + it('should create a DID document with services', async () => { + const services: DidService[] = [{ + id : 'agentId', + type : 'agent', + serviceEndpoint : 'https://example.com/agent' + }]; + const { document } = await DidDhtMethod.create({ services }); + + expect(document).to.exist; + expect(document.id).to.contain('did:dht:'); + expect(document.verificationMethod).to.exist; + expect(document.verificationMethod).to.have.lengthOf(1); + expect(document.verificationMethod[0].id).to.equal(`${document.id}#0`); + expect(document.verificationMethod[0].publicKeyJwk).to.exist; + expect(document.verificationMethod[0].publicKeyJwk.kid).to.equal('0'); + + expect(document.service).to.exist; + expect(document.service).to.have.lengthOf(1); + expect(document.service[0].id).to.equal(`${document.id}#agentId`); + expect(document.assertionMethod.length).to.equal(1); + expect(document.assertionMethod[0]).to.equal(`#0`); + expect(document.authentication.length).to.equal(1); + expect(document.authentication[0]).to.equal(`#0`); + expect(document.capabilityDelegation.length).to.equal(1); + expect(document.capabilityDelegation[0]).to.equal(`#0`); + expect(document.capabilityInvocation.length).to.equal(1); + expect(document.capabilityInvocation[0]).to.equal(`#0`); + }); + }); + + describe('DID publishing and resolving', function () { + it('should publish and DID should be resolvable', async () => { + const { document, keySet } = await DidDhtMethod.create(); + const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); + + const dhtDidPublishStub = sinon.stub(DidDht, 'publishDidDocument').resolves(true); + const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument : document, + didDocumentMetadata : {}, + didResolutionMetadata : { + did: { + didString : document.id, + methodSpecificId : parseDid({ didUrl: document.id }).id, + method : 'dht' + } + } + }); + + const isPublished = await DidDhtMethod.publish({ identityKey, didDocument: document }); + expect(isPublished).to.be.true; + + const didResolutionResult = await DidDhtMethod.resolve({ didUrl: document.id }); + const didDocument = didResolutionResult.didDocument; + expect(didDocument.id).to.deep.equal(document.id); + + expect(dhtDidPublishStub.calledOnce).to.be.true; + expect(dhtDidResolutionStub.calledOnce).to.be.true; + sinon.restore(); + }); + + it('should create with publish and return a DID document', async () => { + const mockDocument: PortableDid = { + keySet : 'any' as any, + did : 'did:dht:123456789abcdefghi', + document : { + id : 'did:dht:123456789abcdefghi', + verificationMethod : [{ + id : 'did:dht:123456789abcdefghi#0', + type : 'JsonWebKey2020', + controller : 'did:dht:123456789abcdefghi', + publicKeyJwk : { + kty : 'OKP', + crv : 'Ed25519', + kid : '0', + x : 'O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik' + } + }], + assertionMethod : ['did:dht:123456789abcdefghi#0'], + authentication : ['did:dht:123456789abcdefghi#0'], + capabilityDelegation : ['did:dht:123456789abcdefghi#0'], + capabilityInvocation : ['did:dht:123456789abcdefghi#0'] + } + }; + const didDhtCreateStub = sinon.stub(DidDhtMethod, 'create').resolves(mockDocument); + + const { document } = await DidDhtMethod.create({ publish: true }); + const did = document.id; + + const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument : document, + didDocumentMetadata : {}, + didResolutionMetadata : { + did: { + didString : 'did:dht:123456789abcdefgh', + methodSpecificId : '123456789abcdefgh', + method : 'dht' + } + } + }); + + const didResolutionResult = await DidDhtMethod.resolve({ didUrl: did }); + const resolvedDocument = didResolutionResult.didDocument; + expect(resolvedDocument.id).to.deep.equal(document.id); + expect(resolvedDocument.service).to.deep.equal(document.service); + expect(resolvedDocument.verificationMethod[0].id).to.deep.equal(document.verificationMethod[0].id); + expect(resolvedDocument.verificationMethod[0].type).to.deep.equal(document.verificationMethod[0].type); + expect(resolvedDocument.verificationMethod[0].controller).to.deep.equal(document.verificationMethod[0].controller); + expect(resolvedDocument.verificationMethod[0].publicKeyJwk.kid).to.deep.equal(document.verificationMethod[0].publicKeyJwk.kid); + + expect(didDhtCreateStub.calledOnce).to.be.true; + expect(dhtDidResolutionStub.calledOnce).to.be.true; + sinon.restore(); + }); + + it('should create with publish and DID should be resolvable', async () => { + const keySet: DidDhtKeySet = { + verificationMethodKeys: [{ + 'privateKeyJwk': { + 'd' : '2dPyiFL-vd21lxLKoyylz1nEK5EMByABqB2Fqio76sU', + 'alg' : 'EdDSA', + 'crv' : 'Ed25519', + 'kty' : 'OKP', + 'ext' : 'true', + 'key_ops' : [ + 'sign' + ], + 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', + 'kid' : '0' + }, + 'publicKeyJwk': { + 'alg' : 'EdDSA', + 'crv' : 'Ed25519', + 'kty' : 'OKP', + 'ext' : 'true', + 'key_ops' : [ + 'verify' + ], + 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', + 'kid' : '0' + }, + 'relationships': [ + 'authentication', + 'assertionMethod', + 'capabilityInvocation', + 'capabilityDelegation' + ] + }] + }; + + const didDocument: DidDocument = { + 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', + 'verificationMethod' : [ + { + 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o#0', + 'type' : 'JsonWebKey2020', + 'controller' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', + 'publicKeyJwk' : { + 'alg' : 'EdDSA', + 'crv' : 'Ed25519', + 'kty' : 'OKP', + 'ext' : 'true', + 'key_ops' : [ + 'verify' + ], + 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', + 'kid' : '0' + } + } + ], + 'authentication': [ + '#0' + ], + 'assertionMethod': [ + '#0' + ], + 'capabilityInvocation': [ + '#0' + ], + 'capabilityDelegation': [ + '#0' + ] + }; + + const dhtDidPublishStub = sinon.stub(DidDhtMethod, 'publish').resolves(true); + const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument, + didDocumentMetadata : {}, + didResolutionMetadata : { + did: { + didString : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', + methodSpecificId : 'h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', + method : 'dht' + } + } + }); + + const portableDid = await DidDhtMethod.create({ publish: true, keySet: keySet }); + expect(portableDid).to.exist; + expect(portableDid.did).to.exist; + expect(portableDid.document).to.exist; + expect(portableDid.keySet).to.exist; + expect(portableDid.document.id).to.deep.equal(didDocument.id); + + const didResolutionResult = await DidDhtMethod.resolve({ didUrl: didDocument.id }); + expect(didDocument.id).to.deep.equal(didResolutionResult.didDocument.id); + + expect(dhtDidPublishStub.calledOnce).to.be.true; + expect(dhtDidResolutionStub.calledOnce).to.be.true; + sinon.restore(); + }); + }); + + describe('Integration with DidResolver', () => { + it('DidResolver resolves a did:dht DID', async () => { + // Previously published DID. + const did = 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o'; + const didDocument: DidDocument = { + 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', + 'verificationMethod' : [ + { + 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o#0', + 'type' : 'JsonWebKey2020', + 'controller' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', + 'publicKeyJwk' : { + 'alg' : 'EdDSA', + 'crv' : 'Ed25519', + 'kty' : 'OKP', + 'ext' : 'true', + 'key_ops' : [ + 'verify' + ], + 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', + 'kid' : '0' + } + } + ], + 'authentication': [ + '#0' + ], + 'assertionMethod': [ + '#0' + ], + 'capabilityInvocation': [ + '#0' + ], + 'capabilityDelegation': [ + '#0' + ] + }; + + const dhtDidResolutionStub = sinon.stub(DidDht, 'getDidDocument').resolves(didDocument); + + // Instantiate a DidResolver with the DidJwkMethod. + const didResolver = new DidResolver({ didResolvers: [DidDhtMethod] }); + + // Resolve the DID using the DidResolver. + const { didDocument: resolvedDocument } = await didResolver.resolve(did); + + // Verify that the resolved document matches the created document. + expect(resolvedDocument).to.deep.equal(didDocument); + + expect(dhtDidResolutionStub.calledOnce).to.be.true; + sinon.restore(); + }); + + it('returns an error for invalid didUrl', async () => { + const result = await DidDhtMethod.resolve({ didUrl: 'invalid' }); + expect(result).to.have.property('didResolutionMetadata').which.has.property('error', 'invalidDid'); + }); + + it('returns an error for unsupported method', async () => { + const result = await DidDhtMethod.resolve({ didUrl: 'did:unsupported:xyz' }); + expect(result).to.have.property('didResolutionMetadata').which.has.property('error', 'methodNotSupported'); + }); + }); + +}); \ No newline at end of file diff --git a/packages/dids/tests/did-ion.spec.ts b/packages/dids/old/tests/did-ion.spec.ts similarity index 100% rename from packages/dids/tests/did-ion.spec.ts rename to packages/dids/old/tests/did-ion.spec.ts diff --git a/packages/dids/tests/did-key.spec.ts b/packages/dids/old/tests/did-key.spec.ts similarity index 100% rename from packages/dids/tests/did-key.spec.ts rename to packages/dids/old/tests/did-key.spec.ts diff --git a/packages/dids/tests/did-resolver.spec.ts b/packages/dids/old/tests/did-resolver.spec.ts similarity index 100% rename from packages/dids/tests/did-resolver.spec.ts rename to packages/dids/old/tests/did-resolver.spec.ts diff --git a/packages/dids/tests/resolver-cache-level.spec.ts b/packages/dids/old/tests/resolver-cache-level.spec.ts similarity index 100% rename from packages/dids/tests/resolver-cache-level.spec.ts rename to packages/dids/old/tests/resolver-cache-level.spec.ts diff --git a/packages/dids/src/index.ts b/packages/dids/src/index.ts index f3ff1808b..3316ee8aa 100644 --- a/packages/dids/src/index.ts +++ b/packages/dids/src/index.ts @@ -1,9 +1,16 @@ -export * from './dht.js'; -export * from './did-dht.js'; -export * from './did-ion.js'; -export * from './did-key.js'; -export * from './did-resolver.js'; -export * from './resolver-cache-level.js'; -export * from './resolver-cache-noop.js'; -export * from './types.js'; -export * as utils from './utils.js'; \ No newline at end of file +// export * from './dht.js'; +// export * from './did-dht.js'; +// export * from './did-ion.js'; +export * from './did-uri.js'; +export * from './methods/did-dht.js'; +export * from './methods/did-jwk.js'; +export * from './methods/did-web.js'; +export * from './methods/did-method.js'; +// export * from './did-key.js'; +// export * from './did-resolver.js'; +// export * from './resolver-cache-level.js'; +// export * from './resolver-cache-noop.js'; +// export * from './types.js'; +export * as utils from './utils.js'; + +export * from './types/did-core.js'; \ No newline at end of file diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts new file mode 100644 index 000000000..1f4c9b4fa --- /dev/null +++ b/packages/dids/src/methods/did-dht.ts @@ -0,0 +1,670 @@ +import type { Packet } from 'dns-packet'; +import type { Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams } from '@web5/crypto'; + +import { Convert } from '@web5/common'; +import { AUTHORITATIVE_ANSWER } from 'dns-packet'; +import { CryptoApi, Ed25519, LocalKmsCrypto, Secp256k1, computeJwkThumbprint } from '@web5/crypto'; + +import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; +import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidService, DidVerificationMethod } from '../types/did-core.js'; + +import { DidUri } from '../did-uri.js'; +import { DidMethod } from './did-method.js'; + +/** + * The default TTL for DNS records published to the DHT network. + */ +const DNS_RECORD_TTL = 60 * 60 * 2; // 7200 seconds or 2 hours + +/** + * Character used to separate distinct elements or entries in the DNS packet representation + * of a DID Document. + * + * For example, verification methods, verification relationships, and services are separated by + * semicolons (`;`) in the root record: + * ``` + * vm=k1;auth=k1;asm=k2;inv=k3;del=k3;srv=s1 + * ``` + */ +const PROPERTY_SEPARATOR = ';'; + +/** + * Character used to separate distinct values within a single element or entry in the DNS packet + * representation of a DID Document. + * + * For example, multiple key references for the `authentication` verification relationships are + * separated by commas (`,`): + * ``` + * auth=0,1,2 + * ``` + */ +const VALUE_SEPARATOR = ','; + +/** + * Options for creating a Decentralized Identifier (DID) using the DID DHT method. + */ +export interface DidDhtCreateOptions extends DidCreateOptions { + /** + * Optionally specify that the DID Subject is also identified by one or more other DIDs or URIs. + * + * A DID subject can have multiple identifiers for different purposes, or at different times. + * The assertion that two or more DIDs (or other types of URI) refer to the same DID subject can + * be made using the `alsoKnownAs` property. + * + * @see {@link https://www.w3.org/TR/did-core/#also-known-as | DID Core Specification, § Also Known As} + * + * @example + * ```ts + * const did = await DidDht.create({ + * options: { + * alsoKnownAs: 'did:example:123' + * }; + * ``` + */ + alsoKnownAs?: string[]; + + /** + * Optionally specify which DID (or DIDs) is authorized to make changes to the DID document. + * + * A DID controller is an entity that is authorized to make changes to a DID document. Typically, + * only the DID Subject (i.e., the value of `id` property in the DID document) is authoritative. + * However, another DID (or DIDs) can be specified as the DID controller, and when doing so, any + * verification methods contained in the DID document for the other DID should be accepted as + * authoritative. In other words, proofs created by the controller DID should be considered + * equivalent to proofs created by the DID Subject. + * + * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, § DID Controller} + * + * @example + * ```ts + * const did = await DidDht.create({ + * options: { + * controller: 'did:example:123' + * }; + * ``` + */ + controllers?: string | string[]; + + /** + * Optionally specify one or more registered DID DHT types to make the DID discovereable. + * + * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish + * to be discoverable and resolveable by type can include one or more types when publishing their + * DID document to a DID DHT Gateway. + * + * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. + */ + didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + + /** + * Optional. Determines whether the created DID should be published to the DHT network. + * + * If set to `true` or omitted, the DID is publicly discoverable. If `false`, the DID is not + * published and cannot be resolved by others. By default, newly created DIDs are published. + * + * @see {@link https://did-dht.com | DID DHT Method Specification} + * + * @example + * ```ts + * const did = await DidDht.create({ + * options: { + * publish: false + * }; + * ``` + */ + publish?: boolean; + + /** + * Optional. An array of service endpoints associated with the DID. + * + * Services are used in DID documents to express ways of communicating with the DID subject or + * associated entities. A service can be any type of service the DID subject wants to advertise, + * including decentralized identity management services for further discovery, authentication, + * authorization, or interaction. + * + * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, § Services} + * + * @example + * ```ts + * const did = await DidDht.create({ + * options: { + * services: [ + * { + * id: 'did:dht:i9xkp8ddcbcg8jwq54ox699wuzxyifsqx4jru45zodqu453ksz6y#dwn', + * type: 'DecentralizedWebNode', + * serviceEndpoint: ['https://example.com/dwn1', 'https://example/dwn2'] + * } + * ] + * }; + * ``` + */ + services?: DidService[]; + + /** + * Optional. An array of verification methods to be included in the DID document. + * + * By default, a newly created DID DHT document will contain a single Ed25519 verification method, + * also known as the {@link https://did-dht.com/#term:identity-key | Identity Key}. Additional + * verification methods can be added to the DID document using the `verificationMethods` property. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} + * + * @example + * ```ts + * const did = await DidDht.create({ + * options: { + * verificationMethods: [ + * { + * algorithm: 'Ed25519', + * purposes: ['authentication', 'assertionMethod'] + * }, + * { + * algorithm: 'Ed25519', + * id: 'dwn-sig', + * purposes: ['authentication', 'assertionMethod'] + * } + * ] + * }; + * ``` + */ + verificationMethods?: DidCreateVerificationMethod[]; +} + +/** + * Represents an optional extension to a DID Document’s DNS packet representation exposed as a + * type index. + * + * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish to + * be discoverable and resolveable by type can include one or more types when publishing their DID + * document to a DID DHT Gateway. + * + * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. + */ +export enum DidDhtRegisteredDidType { + Discoverable = 0, + Organization = 1, + Government = 2, + Corporation = 3, + LocalBusiness = 4, + SoftwarePackage = 5, + WebApp = 6, + FinancialInstitution = 7 +} + +/** + * Enumerates the types of keys that can be used in a DID DHT document. + * + * The DID DHT method supports various cryptographic key types. These key types are essential for + * the creation and management of DIDs and their associated cryptographic operations like signing + * and encryption. The registered key types are published in the DID DHT Registry and each is + * assigned a unique numerical value for use by client and gateway implementations. + * + * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}. + */ +export const DidDhtRegisteredKeyType: Record = { + Ed25519 : 0, + secp256k1 : 1, + secp256r1 : 2 +}; + +/** + * Private helper that maps algorithm identifiers to their corresponding DID DHT + * {@link DidDhtRegisteredKeyType | registered key type}. + */ +const AlgorithmToKeyTypeMap = { + Ed25519 : DidDhtRegisteredKeyType.Ed25519, + ES256K : DidDhtRegisteredKeyType.secp256k1, + ES256 : DidDhtRegisteredKeyType.secp256r1 +} as const; + +export class DidDht extends DidMethod { + + /** + * Name of the DID method, as defined in the DID DHT specification. + */ + public static methodName = 'dht'; + + public static async create({ + keyManager = new LocalKmsCrypto(), + options = {} + }: { + keyManager?: TKms; + options?: DidDhtCreateOptions; + } = {}): Promise { + // Before processing the create operation, validate DID-method-specific requirements to prevent + // keys from being generated unnecessarily. + + // Check 1: Validate that the algorithm for any given verification method is supported by the + // DID DHT specification. + if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) { + throw new Error('DidDht: One or more verification method algorithms are not supported'); + } + + // Check 2: Validate that the required properties for any given services are present. + if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) { + throw new Error('DidDht: One or more services are missing required properties'); + } + + // Generate random key material for the Identity Key and any additional verification methods. + const keySet = await DidDht.generateKeySet({ + keyManager, + verificationMethods: options.verificationMethods ?? [] + }); + + // Create the DID object from the generated key material, including DID document, metadata, + // signer convenience function, and URI. + return await DidDht.fromPublicKeys({ + keyManager, + options, + ...keySet, + }); + } + + public static async fromKeyManager({ didUri, keyManager }: { + didUri: string; + keyManager: CryptoApi; + }): Promise { + // Resolve the DID URI to a DID Document. + const { didDocument } = await DidDht.resolve(didUri); + + // Verify the DID Resolution Result includes a DID document containing verification methods. + if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { + throw new Error(`${this.name}: DID document for '${didUri}' is missing verification methods`); + } + + // Validate that the key material for every verification method in the DID document is present + // in the provided key manager. + for (let vm of didDocument.verificationMethod) { + if (!vm.publicKeyJwk) { + throw new Error(`${this.name}: Verification method '${vm.id}' does not contain a public key in JWK format`); + } + + // Compute the key URI of the verification method's public key. + const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk }); + + // Verify that the key is present in the key manager. If not, an error is thrown. + await keyManager.getPublicKey({ keyUri }); + } + + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidDht.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + } + + public static async fromKeys({ + keyManager = new LocalKmsCrypto(), + verificationMethods, + options = {} + }: { + keyManager?: CryptoApi & KeyImporterExporter; + options?: DidDhtCreateOptions; + } & DidKeySet): Promise { + if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { + throw new Error(`${this.name}: At least one verification method is required but 0 were given`); + } + + if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { + throw new Error(`${this.name}: Given verification methods are missing an Identity Key`); + } + + if (!verificationMethods?.some(vm => vm.privateKeyJwk && vm.publicKeyJwk)) { + throw new Error(`${this.name}: All verification methods must contain a public and private key in JWK format`); + } + + // Import the private key material for every verification method into the key manager. + for (let vm of verificationMethods) { + await keyManager.importKey({ key: vm.privateKeyJwk! }); + } + + // Create the DID object from the given key material, including DID document, metadata, + // signer convenience function, and URI. + return await DidDht.fromPublicKeys({ + keyManager, + options, + verificationMethods + }); + } + + public static async getSigningMethod({ didDocument, methodId = '#0' }: { + didDocument: DidDocument; + methodId?: string; + }): Promise { + + const parsedDid = DidUri.parse(didDocument.id); + if (parsedDid && parsedDid.method !== this.methodName) { + throw new Error(`DidDht: Method not supported: ${parsedDid.method}`); + } + + const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id.includes(methodId)); + + return verificationMethod; + } + + public static async publish({ keyManager, didDocument, didTypes }: { + keyManager: CryptoApi; + didDocument: DidDocument; + didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + }): Promise { + const isPublished = DidDhtDocument.publish({ keyManager, didDocument, didTypes }); + + return isPublished; + } + + public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise { + // Attempt to parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + return null as any; + } + + private static async fromPublicKeys({ + keyManager, + verificationMethods, + options + }: { + keyManager: CryptoApi; + options: DidDhtCreateOptions; + } & DidKeySet): Promise { + // Validate that the given verification methods contain an Identity Key. + const identityKey = verificationMethods?.find(vm => vm.id?.split('#').pop() === '0')?.publicKeyJwk; + if (!identityKey) { + throw new Error('DidDht: Identity Key not found in verification methods'); + } + + // Compute the DID identifier from the Identity Key. + const id = await DidDht.encodeIdentifier({ identityKey }); + + // Begin constructing the DID Document. + const didDocument: DidDocument = { + id, + ...options.alsoKnownAs && { alsoKnownAs: options.alsoKnownAs }, + ...options.controllers && { controller: options.controllers } + }; + + // Add verification methods to the DID document. + for (const vm of verificationMethods) { + if (!vm.publicKeyJwk) { + throw new Error(`DidJwk: Verification method '${vm.id}' does not contain a public key in JWK format`); + } + + // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID. + let methodId = vm.id ?? vm.publicKeyJwk.kid ?? await computeJwkThumbprint({ jwk: vm.publicKeyJwk }); + methodId = `${id}#${methodId.split('#').pop()}`; // Remove fragment prefix, if any. + + // Initialize the `verificationMethod` array if it does not already exist. + didDocument.verificationMethod ??= []; + + // Add the verification method to the DID document. + didDocument.verificationMethod.push({ + id : methodId, + type : 'JsonWebKey', + controller : vm.controller ?? id, + publicKeyJwk : vm.publicKeyJwk, + }); + + // Add the verification method to the specified purpose properties of the DID document. + for (const purpose of vm.purposes ?? []) { + // Initialize the purpose property if it does not already exist. + if (!didDocument[purpose]) didDocument[purpose] = []; + // Add the verification method to the purpose property. + didDocument[purpose]!.push(methodId); + } + } + + // Add services, if any, to the DID document. + options.services?.forEach(service => { + didDocument.service ??= []; + service.id = `${id}#${service.id.split('#').pop()}`; // Remove fragment prefix, if any. + didDocument.service.push(service); + }); + + // By default, publish the DID document to a DHT Gateway unless explicitly disabled. + if (options.publish ?? true) { + await this.publish({ keyManager, didDocument, didTypes: options.didTypes }); + } + + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidDht.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: id }; + } + + private static async generateKeySet({ + keyManager, + verificationMethods + }: { + keyManager: CryptoApi; + verificationMethods?: DidCreateVerificationMethod[]; + }): Promise { + let keySet: DidKeySet = {}; + // If `verificationMethodKeys` was not provided, create one. + if (!verificationMethods) verificationMethods = []; + + // If the given verification methods do not contain an Identity Key, add one. + if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { + // Add the Identity Key to the key set. + verificationMethods.push({ + algorithm : 'Ed25519' as any, + id : '0', + purposes : ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation'] + }); + } + + // Generate keys and add verification methods to the key set. + for (const vm of verificationMethods) { + // Generate a new random key for the verification method. + const keyUri = await keyManager.generateKey({ algorithm: vm.algorithm }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Initialize the verification methods array if it does not already exist. + keySet.verificationMethods ??= []; + + // Add the verification method to the key set. + keySet.verificationMethods.push({ + id : vm.id, + type : 'JsonWebKey', + controller : vm.controller, + publicKeyJwk : publicKey, + purposes : vm.purposes + }); + } + + return keySet; + } + + private static async decodeIdentifier({ didUri }: { + didUri: string + }): Promise { + // Parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // Verify that the DID URI is valid. + if (!(parsedDid && parsedDid.method === this.methodName)) { + throw new Error(`${this.name}: Invalid DID URI: ${didUri}`); + } + + // Decode the method-specific identifier from Base32Z to a byte array. + let identityKeyBytes: Uint8Array | undefined; + try { + identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); + } catch { /* Capture error */ } + + if (!identityKeyBytes || identityKeyBytes.length !== 32) { + throw new Error(`${this.name}: Failed to decode method-specific identifier`); + } + + // Convert the key from a byte array to JWK format. + const publicKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); + + return publicKey; + } + + /** + * Encodes a DID DHT Identity Key into a DID identifier. + * + * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with + * `did:dht:` to form the DID identifier. + * + * @param params The parameters to use when computing the DID identifier. + * @param params.identityKey The Identity Key from which the DID identifier is computed. + * @returns A promise that resolves to a string containing the DID identifier. + */ + private static async encodeIdentifier({ identityKey }: { + identityKey: Jwk + }): Promise { + // Convert the key from JWK format to a byte array. + const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); + + // Encode the byte array as a Base32Z string. + const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z(); + + return `did:${DidDht.methodName}:${identifier}`; + } +} + +class DidDhtDocument { + public static async publish({ keyManager, didDocument, didTypes }: { + keyManager: CryptoApi; + didDocument: DidDocument; + didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + }): Promise { + const dnsPacket = await DidDhtDocument.toDnsPacket({ didDocument, didTypes }); + + return null as any; + } + + private static async fromDnsPacket({ didUri, dnsPacket }: { + didUri: string; + dnsPacket: Packet; + }): Promise { + // Begin constructing the DID Document. + const didDocument: DidDocument = { id: didUri }; + + const __ = dnsPacket; + return null as any; + } + + private static async toDnsPacket({ didDocument, didTypes }: { + didDocument: DidDocument; + didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + }): Promise { + // Initialize the DNS response packet, with the authoritative answer flag set. + const dnsPacket: Packet = { + type : 'response', + id : 0, + flags : AUTHORITATIVE_ANSWER, + }; + + // Initialize the DNS packet's answer array. + dnsPacket.answers = []; + + const verificationMethodIds: string[] = []; + const serviceIds: string[] = []; + const rootRecord: string[] = []; + const keyLookup = new Map(); + + // Add key records for each verification method + didDocument.verificationMethod?.forEach(async (vm, index) => { + const dnsRecordId = `k${index}`; + let methodId = vm.id.split('#').pop()!; // Remove fragment prefix, if any. + keyLookup.set(methodId, dnsRecordId); + + const publicKey = vm.publicKeyJwk; + + if (!(publicKey?.crv && publicKey.crv in DidDhtRegisteredKeyType)) { + throw new Error(`DidDht: Verification method '${vm.id}' contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`); + } + + // Use the public key's `crv` property to get the DID DHT key type. + const keyType = DidDhtRegisteredKeyType[publicKey.crv]; + + // Convert the public key from JWK format to a byte array. + let publicKeyBytes; + switch (publicKey.crv) { + case 'Ed25519': + publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey}); + break; + case 'secp256k1': + publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey}); + break; + case 'secp256r1': + publicKeyBytes = Secp256r1PublicKeyToBytes(vm.publicKeyJwk.x); + break; + } + + // const keyRecord: TxtAnswer = { + // type : 'TXT', + // name : `_${dnsRecordId}._did`, + // ttl : TTL, + // data : `id=${vmId},t=${keyType},k=${keyBase64Url}` + // }; + + // packet.answers.push(keyRecord); + // vmIds.push(dnsRecordId); + }); + + const results = didDocument.verificationMethod.map(async vm => { + // Get the crv value + const crv = vm.publicKeyJwk.crv; + + // Use the crv value to get the keyType from the DidDhtRegisteredKeyType mapping + const keyType = DidDhtRegisteredKeyType[crv as keyof typeof DidDhtRegisteredKeyType]; + + // Depending on the crv value, call the appropriate publicKeyToBytes() function and get the public key in bytes + let publicKeyBytes; + switch (crv) { + case 'Ed25519': + publicKeyBytes = await Ed25519.publicKeyToBytes(vm.publicKeyJw); + break; + case 'secp256k1': + publicKeyBytes = Secp256k1PublicKeyToBytes(vm.publicKeyJwk.x); + break; + case 'secp256r1': + publicKeyBytes = Secp256r1PublicKeyToBytes(vm.publicKeyJwk.x); + break; + } + + // Return an object that contains the keyType and the public key in bytes + return { keyType, publicKeyBytes }; + }); + + return null as any; + } +} + +const processVerificationMethods = async (didDocument: DidDocument) => { + return didDocument.verificationMethod?.map(async (vm, index) => { + const dnsRecordId = `k${index}`; + let methodId = vm.id.split('#').pop()!; // Remove fragment prefix, if any. + + if (!(vm.publicKeyJwk?.crv && vm.publicKeyJwk.crv in DidDhtRegisteredKeyType)) { + throw new Error(`DidDht: Verification method '${vm.id}' contains unsupported key type: ${vm.publicKeyJwk?.crv ?? 'undefined'}`); + } + + const keyType = DidDhtRegisteredKeyType[vm.publicKeyJwk.crv]; + + switch(vm.publicKeyJwk.crv) { + case 'Ed25519': + return { keyType, publicKeyBytes: await Ed25519.publicKeyToBytes({ publicKey: vm.publicKeyJwk }) }; + case 'secp256k1': + return { keyType, publicKeyBytes: await Secp256k1.publicKeyToBytes({ publicKey: vm.publicKeyJwk }) }; + default: + throw new Error(`Unsupported curve type: ${vm.publicKeyJwk.crv}`); + } + }); +}; diff --git a/packages/dids/src/methods/did-ion.ts b/packages/dids/src/methods/did-ion.ts new file mode 100644 index 000000000..7a80686b1 --- /dev/null +++ b/packages/dids/src/methods/did-ion.ts @@ -0,0 +1,8 @@ +import type { KeyIdentifier } from '@web5/crypto'; + +import type { DidKeySet } from '../methods/did-method.js'; + +export interface DidIonKeySet extends DidKeySet { + recoveryKeyUri?: KeyIdentifier; + updateKeyUri?: KeyIdentifier; +} \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 73453690a..14a290afa 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -1,9 +1,10 @@ -import type{ AlgorithmIdentifier, CryptoApi, EnclosedSignParams, EnclosedVerifyParams, Jwk, Signer } from '@web5/crypto'; +import type { CryptoApi, EnclosedSignParams, EnclosedVerifyParams, Jwk, Signer, InferKeyGeneratorAlgorithm, KeyImporterExporter, KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams } from '@web5/crypto'; import { Convert } from '@web5/common'; +import { LocalKmsCrypto } from '@web5/crypto'; -import type{ Did, DidCreateOptions, DidKeySet, DidMetadata } from './did-method.js'; -import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; +import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; +import { DidVerificationRelationship, type DidDocument, type DidResolutionOptions, type DidResolutionResult, type DidVerificationMethod } from '../types/did-core.js'; import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; @@ -14,40 +15,56 @@ import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; * Defines the set of options available when creating a new Decentralized Identifier (DID) with the * 'did:jwk' method. * - * Either the `algorithm` or `keySet` option must be specified. If both are specified, the `keySet` - * option takes precedence. - * - * If given, the `algorithm` must be a valid algorithm identifier supported by the `keyManager` - * provided. + * Either the `algorithm` or `verificationMethods` option can be specified, but not both. + * - A new key will be generated using the algorithm identifier specified in either the `algorithm` + * property or the `verificationMethods` object's `algorithm` property. + * - If `verificationMethods` is given, it must contain exactly one entry since DID JWK only + * supports a single verification method. + * - If neither is given, the default is to generate a new Ed25519 key. * * @example * ```ts - * const keyManager = new LocalKmsCrypto(); + * // By default, when no options are given, a new Ed25519 key will be generated. + * const did = await DidJwk.create(); + * + * // The algorithm to use for key generation can be specified as a top-level option. + * const did = await DidJwk.create({ + * options: { algorithm = 'ES256K' } + * }); + * + * // Or, alternatively as a property of the verification method. * const did = await DidJwk.create({ - * keyManager, - * options: { algorithm = 'Ed25519' } + * options: { + * verificationMethods: [{ algorithm = 'ES256K' }] + * } * }); * ``` */ -export interface DidJwkCreateOptions extends DidCreateOptions { +export interface DidJwkCreateOptions extends DidCreateOptions { /** - * Optionally specify the algorithm to be used for key creation. + * Optionally specify the algorithm to be used for key generation. */ - algorithm?: AlgorithmIdentifier; + algorithm?: TKms extends CryptoApi + ? InferKeyGeneratorAlgorithm + : InferKeyGeneratorAlgorithm; /** - * Optionally specify the key set to be used for DID creation. + * Alternatively, specify the algorithm to be used for key generation of the single verification + * method in the DID Document. */ - keySet?: DidKeySet; + verificationMethods?: [DidCreateVerificationMethod]; } /** * The `DidJwk` class provides an implementation of the `did:jwk` DID method. -* -* Features: -* - DID Generation: Create new `did:jwk` DIDs. -* - DID Resolution: Resolve a `did:jwk` to its corresponding DID Document. -* - Signature Operations: Sign and verify messages using keys associated with a DID. + * + * Features: + * - DID Creation: Create new `did:jwk` DIDs. + * - DID Key Management: Instantiate a DID object from an existing verification method key set or + * or a key in a Key Management System (KMS). If supported by the KMS, a DID's + * key can be exported to a key set. + * - DID Resolution: Resolve a `did:jwk` to its corresponding DID Document. + * - Signature Operations: Sign and verify messages using keys associated with a DID. * * @remarks * The `did:jwk` DID method uses a single JSON Web Key (JWK) to generate a DID and does not rely @@ -63,7 +80,11 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * * @example * ```ts - * // DID Generation + * // DID Creation + * const did = await DidJwk.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKmsCrypto(); * const did = await DidJwk.create({ keyManager }); * * // DID Resolution @@ -73,6 +94,34 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * const signer = await did.getSigner(); * const signature = await signer.sign({ data: new TextEncoder().encode('Message') }); * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature }); + * + * // Key Management +* + * // Instantiate a DID object from an existing key in a KMS + * const did = await DidJwk.fromKeyManager({ + * didUri: 'did:jwk:eyJrIjoiT0tQIiwidCI6IkV1c2UyNTYifQ', + * keyManager + * }); + * + * // Instantiate a DID object from an existing verification method key + * const did = await DidJwk.fromKeys({ + * verificationMethods: [{ + * publicKeyJwk: { + * kty: 'OKP', + * crv: 'Ed25519', + * x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4' + * }, + * privateKeyJwk: { + * kty: 'OKP', + * crv: 'Ed25519', + * x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4', + * d: 'bdcGE4KzEaekOwoa-ee3gAm1a991WvNj_Eq3WKyqTnE' + * } + * }] + * }); + * + * // Export a DID's key to a key set + * const keySet = await DidJwk.toKeys({ did}); * ``` */ export class DidJwk extends DidMethod { @@ -83,46 +132,39 @@ export class DidJwk extends DidMethod { public static methodName = 'jwk'; /** - * Creates a new DID using the `did:jwk` method. + * Creates a new DID using the `did:jwk` method formed from a newly generated key. + * + * @remarks + * The DID URI is formed by Base64URL-encoding the JWK and prefixing with `did:jwk:`. + * + * Notes: + * - If no `options` are given, by default a new Ed25519 key will be generated. + * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given, + * an error will be thrown. * * @param params - The parameters for the create operation. - * @param params.keyManager - Key Management System (KMS) used to generate keys and sign data. - * @param params.options - Options that can be specified when creating a new DID. + * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate + * keys and sign data. + * @param params.options - Optional parameters that can be specified when creating a new DID. * @returns A Promise resolving to a {@link Did} object representing the new DID. */ - public static async create({ keyManager, options = {} }: { - keyManager: CryptoApi; - options: DidJwkCreateOptions; - }): Promise { - // Default to using ES256K for key generation if an algorithm is not given. - let { algorithm = 'ES256K', keySet } = options; - - // The public key used to create the DID. - let publicKey: Jwk; - - // If a key set is not given, generate a new key using the specified `algorithm`. - if (!keySet) { - const keyUri = await keyManager.generateKey({ algorithm }); - publicKey = await keyManager.getPublicKey({ keyUri }); - // Include the generated key in the key set that is returned in DID metadata. - keySet = { - keys: [{ - keyUri, - // Since a custom key set was not given, the key is assumed to used for all purposes. - purposes: ['assertionMethod', 'authentication', 'capabilityDelegation', 'capabilityInvocation', 'keyAgreement'] - }] - }; + public static async create({ + keyManager = new LocalKmsCrypto(), + options = {} + }: { + keyManager?: TKms; + options?: DidJwkCreateOptions; + } = {}): Promise { + if (options.algorithm && options.verificationMethods) { + throw new Error(`DidJwk: The 'algorithm' and 'verificationMethods' options are mutually exclusive`); + } - } else { - // If a key set is given, it must contain exactly one key. - if (!keySet.keys || keySet.keys.length !== 1) { - throw new Error(`DidJwk: This DID method requires a key set with exactly one key`); - } + // Default to Ed25519 key generation if an algorithm is not given. + const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519'; - // Retrieve the public key specified in the key set. - const publicKeyUri = keySet.keys[0].keyUri; - publicKey = await keyManager.getPublicKey({ keyUri: publicKeyUri }); - } + // Generate a new key using the specified `algorithm`. + const keyUri = await keyManager.generateKey({ algorithm }); + const publicKey = await keyManager.getPublicKey({ keyUri }); // Serialize the public key JWK to a UTF-8 string and encode to Base64URL format. const base64UrlEncoded = Convert.object(publicKey).toBase64Url(); @@ -134,8 +176,8 @@ export class DidJwk extends DidMethod { const didResolutionResult = await DidJwk.resolve(didUri); const didDocument = didResolutionResult.didDocument as DidDocument; - // DID Metadata contains only the key set for this DID method. - const metadata: DidMetadata = { keySet }; + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; // Define a function that returns a signer for the DID. const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ @@ -148,63 +190,144 @@ export class DidJwk extends DidMethod { } /** - * Given the W3C DID Document of a `did:jwk` DID, return a {@link Signer} that can be used to - * sign messages, credentials, or arbitrary data. + * Instantiates a `Did` object for the `did:jwk` method from a given key set. + * + * This method allows for the creation of a `Did` object using pre-existing key material, + * encapsulated within the `verificationMethods` array of the `DidKeySet`. This is particularly + * useful when the key material is already available and you want to construct a `Did` object + * based on these keys, instead of generating new keys. + * + * @remarks + * The `verificationMethods` array must contain exactly one key since the `did:jwk` method only + * supports a single verification method. * - * If given, the `keyUri` parameter is used to select a key from the verification methods present - * in the DID Document. For DID JWK, only one verification method can exist so the specified - * `keyUri` must refer to the same key. + * The key material (both public and private keys) should be provided in JWK format. The method + * handles the inclusion of these keys in the DID Document and sets up the necessary verification + * relationships. * - * If `keyUri` is not given, the first (and only) verification method in the DID Document is used. + * @param params - The parameters for the `fromKeys` operation. + * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to + * generate keys and sign data. If not given, a new + * {@link LocalKmsCrypto} instance will be created and used. + * @param params.verificationMethods - An array containing the key material in JWK format. + * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. + * @throws An error if the `verificationMethods` array does not contain exactly one entry. * - * @param params - The parameters for the `getSigner` operation. - * @param params.didDocument - DID Document of the DID whose keys will be used to construct the {@link Signer}. - * @param params.keyManager - Crypto API used to sign and verify data. - * @param params.keyUri - Key URI of the key that will be used for sign and verify operations. Optional. - * @returns An instantiated {@link Signer} that can be used to sign and verify data. + * @example + * ```ts + * // Example with an existing key in JWK format. + * const verificationMethods = [{ + * publicKeyJwk: { // public key in JWK format }, + * privateKeyJwk: { // private key in JWK format } + * }]; + * const did = await DidJwk.fromKeys({ verificationMethods }); + * ``` */ - public static async getSigner({ didDocument, keyManager, keyUri }: { - didDocument: DidDocument; - keyManager: CryptoApi; - keyUri?: string; - }): Promise { - let publicKey: Jwk | undefined; - - // If a key URI is given, get the public key, which is needed for verify operations. - if (keyUri) { - // Get the public key from the key store, which also verifies that the key is present. - publicKey = await keyManager.getPublicKey({ keyUri }); - // Verify the public key exists in the DID Document. - if (!(await getVerificationMethodByKey({ didDocument, publicKeyJwk: publicKey }))) { - throw new Error(`DidJwk: Key referenced by '${keyUri}' is not present in the provided DID Document for '${didDocument.id}'`); - } + public static async fromKeys({ + keyManager = new LocalKmsCrypto(), + verificationMethods + }: { + keyManager?: CryptoApi & KeyImporterExporter; + } & DidKeySet): Promise { + if (!verificationMethods || verificationMethods.length !== 1) { + throw new Error(`DidJwk: Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); + } - } else { - // If a key URI is not given, assume the signing key is the DID's only verification method. - ({ publicKeyJwk: publicKey } = await DidJwk.getSigningMethod({ didDocument }) ?? {}); - if (publicKey === undefined) { - throw new Error(`DidJwk: No verification methods found in the provided DID Document for '${didDocument.id}'`); - } - // Compute the expected key URI of the signing key. - keyUri = await keyManager.getKeyUri({ key: publicKey }); + if (!(verificationMethods[0].privateKeyJwk && verificationMethods[0].publicKeyJwk)) { + throw new Error(`DidJwk: Verification method does not contain a public and private key in JWK format`); } - // Both the `keyUri` and `publicKey` must be known before returning a signer. - if (!(keyUri && publicKey)) { - throw new Error(`DidJwk: Failed to determine the keys needed to create a signer`); + // Store the private key in the key manager. + await keyManager.importKey({ key: verificationMethods[0].privateKeyJwk }); + + // Serialize the public key JWK to a UTF-8 string and encode to Base64URL format. + const base64UrlEncoded = Convert.object(verificationMethods[0].publicKeyJwk).toBase64Url(); + + // Attach the prefix `did:jwk` to form the complete DID URI. + const didUri = `did:${DidJwk.methodName}:${base64UrlEncoded}`; + + // Expand the DID URI string to a DID didDocument. + const didResolutionResult = await DidJwk.resolve(didUri); + const didDocument = didResolutionResult.didDocument as DidDocument; + + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + } + + /** + * Instantiates a `Did` object from an existing DID using keys in an external Key Management + * System (KMS). + * + * This method returns a `Did` object by resolving an existing `did:jwk` DID URI and verifying + * that all associated keys are present in the provided key manager. + * + * @remarks + * The method verifies the presence of key material for every verification method in the DID + * document within the given KMS. If any key is missing, an error is thrown. + * + * This approach ensures that the resulting `Did` object is fully operational with the provided + * key manager and that all cryptographic operations related to the DID can be performed. + * + * @param params - The parameters for the `fromKeyManager` operation. + * @param params.didUri - The URI of the DID to be instantiated. + * @param params.keyManager - The Key Management System to be used for key management operations. + * @returns A Promise resolving to the instantiated `Did` object. + * @throws An error if any key in the DID document is not present in the provided KMS. + * + * @example + * ```ts + * // Assuming keyManager is an instance of a KMS implementation + * const didUri = 'did:jwk:example'; + * const did = await DidJwk.fromKeyManager({ didUri, keyManager }); + * // The 'did' is now an instance of Did, linked with the provided keyManager. + * ``` + */ + public static async fromKeyManager({ didUri, keyManager }: { + didUri: string; + keyManager: CryptoApi; + }): Promise { + // Resolve the DID URI to a DID Document. + const { didDocument } = await DidJwk.resolve(didUri); + + // Verify the DID Resolution Result includes a DID document containing verification methods. + if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { + throw new Error(`DidJwk: DID document for '${didUri}' is missing verification methods`); } - return { - async sign({ data }: EnclosedSignParams): Promise { - const signature = await keyManager.sign({ data, keyUri: keyUri! }); // `keyUri` is guaranteed to be defined at this point. - return signature; - }, - - async verify({ data, signature }: EnclosedVerifyParams): Promise { - const isValid = await keyManager.verify({ data, key: publicKey!, signature }); // `publicKey` is guaranteed to be defined at this point. - return isValid; + // Validate that the key material for every verification method in the DID document is present + // in the provided key manager. + for (let vm of didDocument.verificationMethod) { + if (!vm.publicKeyJwk) { + throw new Error(`DidJwk: Verification method '${vm.id}' does not contain a public key in JWK format`); } - }; + + // Compute the key URI of the verification method's public key. + const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk }); + + // Verify that the key is present in the key manager. If not, an error is thrown. + await keyManager.getPublicKey({ keyUri }); + } + + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; } /** @@ -213,7 +336,7 @@ export class DidJwk extends DidMethod { * verification method. If not given, the first verification method in the DID Document is used. * * Note that for DID JWK, only one verification method can exist so specifying `methodId` could be - * considered redundant or unnecessar. The option is provided for consistency with other DID + * considered redundant or unnecessary. The option is provided for consistency with other DID * method implementations. * * @param params - The parameters for the `getSigningMethod` operation. @@ -222,24 +345,19 @@ export class DidJwk extends DidMethod { * @returns Verification method to use for signing. */ public static async getSigningMethod({ didDocument, methodId = '#0' }: { - didDocument: DidDocument, - methodId?: string - }): Promise { - - const [, method] = didDocument.id.split(':'); - if (method !== 'jwk') { - throw new Error(`DidJwk: Method not supported: ${method}`); + didDocument: DidDocument; + methodId?: string; + }): Promise { + // Verify the DID method is supported. + const parsedDid = DidUri.parse(didDocument.id); + if (parsedDid && parsedDid.method !== this.methodName) { + throw new Error(`DidJwk: Method not supported: ${parsedDid.method}`); } - let didResource: DidVerificationMethod | undefined; - for (let vm of didDocument.verificationMethod ?? []) { - if (vm.id.includes(methodId)) { - didResource = vm; - break; - } - } + // Attempt to find the verification method in the DID Document. + const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id.endsWith(methodId)); - return didResource; + return verificationMethod; } /** diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts new file mode 100644 index 000000000..8907feab2 --- /dev/null +++ b/packages/dids/src/methods/did-key.ts @@ -0,0 +1,208 @@ +import type { CryptoApi, Jwk } from '@web5/crypto'; + +import { universalTypeOf } from '@web5/common'; +import { + Jose, + Ed25519, + utils as cryptoUtils, + LocalKmsCrypto, +} from '@web5/crypto'; + +import type { Did, DidCreateOptions, DidKeySet } from './did-method.js'; +import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; + +import { DidMethod } from './did-method.js'; +import { getVerificationMethodTypes } from '../utils.js'; + + + + + + + + +/** + * Defines the set of options available when creating a new Decentralized Identifier (DID) with the + * 'did:key' method. + * + * Either the `algorithm` or `keySet` option must be specified, but not both. + * - If `algorithm` is given, a new key will be generated using the specified algorithm. + * - If `keySet` is given, it must contain exactly one key. + * - If neither is given, the default is to generate a new Ed25519 key. + * + * @example + * ```ts + * const keyManager = new LocalKmsCrypto(); + * const did = await DidKey.create({ + * keyManager, + * options: { algorithm = 'Ed25519' } + * }); + * ``` + */ +export interface DidKeyCreateOptions extends DidCreateOptions { + /** + * Optionally specify the algorithm to be used for key generation. + * + * Note: This option + */ + algorithm?: AlgorithmIdentifier; + + /** + * Optionally enable encryption key derivation during DID creation. + * + * By default, this option is set to `false`, which means encryption key derivation is not + * performed unless explicitly enabled. + * + * When set to `true`, an `X25519` key will be derived from the `Ed25519` public key used to + * create the DID. This feature enables the same DID to be used for encrypted communication, in + * addition to signature verification. + * + * Notes: + * - This option is ONLY applicable when the `algorithm` of the DID's public key is `Ed25519`. + * - Enabling this introduces specific cryptographic considerations that should be understood + * before using the same key pair for digital signatures and encrypted communication. See the following for more information: + */ + enableEncryptionKeyDerivation?: boolean; + + /** + * Optionally specify an existing set of keys to be used for DID creation. + */ + keySet?: DidKeySet; + + /** + * Optionally specify the format of the public key to be used for DID creation. + */ + publicKeyFormat?: keyof typeof DidKey.VERIFICATION_METHOD_TYPES; +} + +/** + * The `DidKey` class provides an implementation of the 'did:key' DID method. + * + * !TODO: Add the rest of the class documentation. + * + * @remarks + * The `did:key` DID method uses a single public key to generate a DID and does not rely + * on any external system such as a blockchain or centralized database. This characteristic makes + * it suitable for use cases where a assertions about a DID Subject can be self-verifiable by + * third parties. + * + * The method-specific identifier is formed by + * {@link https://datatracker.ietf.org/doc/html/draft-multiformats-multibase#name-base-58-bitcoin-encoding | Multibase base58-btc} + * encoding the concatenation of the + * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec} identifier + * for the public key type and the raw public key bytes. To form the DID URI, the method-specific + * identifier is prefixed with the string 'did:key:'. + * + * This method can optionally derive an encryption key from the public key used to create the DID + * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be + * used for encrypted communication, in addition to signature verification. To enable this + * feature when calling {@link DidKey.create | `DidKey.create()`}, first specify an `algorithm` of + * `Ed25519` or provide a `keySet` referencing an `Ed25519` key and then set the + * `enableEncryptionKeyDerivation` option to `true`. + * + * Note: + * - The authors of the DID Key specification have indicated that use of this method for long-lived + * use cases is only recommended when accompanied with high confidence that private keys are + * securely protected by software or hardware isolation. + * + * @see {@link https://w3c-ccg.github.io/did-method-key/ | DID Key Specification} + * + * @example + * !TODO: Add examples. + */ +export class DidKey extends DidMethod { + + /** + * Name of the DID method, as defined in the DID Key specification. + */ + public static methodName = 'key'; + + public static readonly VERIFICATION_METHOD_TYPES = { + 'Ed25519VerificationKey2020' : 'https://w3id.org/security/suites/ed25519-2020/v1', + 'JsonWebKey2020' : 'https://w3id.org/security/suites/jws-2020/v1', + 'X25519KeyAgreementKey2020' : 'https://w3id.org/security/suites/x25519-2020/v1', + } as const; + + /** + * Creates a new DID using the `did:key` method formed from either a newly generated key or an + * existing key set. + * + * @remarks + * The DID URI is formed by + * {@link https://datatracker.ietf.org/doc/html/draft-multiformats-multibase#name-base-58-bitcoin-encoding | Multibase base58-btc} + * encoding the + * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec}-encoded + * public key and prefixing with `did:key:`. + * + * This method can optionally derive an encryption key from the public key used to create the DID + * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be + * used for encrypted communication, in addition to signature verification. To enable this + * feature, first specify an `algorithm` of `Ed25519` or provide a `keySet` referencing an + * `Ed25519` key and then set the `enableEncryptionKeyDerivation` option to `true`. + * + * Notes: + * - If no `options` are given, by default a new Ed25519 key will be generated. + * - The `algorithm` and `keySet` options are mutually exclusive. If both are given, an + * error will be thrown. + * - If a `keySet` is given, it must contain exactly one key. + * + * @param params - The parameters for the create operation. + * @param params.keyManager - Key Management System (KMS) used to generate keys and sign data. + * @param params.options - Optional parameters that can be specified when creating a new DID. + * @returns A Promise resolving to a {@link Did} object representing the new DID. + * @throws `TypeError` if both `algorithm` and `keySet` options are provided, as they + * are mutually exclusive. + */ + public static async create({ + keyManager = new LocalKmsCrypto(), + options = {} + }: { + keyManager?: TKms; + options?: DidKeyCreateOptions; + } = {}): Promise { + // Check for mutual exclusivity of 'algorithm' and 'keySet' options. + if (options.algorithm && options.keySet) { + throw new TypeError(`DidKey: The 'algorithm' and 'keySet' options are mutually exclusive and cannot be used together.`); + } + + let { + // Default to Ed25519 key generation if an algorithm is not given. + algorithm = 'Ed25519', + // Default to not deriving an encryption key. + enableEncryptionKeyDerivation = false, + keySet + } = options; + + return null as any; + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index b99439993..5a3a4f945 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -1,6 +1,22 @@ -import type { CryptoApi, KeyIdentifier, Signer } from '@web5/crypto'; +import type { + Jwk, + Signer, + CryptoApi, + LocalKmsCrypto, + EnclosedSignParams, + EnclosedVerifyParams, + InferKeyGeneratorAlgorithm, +} from '@web5/crypto'; -import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationRelationship } from '../types/did-core.js'; +import type { + DidDocument, + DidResolutionResult, + DidResolutionOptions, + DidVerificationMethod, +} from '../types/did-core.js'; + +import { getVerificationMethodByKey } from '../utils.js'; +import { DidVerificationRelationship } from '../types/did-core.js'; /** * Represents a Decentralized Identifier (DID) along with its convenience functions. @@ -32,14 +48,10 @@ export interface Did { */ keyManager: CryptoApi; - /** - * @inheritdoc DidMetadata - */ + /** {@inheritDoc DidMetadata} */ metadata: DidMetadata; - /** - * @inheritdoc DidUri#uri - */ + /** {@inheritDoc DidUri#uri} */ uri: string; } @@ -50,17 +62,62 @@ export interface Did { * options or metadata during the DID creation processes following specific DID method * specifications. */ -export interface DidCreateOptions {} +export interface DidCreateOptions { + /** + * Optional. An array of verification methods to be included in the DID document. + */ + verificationMethods?: DidCreateVerificationMethod[]; +} /** - * Represents metadata about a DID resulting from create, update, or deactivate operations. + * Options for additional verification methods added to the DID Document during the creation of a + * new Decentralized Identifier (DID). */ -export type DidMetadata = { +export interface DidCreateVerificationMethod extends Pick, 'controller' | 'id' | 'type'> { /** - * The key set associated with the DID. + * The name of the cryptographic algorithm to be used for key generation. + * + * Examples might include `Ed25519` and `ES256K` but will vary depending on the DID method + * specification and the key management system in use. + * + * @example + * ```ts + * const verificationMethod: DidCreateVerificationMethod = { + * algorithm: 'Ed25519' + * }; + * ``` */ - keySet: DidKeySet; + algorithm: TKms extends CryptoApi + ? InferKeyGeneratorAlgorithm + : InferKeyGeneratorAlgorithm; + /** + * Optionally specify the purposes for which a verification method is intended to be used in a DID + * document. + * + * The `purposes` property defines the specific + * {@link DidVerificationRelationship | verification relationships} between the DID subject and + * the verification method. This enables the verification method to be utilized for distinct + * actions such as authentication, assertion, key agreement, capability delegation, and others. It + * is important for verifiers to recognize that a verification method must be associated with the + * relevant purpose in the DID document to be valid for that specific use case. + * + * @example + * ```ts + * const verificationMethod: DidCreateVerificationMethod = { + * algorithm: 'Ed25519', + * controller: 'did:example:1234', + * purposes: ['authentication', 'assertionMethod'] + * }; + * ``` + */ + purposes?: (DidVerificationRelationship | keyof typeof DidVerificationRelationship)[]; +} + +/** + * Represents metadata about a DID resulting from create, update, or deactivate operations. + */ +export type DidMetadata = { // Additional properties of any type. [key: string]: any; } @@ -71,7 +128,11 @@ export type DidMetadata = { * @typeparam T - The type of the DID instance associated with this method. * @typeparam O - The type of the options used for creating the DID. */ -export interface DidMethodApi extends DidMethodResolver { +export interface DidMethodApi< + TDid extends Did, + TOptions extends DidCreateOptions, + TKms extends CryptoApi | undefined = undefined + > extends DidMethodResolver { /** * The name of the DID method. * @@ -88,11 +149,11 @@ export interface DidMethodApi extends * implemented, using the provided `keyManager`, and optionally, any provided `options`. * * @param params - The parameters used to create the DID. - * @param params.keyManager - The cryptographic API used for key management. + * @param params.keyManager - Optional. The cryptographic API used for key management. * @param params.options - Optional. The options used for creating the DID. * @returns A promise that resolves to the newly created DID instance. */ - create(params: { keyManager: CryptoApi, options?: O }): Promise; + create(params: { keyManager?: TKms, options?: TOptions }): Promise; } /** @@ -127,66 +188,254 @@ export interface DidMethodResolver { } /** - * A set of keys associated with a DID. + * A set of keys associated with the verification methods of a Decentralized Identifier (DID). * - * The keys in this set are expected to be managed by a Key Management System (KMS) which - * implements the {@link @web5/crypto#CryptoApi | CryptoApi} interface. Examples of such KMS - * implementations include {@link @web5/crypto#LocalKmsCrypto | LocalKmsCrypto} and - * {@link @web5/crypto-aws-kms#AwsKmsCrypto | AwsKmsCrypto}. + * The keys in this set can be used to instantiate a new {@link Did} object typically using the + * `fromKeys()` method of a {@link DidMethod} implementation. */ export interface DidKeySet { /** - * An optional array of keys that are managed by a Key Management System (KMS). + * An optional array of verification methods to be included in the DID document. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} + * + * @example + * ```ts + * const did = await DidExample.fromKeys({ + * verificationMethods: [ + * { + * publicKeyJwk: { + * kty: "OKP", + * crv: "X25519", + * x: "7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY", + * kid: "xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I" + * }, + * privateKeyJwk: { + * kty: "OKP", + * crv: "X25519", + * d: "qM1E646TMZwFcLwRAFwOAYnTT_AvbBd3NBGtGRKTyU8", + * x: "7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY", + * kid: "xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I" + * }, + * purposes: ['authentication', 'assertionMethod'] + * } + * ] + * ``` */ - keys?: DidKmsKey[]; + verificationMethods?: DidKeySetVerificationMethod[]; } /** - * Represents a key managed by a Key Management System (KMS) within the context of a Decentralized - * Identifier (DID). - * - * This interface describes a cryptographic key used in conjunction with DID operations. The key is - * identified by a `keyUri`, and is associated with one or more verification relationship purposes - * within the DID document. + * Represents a verification method within a DID Key Set, including both public and private key + * components, and specifies the purposes for which the verification method can be used. * - * The key referred to by the `keyUri` is expected to be managed by a Key Management System (KMS) - * which implements the {@link @web5/crypto#CryptoApi | CryptoApi} interface. Examples of such KMS - * implementations include {@link @web5/crypto#LocalKmsCrypto | LocalKmsCrypto} and - * {@link @web5/crypto-aws-kms#AwsKmsCrypto | AwsKmsCrypto}. - * - * @example - * ```ts - * const didKmsKey: DidKmsKey = { - * keyUri: 'urn:jwk:vO8jHDKD8dynDvVp8Ea2szjIRz2V-hCMhtmJYOxO4oY', - * purposes: ['assertionMethod', 'authentication'] - * }; - * ``` - * - * @see {@link DidVerificationRelationship} for the list of possible verification relationships that - * can be used to specify the purpose(s) of a key. + * This interface extends {@link DidVerificationMethod}, providing a structure for a cryptographic + * key pair (public and private keys) with optional purposes. It is used in the context of + * Decentralized Identifiers (DIDs) where key pairs are associated with specific verification + * relationships. */ -export interface DidKmsKey { +export interface DidKeySetVerificationMethod extends Partial { /** - * A unique identifier for the key within the KMS. This URI is used to reference and manage the - * key in operations such as signing or encryption. + * Express the private key in JWK format. + * + * (Optional) A JSON Web Key that conforms to {@link https://datatracker.ietf.org/doc/html/rfc7517 | RFC 7517}. */ - keyUri: KeyIdentifier; + privateKeyJwk?: Jwk; /** - * An array of {@link DidVerificationRelationship | Verification Relationships} that the key is - * intended to be used for. Each relationship type specifies how the key can be used in the - * context of the DID, such as for authentication, assertion, key agreement, etc. + * Optionally specify the purposes for which a verification method is intended to be used in a DID + * document. + * + * The `purposes` property defines the specific + * {@link DidVerificationRelationship | verification relationships} between the DID subject and + * the verification method. This enables the verification method to be utilized for distinct + * actions such as authentication, assertion, key agreement, capability delegation, and others. It + * is important for verifiers to recognize that a verification method must be associated with the + * relevant purpose in the DID document to be valid for that specific use case. + * + * @example + * ```ts + * const verificationMethod: DidKeySetVerificationMethod = { + * publicKeyJwk: { + * kty: "OKP", + * crv: "X25519", + * x: "7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY", + * kid: "xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I" + * }, + * privateKeyJwk: { + * kty: "OKP", + * crv: "X25519", + * d: "qM1E646TMZwFcLwRAFwOAYnTT_AvbBd3NBGtGRKTyU8", + * x: "7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY", + * kid: "xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I" + * }, + * purposes: ['authentication', 'assertionMethod'] + * }; + * ``` */ - purposes: DidVerificationRelationship[]; + purposes?: (DidVerificationRelationship | keyof typeof DidVerificationRelationship)[]; } /** * Base abstraction for all Decentralized Identifier (DID) method implementations. * - * This abstract class serves as a foundational structure upon which specific DID methods + * This base class serves as a foundational structure upon which specific DID methods * can be implemented. Subclasses should furnish particular method and data models adherent - * to various DID methods. taking care to adhere to the + * to various DID methods, taking care to adhere to the * {@link https://www.w3.org/TR/did-core/ | W3C DID Core specification} and the * respective DID method specifications. */ -export abstract class DidMethod {} \ No newline at end of file +export class DidMethod { + /** + * Given a W3C DID Document, return a {@link Signer} that can be used to sign messages, + * credentials, or arbitrary data. + * + * If given, the `keyUri` parameter is used to select a key from the verification methods present + * in the DID Document. + * + * If `keyUri` is not given, the first (or DID method specific default) verification method in the + * DID document is used. + * + * @param params - The parameters for the `getSigner` operation. + * @param params.didDocument - DID Document of the DID whose keys will be used to construct the {@link Signer}. + * @param params.keyManager - Web5 Crypto API used to sign and verify data. + * @param params.keyUri - Key URI of the key that will be used for sign and verify operations. Optional. + * @returns An instantiated {@link Signer} that can be used to sign and verify data. + */ + public static async getSigner({ didDocument, keyManager, keyUri }: { + didDocument: DidDocument; + keyManager: CryptoApi; + keyUri?: string; + }): Promise { + let publicKey: Jwk | undefined; + + // If a key URI is given use the referenced key for sign and verify operations. + if (keyUri) { + // Get the public key from the key store, which also verifies that the key is present. + publicKey = await keyManager.getPublicKey({ keyUri }); + // Verify the public key exists in the DID Document. + if (!(await getVerificationMethodByKey({ didDocument, publicKeyJwk: publicKey }))) { + throw new Error(`DidJwk: Key referenced by '${keyUri}' is not present in the provided DID Document for '${didDocument.id}'`); + } + + } else { + // If a key URI is not given, use the key associated with the verification method that is used + // by default for sign and verify operations. The default verification method is determined by + // the DID method implementation. + ({ publicKeyJwk: publicKey } = await this.getSigningMethod({ didDocument }) ?? {}); + if (publicKey === undefined) { + throw new Error(`DidJwk: No verification methods found in the provided DID Document for '${didDocument.id}'`); + } + // Compute the expected key URI of the signing key. + keyUri = await keyManager.getKeyUri({ key: publicKey }); + } + + // Both the `keyUri` and `publicKey` must be known before returning a signer. + if (!(keyUri && publicKey)) { + throw new Error(`DidJwk: Failed to determine the keys needed to create a signer`); + } + + return { + async sign({ data }: EnclosedSignParams): Promise { + const signature = await keyManager.sign({ data, keyUri: keyUri! }); // `keyUri` is guaranteed to be defined at this point. + return signature; + }, + + async verify({ data, signature }: EnclosedVerifyParams): Promise { + const isValid = await keyManager.verify({ data, key: publicKey!, signature }); // `publicKey` is guaranteed to be defined at this point. + return isValid; + } + }; + } + + /** + * MUST be implemented by all DID method implementations that extend {@link DidMethod}. + * + * Given the W3C DID Document of a DID, return the verification method that will be used for + * signing messages and credentials. If given, the `methodId` parameter is used to select the + * verification method. If not given, each DID method implementation will select a default + * verification method from the DID Document. + * + * @param params - The parameters for the `getSigningMethod` operation. + * @param params.didDocument - DID Document to get the verification method from. + * @param params.methodId - ID of the verification method to use for signing. + * @returns Verification method to use for signing. + */ + public static async getSigningMethod(_params: { + didDocument: DidDocument; + methodId?: string; + }): Promise { + throw new Error(`Not implemented: Classes extending DidMethod must implement getSigningMethod()`); + } + + /** + * Converts a `Did` object to a `DidKeySet` containing the keys associated with the DID. + * + * This method is useful when you need to export the key material associated with a DID into a + * format that can be used independently of the DID document. It extracts both public and private + * keys from the DID's key manager and organizes them into a `DidKeySet` structure. + * + * @remarks + * This method requires that the DID's key manager supports the `exportKey` operation. If the DID + * document does not contain any verification methods, or if the key manager does not support key + * export, an error is thrown. + * + * The resulting `DidKeySet` will contain the same number of verification methods as the DID + * document, each with its associated public and private keys and the purposes for which the key + * can be used. + * + * @example + * ```ts + * // Assuming `did` is an instance of Did + * const keySet = await DidJwk.toKeys({ did }); + * // keySet now contains the verification methods and their associated keys. + * ``` + * + * @param params - The parameters for the export keys operation. + * @param params.did - The `Did` object whose keys are to be exported. + * @returns A `DidKeySet` containing the keys associated with the DID. + * @throws An error if the key manager does not support key export or if the DID document + * is missing verification methods. + */ + public static async toKeys({ did }: { did: Did }): Promise { + // First, confirm that the DID's key manager supports exporting keys. + if (!('exportKey' in did.keyManager && typeof did.keyManager.exportKey === 'function')) { + throw new Error(`${this.name}: The key manager of the given DID does not support exporting keys`); + } + + // Verify the DID document contains at least one verification method. + if (!(Array.isArray(did.didDocument.verificationMethod) && did.didDocument.verificationMethod.length > 0)) { + throw new Error(`${this.name}: DID document for '${did.uri}' is missing verification methods`); + } + + let keySet: DidKeySet = { verificationMethods: [] }; + + // Retrieve the key material for every verification method in the DID document from the key + // manager. + for (let vm of did.didDocument.verificationMethod) { + if (!vm.publicKeyJwk) { + throw new Error(`${this.name}: Verification method '${vm.id}' does not contain a public key in JWK format`); + } + + // Compute the key URI of the verification method's public key. + const keyUri = await did.keyManager.getKeyUri({ key: vm.publicKeyJwk }); + + // Retrieve the public and private keys from the key manager. + const privateKey = await did.keyManager.exportKey({ keyUri }); + + // Collect the purposes associated with this verification method from the DID document. + const purposes = Object + .keys(DidVerificationRelationship) + .filter((purpose) => (did.didDocument[purpose as keyof DidDocument] as any[])?.includes(vm.id)) as DidVerificationRelationship[]; + + // Add the verification method to the key set. + keySet.verificationMethods!.push({ + ...vm, + privateKeyJwk: privateKey, + purposes + }); + } + + return keySet; + } +} \ No newline at end of file diff --git a/packages/dids/src/types/did-core.ts b/packages/dids/src/types/did-core.ts index f2f702279..dd28ef322 100644 --- a/packages/dids/src/types/did-core.ts +++ b/packages/dids/src/types/did-core.ts @@ -107,7 +107,7 @@ export type DidDereferencingResult = { * A DID Document can be retrieved by resolving a DID, as described in * {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, § DID Resolution}. */ -export type DidDocument = { +export interface DidDocument { /** * A JSON-LD context link, which provides a JSON-LD processor with the information necessary to * interpret the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'. @@ -133,8 +133,12 @@ export type DidDocument = { alsoKnownAs?: string[]; /** - * A DID controller is an entity that is authorized to make changes to a DID document. The process - * of authorizing a DID controller is defined by the DID method. + * A DID controller is an entity that is authorized to make changes to a DID document. Typically, + * only the DID Subject (i.e., the value of `id` property in the DID document) is authoritative. + * However, another DID can be specified as the DID controller, and when doing so, any + * verification methods contained in the DID document for the other DID should be accepted as + * authoritative. In other words, proofs created by the controller DID should be considered + * equivalent to proofs created by the DID Subject. * * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, § DID Controller} */ @@ -154,7 +158,7 @@ export type DidDocument = { * * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, § Assertion} */ - assertionMethod?: DidVerificationMethod[] | string[]; + assertionMethod?: (DidVerificationMethod | string)[]; /** * The `authentication` verification relationship is used to specify how the DID subject is expected @@ -163,7 +167,7 @@ export type DidDocument = { * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, § Authentication} */ - authentication?: DidVerificationMethod[] | string[]; + authentication?: (DidVerificationMethod | string)[]; /** * The `keyAgreement` verification relationship is used to specify how an entity can generate @@ -173,7 +177,7 @@ export type DidDocument = { * * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, § Key Agreement} */ - keyAgreement?: DidVerificationMethod[] | string[]; + keyAgreement?: (DidVerificationMethod | string)[]; /** * The `capabilityDelegation` verification relationship is used to specify a mechanism that might @@ -182,14 +186,14 @@ export type DidDocument = { * * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, § Capability Delegation} */ - capabilityDelegation?: DidVerificationMethod[] | string[]; + capabilityDelegation?: (DidVerificationMethod | string)[]; /** * The `capabilityInvocation` verification relationship is used to specify a verification method * that might be used by the DID subject to invoke a cryptographic capability, such as the * authorization to update the DID Document. */ - capabilityInvocation?: DidVerificationMethod[] | string[]; + capabilityInvocation?: (DidVerificationMethod | string)[]; /** * Services are used in DID documents to express ways of communicating with the DID subject or @@ -486,7 +490,7 @@ export type DidServiceEndpoint = string | Record; * * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} */ -export type DidVerificationMethod = { +export interface DidVerificationMethod { /** * The identifier of the verification method, which must be a URI. */ @@ -520,9 +524,10 @@ export type DidVerificationMethod = { // an encoded (e.g, base58) key with a Multibase-prefix that conforms to // https://datatracker.ietf.org/doc/draft-multiformats-multibase/ publicKeyMultibase?: string; -}; +} /** + * !TODO: Rewrite this to use the enum below * Represents the various verification relationships defined in a DID document. * * These relationships indicate the intended use of verification methods associated with a DID. Each @@ -552,9 +557,66 @@ export type DidVerificationMethod = { * * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, § Verification Relationships} */ -export type DidVerificationRelationship = - | 'assertionMethod' - | 'authentication' - | 'keyAgreement' - | 'capabilityDelegation' - | 'capabilityInvocation'; \ No newline at end of file + +// export type DidVerificationRelationship = +// | 'assertionMethod' +// | 'authentication' +// | 'keyAgreement' +// | 'capabilityDelegation' +// | 'capabilityInvocation'; + +/** + * An array of constant strings representing the standard verification relationships defined + * in the DID Core Specification. + * + * These verification relationships indicate the intended usage of verification methods within a DID + * document. Each relationship signifies a different purpose or context in which a verification + * method can be used, such as authentication, assertionMethod, keyAgreement, capabilityDelegation, + * and capabilityInvocation. The array provides a standardized set of relationship names for + * consistent referencing and implementation across different DID methods. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, § Verification Relationships} + * @example + * ```ts + * // Example usage of DID_VERIFICATION_RELATIONSHIPS in a DID method implementation + * if (didDocument.authentication.includes(someVerificationMethod)) { + * // Handle authentication verification method + * } + * ``` + */ +export enum DidVerificationRelationship { + /** + * Indicates that the verification method is intended to be used for authentication purposes. + * + * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, § Authentication} + */ + authentication = 'authentication', + + /** + * Indicates that the verification method is intended to be used for assertion purposes. + * + * @see {@link hthttps://www.w3.org/TR/did-core/#assertion | DID Core Specification, § Assertion} + */ + assertionMethod = 'assertionMethod', + + /** + * Indicates that the verification method is intended to be used for key agreement purposes. + * + * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, § Key Agreement} + */ + keyAgreement = 'keyAgreement', + + /** + * Indicates that the verification method is intended to be used for capability delegation purposes. + * + * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, § Capability Delegation} + */ + capabilityDelegation = 'capabilityDelegation', + + /** + * Indicates that the verification method is intended to be used for capability invocation purposes. + * + * @see {@link https://www.w3.org/TR/did-core/#capability-invocation | DID Core Specification, § Capability Invocation} + */ + capabilityInvocation = 'capabilityInvocation' +} \ No newline at end of file diff --git a/packages/dids/src/utils.ts b/packages/dids/src/utils.ts index 588650241..d21e3ec5c 100644 --- a/packages/dids/src/utils.ts +++ b/packages/dids/src/utils.ts @@ -2,7 +2,7 @@ import type { Jwk } from '@web5/crypto'; import { computeJwkThumbprint } from '@web5/crypto'; -import type { +import { DidService, DidDocument, DidVerificationMethod, @@ -162,20 +162,11 @@ export function getVerificationMethods({ didDocument }: { const verificationMethods: DidVerificationMethod[] = []; // Check the 'verificationMethod' array. - verificationMethods.push(...didDocument?.verificationMethod?.filter(isDidVerificationMethod) ?? []); - - // Define the verification relationship properties to check. - const verificationRelationships: DidVerificationRelationship[] = [ - 'authentication', - 'assertionMethod', - 'keyAgreement', - 'capabilityInvocation', - 'capabilityDelegation', - ]; + verificationMethods.push(...didDocument.verificationMethod?.filter(isDidVerificationMethod) ?? []); // Check verification relationship properties for embedded verification methods. - verificationRelationships.forEach((relationship) => { - verificationMethods.push(...(didDocument[relationship] as any[])?.filter(isDidVerificationMethod) ?? []); + Object.keys(DidVerificationRelationship).forEach((relationship) => { + verificationMethods.push(...(didDocument[relationship as keyof DidDocument] as any[])?.filter(isDidVerificationMethod) ?? []); }); return verificationMethods; diff --git a/packages/dids/tests/did-dht.spec.ts b/packages/dids/tests/did-dht.spec.ts index 040f0be90..36f14b47e 100644 --- a/packages/dids/tests/did-dht.spec.ts +++ b/packages/dids/tests/did-dht.spec.ts @@ -1,512 +1,126 @@ -import type { PublicKeyJwk } from '@web5/crypto'; - -import sinon from 'sinon'; -import chai, { expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; - -import type { DidDhtKeySet } from '../src/did-dht.js'; -import type { DidDocument, DidKeySetVerificationMethodKey, DidService, PortableDid } from '../src/types.js'; - -import { DidDht } from '../src/dht.js'; -import { parseDid } from '../src/utils.js'; -import { DidDhtMethod } from '../src/did-dht.js'; -import { DidResolver } from '../src/did-resolver.js'; - -chai.use(chaiAsPromised); - -describe('DidDhtMethod', () => { - describe('generateJwkKeyPair()', () => { - it('generates Ed25519 JWK key pairs', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - - expect(ed25519KeyPair).to.exist; - expect(ed25519KeyPair).to.have.property('privateKeyJwk'); - expect(ed25519KeyPair).to.have.property('publicKeyJwk'); - expect(ed25519KeyPair.publicKeyJwk.kid).to.exist; - expect(ed25519KeyPair.publicKeyJwk.alg).to.equal('EdDSA'); - expect(ed25519KeyPair.publicKeyJwk.kty).to.equal('OKP'); - }); - - it('generates secp256k1 JWK key pairs', async () => { - const secp256k1KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'secp256k1' }); - - expect(secp256k1KeyPair).to.exist; - expect(secp256k1KeyPair).to.have.property('privateKeyJwk'); - expect(secp256k1KeyPair).to.have.property('publicKeyJwk'); - expect(secp256k1KeyPair.publicKeyJwk.kid).to.exist; - expect(secp256k1KeyPair.publicKeyJwk.alg).to.equal('ES256K'); - expect(secp256k1KeyPair.publicKeyJwk.kty).to.equal('EC'); - }); - - it('throws an error if an unsupported key algorithm is passed in', async () => { - await expect( - DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'unsupported' as any }) - ).to.be.rejectedWith(Error, 'unsupported'); - }); - }); - - describe('getDidIdentifierFragment()', () => { - it('should return the encoded identifier fragment for a given public key', async () => { - const testPublicKey: PublicKeyJwk = { - kty : 'OKP', - crv : 'Ed25519', - x : '9ZOlXQ7pZw7voYfQsrPPzvd1dA4ktXB5VbD1PWvl_jg', - ext : 'true', - 'key_ops' : ['verify'] - }; - - const result = await DidDhtMethod.getDidIdentifierFragment({ key: testPublicKey }); - - expect(result).to.equal('6sj4kzeq7fuo757bo9emfc6x355zk7yqr14zy6kisd4u449f9ahy'); - }); - }); - - describe('resolve()', () => { - it(`should return 'internalError' if DHT request throws error`, async () => { - const dhtDidResolutionStub = sinon.stub(DidDht, 'getDidDocument').rejects(new Error('Invalid SignedPacket bytes length, expected at least 72 bytes but got: 25')); - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o' }); - const didResolutionMetadata = didResolutionResult.didResolutionMetadata; - expect(didResolutionMetadata.error).to.equal('internalError'); - - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - }); - - describe('key sets', () => { - it('should generate a key set with the identity key if no keys are passed in', async () => { - const keySet = await DidDhtMethod.generateKeySet(); - - expect(keySet).to.exist; - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet).to.not.have.property('recoveryKey'); - expect(keySet).to.not.have.property('updateKey'); - expect(keySet).to.not.have.property('signingKey'); - expect(keySet.verificationMethodKeys).to.have.lengthOf(1); - expect(keySet.verificationMethodKeys[0].publicKeyJwk.kid).to.equal('0'); - }); - - it('should return the key set unmodified if only the identity key is passed in', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyId: '0', keyAlgorithm: 'Ed25519' }); - const identityKey: DidKeySetVerificationMethodKey = { - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }; - - const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [identityKey] } }); - - expect(keySet).to.exist; - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet).to.not.have.property('recoveryKey'); - expect(keySet).to.not.have.property('updateKey'); - expect(keySet).to.not.have.property('signingKey'); - expect(keySet.verificationMethodKeys).to.have.lengthOf(1); - expect(keySet.verificationMethodKeys[0]).to.deep.equal(identityKey); - }); - - it('should generate the identity key if non-identity keys are passed in', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - const vm: DidKeySetVerificationMethodKey = { - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }; - - const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [vm] } }); - - expect(keySet).to.exist; - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet).to.not.have.property('recoveryKey'); - expect(keySet).to.not.have.property('updateKey'); - expect(keySet).to.not.have.property('signingKey'); - expect(keySet.verificationMethodKeys).to.have.lengthOf(2); - - if (keySet.verificationMethodKeys[0].publicKeyJwk.kid === '0') { - expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.not.equal('0'); - } else { - expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.equal('0'); - } - }); - - it('should generate key ID values for provided keys, if missing', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - - // Remove the kid values from the key pair. - delete ed25519KeyPair.publicKeyJwk.kid; - delete ed25519KeyPair.privateKeyJwk.kid; - - const vm: DidKeySetVerificationMethodKey = { - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }; - - const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [vm] } }); - - // Verify that the key ID values were generated. - expect(keySet.verificationMethodKeys[0].publicKeyJwk.kid).to.exist; - expect(keySet.verificationMethodKeys[0].privateKeyJwk.kid).to.exist; - expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.exist; - expect(keySet.verificationMethodKeys[1].privateKeyJwk.kid).to.exist; - }); - }); - - describe('DIDs', () => { - it('should generate a DID identifier given a public key jwk', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - const did = await DidDhtMethod.getDidIdentifier({ key: ed25519KeyPair.publicKeyJwk }); - - expect(did).to.exist; - expect(did).to.contain('did:dht:'); - }); - - it('should create a DID document without options', async () => { - const { document, keySet } = await DidDhtMethod.create(); - - expect(document).to.exist; - expect(document.id).to.contain('did:dht:'); - expect(document.verificationMethod).to.exist; - expect(document.verificationMethod).to.have.lengthOf(1); - expect(document.verificationMethod[0].id).to.equal(`${document.id}#0`); - expect(document.verificationMethod[0].publicKeyJwk).to.exist; - expect(document.verificationMethod[0].publicKeyJwk.kid).to.equal('0'); - - expect(document.service).to.not.exist; - expect(document.assertionMethod.length).to.equal(1); - expect(document.assertionMethod[0]).to.equal(`#0`); - expect(document.authentication.length).to.equal(1); - expect(document.authentication[0]).to.equal(`#0`); - expect(document.capabilityDelegation.length).to.equal(1); - expect(document.capabilityDelegation[0]).to.equal(`#0`); - expect(document.capabilityInvocation.length).to.equal(1); - expect(document.capabilityInvocation[0]).to.equal(`#0`); - - const ks = keySet as DidDhtKeySet; - expect(ks).to.exist; - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - expect(identityKey).to.exist; - expect(identityKey.publicKeyJwk).to.exist; - expect(identityKey.privateKeyJwk).to.exist; - expect(identityKey.publicKeyJwk.kid).to.equal('0'); - }); - - it('should create a DID document with a non identity key option', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - const keySet: DidDhtKeySet = { - verificationMethodKeys: [{ - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }] - }; - - const { document } = await DidDhtMethod.create({ keySet }); - - expect(document).to.exist; - expect(document.id).to.contain('did:dht:'); - expect(document.verificationMethod).to.exist; - expect(document.verificationMethod).to.have.lengthOf(2); - expect(document.verificationMethod[1].id).to.equal(`${document.id}#0`); - expect(document.verificationMethod[1].publicKeyJwk).to.exist; - expect(document.verificationMethod[1].publicKeyJwk.kid).to.equal('0'); - - expect(document.service).to.not.exist; - expect(document.assertionMethod.length).to.equal(2); - expect(document.assertionMethod[1]).to.equal(`#0`); - expect(document.authentication.length).to.equal(2); - expect(document.authentication[1]).to.equal(`#0`); - expect(document.capabilityDelegation.length).to.equal(2); - expect(document.capabilityDelegation[1]).to.equal(`#0`); - expect(document.capabilityInvocation.length).to.equal(2); - expect(document.capabilityInvocation[1]).to.equal(`#0`); - - expect(keySet).to.exist; - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - expect(identityKey).to.exist; - expect(identityKey.publicKeyJwk).to.exist; - expect(identityKey.privateKeyJwk).to.exist; - expect(identityKey.publicKeyJwk.kid).to.equal('0'); - }); - - it('should create a DID document with services', async () => { - const services: DidService[] = [{ - id : 'agentId', - type : 'agent', - serviceEndpoint : 'https://example.com/agent' - }]; - const { document } = await DidDhtMethod.create({ services }); - - expect(document).to.exist; - expect(document.id).to.contain('did:dht:'); - expect(document.verificationMethod).to.exist; - expect(document.verificationMethod).to.have.lengthOf(1); - expect(document.verificationMethod[0].id).to.equal(`${document.id}#0`); - expect(document.verificationMethod[0].publicKeyJwk).to.exist; - expect(document.verificationMethod[0].publicKeyJwk.kid).to.equal('0'); - - expect(document.service).to.exist; - expect(document.service).to.have.lengthOf(1); - expect(document.service[0].id).to.equal(`${document.id}#agentId`); - expect(document.assertionMethod.length).to.equal(1); - expect(document.assertionMethod[0]).to.equal(`#0`); - expect(document.authentication.length).to.equal(1); - expect(document.authentication[0]).to.equal(`#0`); - expect(document.capabilityDelegation.length).to.equal(1); - expect(document.capabilityDelegation[0]).to.equal(`#0`); - expect(document.capabilityInvocation.length).to.equal(1); - expect(document.capabilityInvocation[0]).to.equal(`#0`); - }); - }); - - describe('DID publishing and resolving', function () { - it('should publish and DID should be resolvable', async () => { - const { document, keySet } = await DidDhtMethod.create(); - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - - const dhtDidPublishStub = sinon.stub(DidDht, 'publishDidDocument').resolves(true); - const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : document, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : document.id, - methodSpecificId : parseDid({ didUrl: document.id }).id, - method : 'dht' - } +import { expect } from 'chai'; + +import { DidDht } from '../src/methods/did-dht.js'; + +describe.only('DidDht', () => { + describe('create', () => { + it('', async () => { + const did = await DidDht.create({ + options: { + services: [ + { + id : 'dwn-svc', + type : 'DIDCommMessaging', + serviceEndpoint : 'https://example.com/endpoint', + }, + { + id : 'dwn-svc-2', + type : 'DIDCommMessaging', + serviceEndpoint : 'https://example.com/endpoint', + } + ] } }); - - const isPublished = await DidDhtMethod.publish({ identityKey, didDocument: document }); - expect(isPublished).to.be.true; - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: document.id }); - const didDocument = didResolutionResult.didDocument; - expect(didDocument.id).to.deep.equal(document.id); - - expect(dhtDidPublishStub.calledOnce).to.be.true; - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); + console.log(did); }); - it('should create with publish and return a DID document', async () => { - const mockDocument: PortableDid = { - keySet : 'any' as any, - did : 'did:dht:123456789abcdefghi', - document : { - id : 'did:dht:123456789abcdefghi', - verificationMethod : [{ - id : 'did:dht:123456789abcdefghi#0', - type : 'JsonWebKey2020', - controller : 'did:dht:123456789abcdefghi', - publicKeyJwk : { - kty : 'OKP', - crv : 'Ed25519', - kid : '0', - x : 'O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik' + it('accepts a custom controller for the Identity Key', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + id : '0', + controller : 'did:example:1234', } - }], - assertionMethod : ['did:dht:123456789abcdefghi#0'], - authentication : ['did:dht:123456789abcdefghi#0'], - capabilityDelegation : ['did:dht:123456789abcdefghi#0'], - capabilityInvocation : ['did:dht:123456789abcdefghi#0'] - } - }; - const didDhtCreateStub = sinon.stub(DidDhtMethod, 'create').resolves(mockDocument); - - const { document } = await DidDhtMethod.create({ publish: true }); - const did = document.id; - - const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : document, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : 'did:dht:123456789abcdefgh', - methodSpecificId : '123456789abcdefgh', - method : 'dht' - } + ] } }); - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: did }); - const resolvedDocument = didResolutionResult.didDocument; - expect(resolvedDocument.id).to.deep.equal(document.id); - expect(resolvedDocument.service).to.deep.equal(document.service); - expect(resolvedDocument.verificationMethod[0].id).to.deep.equal(document.verificationMethod[0].id); - expect(resolvedDocument.verificationMethod[0].type).to.deep.equal(document.verificationMethod[0].type); - expect(resolvedDocument.verificationMethod[0].controller).to.deep.equal(document.verificationMethod[0].controller); - expect(resolvedDocument.verificationMethod[0].publicKeyJwk.kid).to.deep.equal(document.verificationMethod[0].publicKeyJwk.kid); - - expect(didDhtCreateStub.calledOnce).to.be.true; - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - - it('should create with publish and DID should be resolvable', async () => { - const keySet: DidDhtKeySet = { - verificationMethodKeys: [{ - 'privateKeyJwk': { - 'd' : '2dPyiFL-vd21lxLKoyylz1nEK5EMByABqB2Fqio76sU', - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'sign' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - }, - 'publicKeyJwk': { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'verify' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - }, - 'relationships': [ - 'authentication', - 'assertionMethod', - 'capabilityInvocation', - 'capabilityDelegation' - ] - }] - }; - - const didDocument: DidDocument = { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'verificationMethod' : [ - { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o#0', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'verify' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' + const identityKeyVerificationMethod = did.didDocument?.verificationMethod?.find( + (method) => method.id.endsWith('#0') + ); + expect(identityKeyVerificationMethod).to.have.property('controller', 'did:example:1234'); + }); + + it('creates a DID with additional verification methods, if given', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + id : 'sig', + purposes : ['authentication', 'assertionMethod'] + }, + { + algorithm : 'ES256K', + id : 'enc', + purposes : ['keyAgreement'] } - } - ], - 'authentication': [ - '#0' - ], - 'assertionMethod': [ - '#0' - ], - 'capabilityInvocation': [ - '#0' - ], - 'capabilityDelegation': [ - '#0' - ] - }; - - const dhtDidPublishStub = sinon.stub(DidDhtMethod, 'publish').resolves(true); - const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - methodSpecificId : 'h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - method : 'dht' - } + ] } }); - const portableDid = await DidDhtMethod.create({ publish: true, keySet: keySet }); - expect(portableDid).to.exist; - expect(portableDid.did).to.exist; - expect(portableDid.document).to.exist; - expect(portableDid.keySet).to.exist; - expect(portableDid.document.id).to.deep.equal(didDocument.id); - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: didDocument.id }); - expect(didDocument.id).to.deep.equal(didResolutionResult.didDocument.id); + expect(did).to.have.property('didDocument'); + expect(did.didDocument).to.have.property('verificationMethod'); + expect(did.didDocument.verificationMethod).to.have.length(3); + // expect(did.didDocument.verificationMethod[0]).to.have.property('id', 'dwn-sig'); + // expect(did.didDocument.verificationMethod[1]).to.have.property('id', 'dwn-auth'); + }); + + it('returns a DID with a getSigner function that can sign and verify data', async () => { + const did = await DidDht.create(); + + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('throws an error if a verification method algorithm is not supported', async () => { + try { + await DidDht.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + purposes : ['authentication', 'assertionMethod'] + }, + { + // @ts-expect-error - Testing invalid algorithm. + algorithm : 'Ed448', + id : 'dwn-sig', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); - expect(dhtDidPublishStub.calledOnce).to.be.true; - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('algorithms are not supported'); + } }); }); - describe('Integration with DidResolver', () => { - it('DidResolver resolves a did:dht DID', async () => { - // Previously published DID. - const did = 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o'; - const didDocument: DidDocument = { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'verificationMethod' : [ - { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o#0', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'verify' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - } - } - ], - 'authentication': [ - '#0' - ], - 'assertionMethod': [ - '#0' - ], - 'capabilityInvocation': [ - '#0' - ], - 'capabilityDelegation': [ - '#0' - ] - }; - - const dhtDidResolutionStub = sinon.stub(DidDht, 'getDidDocument').resolves(didDocument); - - // Instantiate a DidResolver with the DidJwkMethod. - const didResolver = new DidResolver({ didResolvers: [DidDhtMethod] }); + describe('toKeys()', () => { + it('returns a single verification method for a DID', async () => { + // Create a DID to use for the test. + const did = await DidDht.create(); - // Resolve the DID using the DidResolver. - const { didDocument: resolvedDocument } = await didResolver.resolve(did); + const keySet = await DidDht.toKeys({ did }); - // Verify that the resolved document matches the created document. - expect(resolvedDocument).to.deep.equal(didDocument); - - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - - it('returns an error for invalid didUrl', async () => { - const result = await DidDhtMethod.resolve({ didUrl: 'invalid' }); - expect(result).to.have.property('didResolutionMetadata').which.has.property('error', 'invalidDid'); - }); - - it('returns an error for unsupported method', async () => { - const result = await DidDhtMethod.resolve({ didUrl: 'did:unsupported:xyz' }); - expect(result).to.have.property('didResolutionMetadata').which.has.property('error', 'methodNotSupported'); + expect(keySet).to.have.property('verificationMethods'); + expect(keySet.verificationMethods).to.have.length(1); + expect(keySet.verificationMethods![0]).to.have.property('publicKeyJwk'); + expect(keySet.verificationMethods![0]).to.have.property('privateKeyJwk'); + expect(keySet.verificationMethods![0]).to.have.property('purposes'); + expect(keySet.verificationMethods![0]).to.have.property('type'); + expect(keySet.verificationMethods![0]).to.have.property('id'); + expect(keySet.verificationMethods![0]).to.have.property('controller'); }); }); - }); \ No newline at end of file diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/did-jwk.spec.ts index e14c8887e..4edde1ae6 100644 --- a/packages/dids/tests/did-jwk.spec.ts +++ b/packages/dids/tests/did-jwk.spec.ts @@ -3,15 +3,15 @@ import type { UnwrapPromise } from '@web5/common'; import sinon from 'sinon'; import { expect } from 'chai'; -import { Ed25519, LocalKmsCrypto, Secp256k1 } from '@web5/crypto'; +import { LocalKmsCrypto } from '@web5/crypto'; import type { DidDocument } from '../src/types/did-core.js'; -import type { DidKeySet } from '../src/methods/did-method.js'; +import type { DidKeySet, DidKeySetVerificationMethod } from '../src/methods/did-method.js'; import { DidJwk } from '../src/methods/did-jwk.js'; import DidJwkResolveTestVector from '../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; -describe('DidJwk', () => { +describe.only('DidJwk', () => { let keyManager: LocalKmsCrypto; before(() => { @@ -19,20 +19,63 @@ describe('DidJwk', () => { }); describe('create()', () => { - it('creates a DID and generates keys using the given algorithm', async () => { + it('creates a did:jwk DID', async () => { const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); - // Verify expected result. expect(did).to.have.property('didDocument'); expect(did).to.have.property('getSigner'); expect(did).to.have.property('keyManager'); expect(did).to.have.property('metadata'); expect(did).to.have.property('uri'); - expect(did.metadata).to.have.property('keySet'); - expect(did.metadata.keySet).to.have.property('keys'); - expect(did.metadata.keySet.keys).to.have.length(1); - expect(did.metadata.keySet.keys?.[0]).to.have.property('keyUri'); - expect(did.metadata.keySet.keys?.[0]).to.have.property('purposes'); + expect(did.uri.startsWith('did:jwk:')).to.be.true; + expect(did.didDocument.verificationMethod).to.have.length(1); + }); + + it('uses a default key manager and key generation algorithm if neither is given', async () => { + // Create a DID with no params. + let did = await DidJwk.create(); + expect(did.uri.startsWith('did:jwk:')).to.be.true; + + // Create a DID with an empty options object. + did = await DidJwk.create({ options: {} }); + expect(did.uri.startsWith('did:jwk:')).to.be.true; + + // Create a DID with an empty options object and undefined key manager. + did = await DidJwk.create({}); + expect(did.uri.startsWith('did:jwk:')).to.be.true; + }); + + it('creates a DID using the top-level algorithm property, if given', async () => { + const did = await DidJwk.create({ keyManager, options: { algorithm: 'ES256K' } }); + + // Retrieve the public key from the key manager. + const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Verify the public key is an secp256k1 key. + expect(publicKey).to.have.property('crv', 'secp256k1'); + }); + + it('creates a DID using the verificationMethods algorithm property, if given', async () => { + const did = await DidJwk.create({ keyManager, options: { verificationMethods: [{ algorithm: 'ES256K' }] } }); + + // Retrieve the public key from the key manager. + const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Verify the public key is an secp256k1 key. + expect(publicKey).to.have.property('crv', 'secp256k1'); + }); + + it('creates a DID with an Ed25519 key, by default', async () => { + const did = await DidJwk.create({ keyManager }); + + // Retrieve the public key from the key manager. + const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Verify the public key is an Ed25519 key. + expect(publicKey).to.have.property('crv', 'Ed25519'); }); it('creates a DID using any signature algorithm supported by the provided KMS', async () => { @@ -45,30 +88,121 @@ describe('DidJwk', () => { ).to.have.property('uri'); }); - it('creates a DID using the given keySet', async () => { - const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); - const keySet: DidKeySet = { keys: [{ keyUri, purposes: ['authentication'] }] }; - const did = await DidJwk.create({ keyManager, options: { keySet } }); + it('returns a getSigner() function that creates valid signatures that can be verified', async () => { + const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); - expect(did).to.have.property('uri'); - expect(did.metadata.keySet).to.deep.equal(keySet); + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; }); - it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { - // Generate a random Ed25519 private key. - let privateKey = await Ed25519.generateKey(); + it('returns a getSigner() function handles undefined params', async function () { + // Create a `did:jwk` DID. + const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); - // Add the `sig` key use property. - privateKey.use = 'sig'; + // Simulate the creation of a signer with undefined params + const signer = await did.getSigner({ }); - // Import the private key into the key manager. - const keyUri = await keyManager.importKey({ key: privateKey }); + // Note: Since this test does not interact with an actual keyManager, it primarily ensures + // that the method doesn't break with undefined params. + expect(signer).to.have.property('sign'); + expect(signer).to.have.property('verify'); + }); - // Create a key set with the imported key. - const keySet: DidKeySet = { keys: [{ keyUri, purposes: ['authentication'] }] }; + it('throws an error if both algorithm and verificationMethods are provided', async () => { + try { + await DidJwk.create({ + keyManager, + options: { + algorithm : 'Ed25519', + verificationMethods : [{ algorithm: 'Ed25519' }] + } + }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('options are mutually exclusive'); + } + }); + }); + + describe('fromKeys()', () => { + let didUri: string; + let keySet: DidKeySet; + + beforeEach(() => { + // Define a DID to use for the test. + didUri = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; + + // Define a key set to use for the test. + keySet = { + verificationMethods: [{ + publicKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' + }, + privateKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', + d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' + }, + purposes: ['authentication'] + }] + }; + }); + + it('returns a DID JWK from the given set of verification method keys', async () => { + const did = await DidJwk.fromKeys(keySet); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', didUri); + }); + + it('returns a DID with a getSigner function that can sign and verify data', async () => { + const did = await DidJwk.fromKeys(keySet); + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { + const did = await DidJwk.fromKeys(keySet); + + // Retrieve the key URI of the verification method's public key. + const keyUri = await did.keyManager.getKeyUri({ key: keySet.verificationMethods![0].publicKeyJwk! }); + + const signer = await did.getSigner({ keyUri }); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { + // Add the `sig` key use property. + keySet.verificationMethods![0].privateKeyJwk!.use = 'sig'; + keySet.verificationMethods![0].publicKeyJwk!.use = 'sig'; + + // Import the private key into a key manager. + const keyManager = new LocalKmsCrypto(); + await keyManager.importKey({ key: keySet.verificationMethods![0].privateKeyJwk! }); // Create the DID using the key set. - let did = await DidJwk.create({ keyManager, options: { keySet } }); + let did = await DidJwk.fromKeys(keySet); // Verify the DID document does not contain the `keyAgreement` relationship. expect(did.didDocument).to.not.have.property('keyAgreement'); @@ -76,19 +210,23 @@ describe('DidJwk', () => { it(`only specifies 'keyAgreement' relationship when JWK use is 'enc'`, async () => { // Generate a random secp256k1 private key. - let privateKey = await Secp256k1.generateKey(); + const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + const privateKey = await keyManager.exportKey({ keyUri }); // Add the `enc` key use property. privateKey.use = 'enc'; + publicKey.use = 'enc'; - // Import the private key into the key manager. - const keyUri = await keyManager.importKey({ key: privateKey }); - - // Create a key set with the imported key. - const keySet: DidKeySet = { keys: [{ keyUri, purposes: ['authentication'] }] }; + // Swap the keys in the key set with the newly generated secp256k1 keys. + keySet.verificationMethods![0].privateKeyJwk = privateKey; + keySet.verificationMethods![0].publicKeyJwk = publicKey; // Create the DID using the key set. - let did = await DidJwk.create({ keyManager, options: { keySet } }); + let did = await DidJwk.fromKeys({ + keyManager, + verificationMethods: keySet.verificationMethods! + }); // Verrify the DID document does not contain any verification relationships other than // `keyAgreement`. @@ -99,181 +237,256 @@ describe('DidJwk', () => { expect(did.didDocument).to.not.have.property('capabilityInvocation'); }); - it('throws an error if the key set is empty', async () => { + it('throws an error if no verification methods are given', async () => { try { - await DidJwk.create({ keyManager, options: { keySet: {} } }); + await DidJwk.fromKeys({}); expect.fail('Expected an error to be thrown.'); } catch (error: any) { - expect(error.message).to.include('exactly one key'); + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is empty', async () => { + try { + await DidJwk.fromKeys({ verificationMethods: [] }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is missing a public key', async () => { + delete keySet.verificationMethods![0].publicKeyJwk; + + try { + await DidJwk.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public and private key'); + } + }); + + it('throws an error if the given key set is missing a private key', async () => { + delete keySet.verificationMethods![0].privateKeyJwk; + + try { + await DidJwk.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public and private key'); } }); it('throws an error if the key set contains two or more keys', async () => { - const keyUri = 'did:jwk:fake'; + const verificationMethod: DidKeySetVerificationMethod = { + publicKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' + }, + privateKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', + d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' + }, + purposes: ['authentication'] + }; try { - await DidJwk.create({ - keyManager, - options: { - keySet: { - keys: [ - { keyUri, purposes: ['authentication'] }, - { keyUri, purposes: ['authentication'] } - ] - } - } + await DidJwk.fromKeys({ + verificationMethods: [verificationMethod, verificationMethod] }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { - expect(error.message).to.include('exactly one key'); + expect(error.message).to.include('one verification method'); } }); }); - describe('getSigner()', () => { - it('creates valid signatures that can be verified', async () => { - const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); - - const signer = await did.getSigner(); - const data = new Uint8Array([1, 2, 3]); - const signature = await signer.sign({ data }); - const isValid = await signer.verify({ data, signature }); + describe('fromKeyManager()', () => { + let didUri: string; + let keyManager: LocalKmsCrypto; + let privateKey: Jwk; - expect(signature).to.have.length(64); - expect(isValid).to.be.true; + before(() => { + keyManager = new LocalKmsCrypto(); }); - let keyManagerMock: any; - let publicKey: Jwk; - let didDocument: DidDocument; - beforeEach(() => { - // Mock for CryptoApi - keyManagerMock = { - digest : sinon.stub(), - generateKey : sinon.stub(), - getKeyUri : sinon.stub(), - getPublicKey : sinon.stub(), - sign : sinon.stub(), - verify : sinon.stub(), - }; + didUri = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; - // Example public key in JWK format - publicKey = { + privateKey = { kty : 'OKP', - use : 'sig', crv : 'Ed25519', - kid : '...', - x : 'abc123', - alg : 'EdDSA' + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', + d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' }; + }); - // Example DID Document - didDocument = { - '@context' : 'https://www.w3.org/ns/did/v1', - id : 'did:jwk:example', - verificationMethod : [{ - id : 'did:jwk:example#0', - type : 'JsonWebKey2020', - controller : 'did:jwk:example', - publicKeyJwk : publicKey, - }], - }; + it('returns a DID JWK from existing keys present in a key manager', async () => { + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); - keyManagerMock.getKeyUri.resolves('urn:jwk:example'); // Mock key URI retrieval - keyManagerMock.getPublicKey.resolves(publicKey); // Mock public key retrieval - keyManagerMock.sign.resolves(new Uint8Array(64).fill(0)); // Mock signature creation - keyManagerMock.verify.resolves(true); // Mock verification result + const did = await DidJwk.fromKeyManager({ didUri, keyManager }); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'); }); - it('returns a signer with sign and verify functions', async () => { - const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); + it('returns a DID with a getSigner function that can sign and verify data', async () => { + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); + + const did = await DidJwk.fromKeyManager({ didUri, keyManager }); - expect(signer).to.be.an('object'); - expect(signer).to.have.property('sign').that.is.a('function'); - expect(signer).to.have.property('verify').that.is.a('function'); + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; }); - it('sign function should call keyManager.sign with correct parameters', async () => { - const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); - const dataToSign = new Uint8Array([0x00, 0x01]); + it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); + + const did = await DidJwk.fromKeyManager({ didUri, keyManager }); + + // Retrieve the key URI of the verification method's public key. + const { d, ...publicKey } = privateKey; // Remove the private key component + const keyUri = await did.keyManager.getKeyUri({ key: publicKey }); - await signer.sign({ data: dataToSign }); + const signer = await did.getSigner({ keyUri }); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); - expect(keyManagerMock.sign.calledOnce).to.be.true; - expect(keyManagerMock.sign.calledWith(sinon.match({ data: dataToSign }))).to.be.true; + expect(signature).to.have.length(64); + expect(isValid).to.be.true; }); - it('verify function should call keyManager.verify with correct parameters', async () => { - const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); - const dataToVerify = new Uint8Array([0x00, 0x01]); - const signature = new Uint8Array([0x01, 0x02]); + it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { + // Add the `sig` key use property to the test DID's private key. + privateKey.use = 'sig'; + + // Redefine the DID URI that is based on inclusion of the `use: 'sig'` property. + didUri = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgiLCJ1c2UiOiJzaWcifQ'; - await signer.verify({ data: dataToVerify, signature }); + // Import the private key into the key manager. + await keyManager.importKey({ key: privateKey }); + + // Instantiate the DID object using the existing key. + let did = await DidJwk.fromKeyManager({ didUri, keyManager }); - expect(keyManagerMock.verify.calledOnce).to.be.true; - expect(keyManagerMock.verify.calledWith(sinon.match({ data: dataToVerify, signature }))).to.be.true; + // Verify the DID document does not contain the `keyAgreement` relationship. + expect(did.didDocument).to.not.have.property('keyAgreement'); }); - it('uses the provided keyUri to fetch the public key', async () => { - const keyUri = 'some-key-uri'; - keyManagerMock.getPublicKey.withArgs({ keyUri }).resolves(publicKey); + it(`only specifies 'keyAgreement' relationship when JWK use is 'enc'`, async () => { + // Redefine the test DID's private key to be a secp256k1 key with the `enc` key use property. + privateKey = { + kty : 'EC', + crv : 'secp256k1', + d : 'WJPT7YKR12IulMa2cCQIoQXEK3YL3K4bBDmd684gnEY', + x : 'ORyV-OYLFV0C7Vv9ky-j90Yi4nDTkaYdF2-hObR71SM', + y : 'D2EyTbAkVfaBa9khVngdqwLfSy6hnIYAz3lLxdvJmEc', + kid : '_BuKVglXMSv5OLbiRABKQPXDwmDoHucVPpwdnhdUwEU', + alg : 'ES256K', + use : 'enc', + }; - const signer = await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock, keyUri }); + // Redefine the DID URI that is based on inclusion of the `use: 'enc'` property. + didUri = 'did:jwk:eyJrdHkiOiJFQyIsImNydiI6InNlY3AyNTZrMSIsIngiOiJPUnlWLU9ZTEZWMEM3VnY5a3ktajkwWWk0bkRUa2FZZEYyLWhPYlI3MVNNIiwieSI6IkQyRXlUYkFrVmZhQmE5a2hWbmdkcXdMZlN5NmhuSVlBejNsTHhkdkptRWMiLCJraWQiOiJfQnVLVmdsWE1TdjVPTGJpUkFCS1FQWER3bURvSHVjVlBwd2RuaGRVd0VVIiwiYWxnIjoiRVMyNTZLIiwidXNlIjoiZW5jIn0'; - expect(signer).to.be.an('object'); - expect(keyManagerMock.getPublicKey.calledWith({ keyUri })).to.be.true; - }); + // Import the private key into the key manager. + await keyManager.importKey({ key: privateKey }); - it('handles undefined params', async function () { - // Create a `did:jwk` DID. - const did = await DidJwk.create({ keyManager, options: { algorithm: 'Ed25519' } }); + // Instantiate the DID object using the existing key. + const did = await DidJwk.fromKeyManager({ didUri, keyManager }); - // Simulate the creation of a signer with undefined params - const signer = await did.getSigner({ }); + // Verrify the DID document does not contain any verification relationships other than + // `keyAgreement`. + expect(did.didDocument).to.have.property('keyAgreement'); + expect(did.didDocument).to.not.have.property('assertionMethod'); + expect(did.didDocument).to.not.have.property('authentication'); + expect(did.didDocument).to.not.have.property('capabilityDelegation'); + expect(did.didDocument).to.not.have.property('capabilityInvocation'); + }); - // Note: Since this test does not interact with an actual keyManager, it primarily ensures - // that the method doesn't break with undefined params. - expect(signer).to.have.property('sign'); - expect(signer).to.have.property('verify'); + it('throws an error if the given DID URI cannot be resolved', async () => { + const didUri = 'did:jwk:...'; + try { + await DidJwk.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } }); - it('throws an error if the keyUri does not match any key in the DID Document', async () => { - const keyUri = 'nonexistent-key-uri'; - keyManagerMock.getPublicKey.withArgs({ keyUri }).resolves({ ...publicKey, x: 'def456' }); + it('throws an error if the resolved DID document lacks any verification methods', async () => { + // Stub the DID resolve method to return a DID document without a verificationMethod property. + sinon.stub(DidJwk, 'resolve').returns(Promise.resolve({ + didDocument : { id: 'did:jwk:...' }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + const didUri = 'did:jwk:...'; try { - await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock, keyUri }); - expect.fail('Error should have been thrown'); + await DidJwk.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); } catch (error: any) { - expect(error.message).to.include(`is not present in the provided DID Document for '${didDocument.id}'`); + expect(error.message).to.include('missing verification methods'); + } finally { + sinon.restore(); } - }); - it('throws an error if no verification methods are found in the DID Document', async () => { - // Example DID Document with no verification methods - didDocument = { - '@context' : 'https://www.w3.org/ns/did/v1', - id : 'did:jwk:...', - verificationMethod : [], // Empty array indicates no verification methods - }; + // Stub the DID resolve method to return a DID document an empty verificationMethod property. + sinon.stub(DidJwk, 'resolve').returns(Promise.resolve({ + didDocument : { id: 'did:jwk:...', verificationMethod: [] }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); try { - await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); - expect.fail('Error should have been thrown'); + await DidJwk.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); } catch (error: any) { - expect(error.message).to.include('No verification methods found'); + expect(error.message).to.include('missing verification methods'); + } finally { + sinon.restore(); } }); - it('throws an error if the keys needed to create a signer are not determined', async function () { - keyManagerMock.getKeyUri.resolves(undefined); // Resolves to undefined to simulate missing publicKey - + it('throws an error if the resolved DID document is missing a public key', async () => { + // Stub the DID resolution method to return a DID document with no verification methods. + sinon.stub(DidJwk, 'resolve').returns(Promise.resolve({ + didDocument: { + id : 'did:jwk:...', + verificationMethod : [{ + id : 'did:jwk:...#0', + type : 'JsonWebKey2020', + controller : 'did:jwk:...' + }], + }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + const didUri = 'did:jwk:...'; try { - await DidJwk.getSigner({ didDocument, keyManager: keyManagerMock }); - expect.fail('Error should have been thrown'); + await DidJwk.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); } catch (error: any) { - expect(error.message).to.include('Failed to determine the keys needed to create a signer'); + expect(error.message).to.include('does not contain a public key'); + } finally { + sinon.restore(); } }); }); @@ -331,6 +544,24 @@ describe('DidJwk', () => { }); }); + describe('toKeys()', () => { + it('returns a single verification method for a DID', async () => { + // Create a DID to use for the test. + const did = await DidJwk.create(); + + const keySet = await DidJwk.toKeys({ did }); + + expect(keySet).to.have.property('verificationMethods'); + expect(keySet.verificationMethods).to.have.length(1); + expect(keySet.verificationMethods![0]).to.have.property('publicKeyJwk'); + expect(keySet.verificationMethods![0]).to.have.property('privateKeyJwk'); + expect(keySet.verificationMethods![0]).to.have.property('purposes'); + expect(keySet.verificationMethods![0]).to.have.property('type'); + expect(keySet.verificationMethods![0]).to.have.property('id'); + expect(keySet.verificationMethods![0]).to.have.property('controller'); + }); + }); + describe('Web5TestVectorsDidJwk', () => { it('resolve', async () => { type TestVector = { diff --git a/packages/dids/tests/did-method.spec.ts b/packages/dids/tests/did-method.spec.ts new file mode 100644 index 000000000..2f60e6ef4 --- /dev/null +++ b/packages/dids/tests/did-method.spec.ts @@ -0,0 +1,295 @@ +import type { CryptoApi, Jwk } from '@web5/crypto'; + +import sinon from 'sinon'; +import { expect } from 'chai'; +import { LocalKmsCrypto } from '@web5/crypto'; + +import type { Did } from '../src/methods/did-method.js'; +import type { DidDocument, DidVerificationMethod } from '../src/types/did-core.js'; + +import { DidMethod } from '../src/methods/did-method.js'; +import { DidJwk } from '../src/methods/did-jwk.js'; + +class DidTest extends DidMethod { + public static async getSigningMethod({ didDocument, methodId = '#0' }: { + didDocument: DidDocument; + methodId?: string; + }): Promise { + // Attempt to find the verification method in the DID Document. + return didDocument.verificationMethod?.find(vm => vm.id.endsWith(methodId)); + } +} + +describe.only('DidMethod', () => { + let keyManager: LocalKmsCrypto; + + before(() => { + keyManager = new LocalKmsCrypto(); + }); + + describe('getSigner()', () => { + let keyManagerMock: any; + let publicKey: Jwk; + let didDocument: DidDocument; + + beforeEach(() => { + // Mock for CryptoApi + keyManagerMock = { + digest : sinon.stub(), + generateKey : sinon.stub(), + getKeyUri : sinon.stub(), + getPublicKey : sinon.stub(), + sign : sinon.stub(), + verify : sinon.stub(), + }; + + // Example public key in JWK format + publicKey = { + kty : 'OKP', + use : 'sig', + crv : 'Ed25519', + kid : '...', + x : 'abc123', + alg : 'EdDSA' + }; + + // Example DID Document + didDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:jwk:example', + verificationMethod : [{ + id : 'did:jwk:example#0', + type : 'JsonWebKey2020', + controller : 'did:jwk:example', + publicKeyJwk : publicKey, + }], + }; + + keyManagerMock.getKeyUri.resolves('urn:jwk:example'); // Mock key URI retrieval + keyManagerMock.getPublicKey.resolves(publicKey); // Mock public key retrieval + keyManagerMock.sign.resolves(new Uint8Array(64).fill(0)); // Mock signature creation + keyManagerMock.verify.resolves(true); // Mock verification result + }); + + it('returns a signer with sign and verify functions', async () => { + const signer = await DidTest.getSigner({ didDocument, keyManager: keyManagerMock }); + + expect(signer).to.be.an('object'); + expect(signer).to.have.property('sign').that.is.a('function'); + expect(signer).to.have.property('verify').that.is.a('function'); + }); + + it('sign function should call keyManager.sign with correct parameters', async () => { + const signer = await DidTest.getSigner({ didDocument, keyManager: keyManagerMock }); + const dataToSign = new Uint8Array([0x00, 0x01]); + + await signer.sign({ data: dataToSign }); + + expect(keyManagerMock.sign.calledOnce).to.be.true; + expect(keyManagerMock.sign.calledWith(sinon.match({ data: dataToSign }))).to.be.true; + }); + + it('verify function should call keyManager.verify with correct parameters', async () => { + const signer = await DidTest.getSigner({ didDocument, keyManager: keyManagerMock }); + const dataToVerify = new Uint8Array([0x00, 0x01]); + const signature = new Uint8Array([0x01, 0x02]); + + await signer.verify({ data: dataToVerify, signature }); + + expect(keyManagerMock.verify.calledOnce).to.be.true; + expect(keyManagerMock.verify.calledWith(sinon.match({ data: dataToVerify, signature }))).to.be.true; + }); + + it('uses the provided keyUri to fetch the public key', async () => { + const keyUri = 'some-key-uri'; + keyManagerMock.getPublicKey.withArgs({ keyUri }).resolves(publicKey); + + const signer = await DidTest.getSigner({ didDocument, keyManager: keyManagerMock, keyUri }); + + expect(signer).to.be.an('object'); + expect(keyManagerMock.getPublicKey.calledWith({ keyUri })).to.be.true; + }); + + it('throws an error if the DID method implementation does not provide a getSigningMethod() function', async () => { + class DidTest extends DidMethod {} + + try { + await DidTest.getSigner({ didDocument, keyManager: keyManagerMock }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('must implement getSigningMethod'); + } + }); + + it('throws an error if the keyUri does not match any key in the DID Document', async () => { + const keyUri = 'nonexistent-key-uri'; + keyManagerMock.getPublicKey.withArgs({ keyUri }).resolves({ ...publicKey, x: 'def456' }); + + try { + await DidTest.getSigner({ didDocument, keyManager: keyManagerMock, keyUri }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include(`is not present in the provided DID Document for '${didDocument.id}'`); + } + }); + + it('throws an error if no verification methods are found in the DID Document', async () => { + // Example DID Document with no verification methods + didDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:test:...', + verificationMethod : [], // Empty array indicates no verification methods + }; + + try { + await DidTest.getSigner({ didDocument, keyManager: keyManagerMock }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('No verification methods found'); + } + }); + + it('throws an error if the keys needed to create a signer are not determined', async function () { + keyManagerMock.getKeyUri.resolves(undefined); // Resolves to undefined to simulate missing publicKey + + try { + await DidTest.getSigner({ didDocument, keyManager: keyManagerMock }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('Failed to determine the keys needed to create a signer'); + } + }); + }); + + describe('toKeys()', () => { + let didJwk: Did; + + beforeEach(async () => { + didJwk = { + didDocument: { + '@context': [ + 'https://www.w3.org/ns/did/v1', + 'https://w3id.org/security/suites/jws-2020/v1', + ], + id : 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ', + verificationMethod : [ + { + id : 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ#0', + type : 'JsonWebKey2020', + controller : 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'm27WvTeQchsKs_ZfWcWPwQPpTcF2Mkc9RJs4ZpNoOYY', + kid : 'ontdoHRQTqCdJzG_ahsvrFXmLbGLXTka3SAR0xdd49A', + alg : 'EdDSA', + }, + }, + ], + authentication: [ + 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ#0', + ], + assertionMethod: [ + 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ#0', + ], + capabilityInvocation: [ + 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ#0', + ], + capabilityDelegation: [ + 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ#0', + ], + keyAgreement: [ + 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ#0', + ], + }, + getSigner : sinon.stub(), + keyManager, + metadata : {}, + uri : 'did:jwk:eyJjcnYiOiJFZDI1NTE5Iiwia3R5IjoiT0tQIiwieCI6Im0yN1d2VGVRY2hzS3NfWmZXY1dQd1FQcFRjRjJNa2M5UkpzNFpwTm9PWVkiLCJraWQiOiJvbnRkb0hSUVRxQ2RKekdfYWhzdnJGWG1MYkdMWFRrYTNTQVIweGRkNDlBIiwiYWxnIjoiRWREU0EifQ' + }; + }); + + it('returns a set of verification method keys for a DID', async () => { + const did = await DidJwk.create(); + + const keySet = await DidMethod.toKeys({ did }); + + expect(keySet).to.have.property('verificationMethods'); + expect(keySet.verificationMethods).to.have.length(1); + expect(keySet.verificationMethods![0]).to.have.property('publicKeyJwk'); + expect(keySet.verificationMethods![0]).to.have.property('privateKeyJwk'); + expect(keySet.verificationMethods![0]).to.have.property('purposes'); + expect(keySet.verificationMethods![0]).to.have.property('type'); + expect(keySet.verificationMethods![0]).to.have.property('id'); + expect(keySet.verificationMethods![0]).to.have.property('controller'); + }); + + it('returns a key set with the expected key purposes', async () => { + // Create a DID to use for the test. + const did = await DidJwk.create(); + + // Delete all verification relationships except `keyAgreement`. + delete did.didDocument.assertionMethod; + delete did.didDocument.authentication; + delete did.didDocument.capabilityDelegation; + delete did.didDocument.capabilityInvocation; + + const keySet = await DidMethod.toKeys({ did }); + + expect(keySet.verificationMethods![0]).to.have.property('purposes'); + expect(keySet.verificationMethods![0].purposes).to.deep.equal(['keyAgreement']); + }); + + it('throws an error if the DID document lacks any verification methods', async () => { + // Delete the verification method property from the DID document. + delete didJwk.didDocument.verificationMethod; + + try { + await DidMethod.toKeys({ did: didJwk }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } + }); + + it('throws an error if the DID document does not contain a public key', async () => { + // Delete the public key from the DID document. + delete didJwk.didDocument.verificationMethod![0].publicKeyJwk; + + try { + await DidMethod.toKeys({ did: didJwk }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public key'); + } + }); + + it('throws an error if the key manager does not support exporting keys', async () => { + // Create a key manager that does not support exporting keys. + const keyManagerWithoutExport: CryptoApi = { + digest : sinon.stub(), + generateKey : sinon.stub(), + getKeyUri : sinon.stub(), + getPublicKey : sinon.stub(), + sign : sinon.stub(), + verify : sinon.stub(), + }; + + // Create a DID to use for the test. + const did: Did = { + didDocument : { id: 'did:jwk:123' }, + keyManager : keyManagerWithoutExport, + getSigner : sinon.stub(), + metadata : {}, + uri : 'did:jwk:123', + }; + + try { + await DidMethod.toKeys({ did }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not support exporting keys'); + } + }); + }); +}); \ No newline at end of file From de2cf330db4b8caf5ab901d6a05384c29bb534b1 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Mon, 22 Jan 2024 10:41:21 -0500 Subject: [PATCH 14/39] Update DID JWK and DHT implementations Signed-off-by: Frank Hinek --- packages/crypto/src/index.ts | 1 + packages/crypto/src/primitives/p256.ts | 848 +++++++++++++++++++++++++ packages/dids/package.json | 2 + packages/dids/src/did-error.ts | 63 ++ packages/dids/src/index.ts | 1 + packages/dids/src/methods/did-dht.ts | 750 ++++++++++++++++------ packages/dids/src/methods/did-jwk.ts | 10 +- packages/dids/src/utils.ts | 5 +- packages/dids/tests/did-dht.spec.ts | 56 +- packages/dids/tests/did-jwk.spec.ts | 2 +- packages/dids/tests/did-method.spec.ts | 2 +- 11 files changed, 1521 insertions(+), 219 deletions(-) create mode 100644 packages/crypto/src/primitives/p256.ts create mode 100644 packages/dids/src/did-error.ts diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts index d2952615e..dfeab4a4c 100644 --- a/packages/crypto/src/index.ts +++ b/packages/crypto/src/index.ts @@ -19,6 +19,7 @@ export * from './primitives/aes-ctr.js'; export * from './primitives/aes-gcm.js'; export * from './primitives/concat-kdf.js'; export * from './primitives/ed25519.js'; +export * from './primitives/p256.js'; export * from './primitives/pbkdf2.js'; export * from './primitives/secp256k1.js'; export * from './primitives/sha256.js'; diff --git a/packages/crypto/src/primitives/p256.ts b/packages/crypto/src/primitives/p256.ts new file mode 100644 index 000000000..65f4c2eff --- /dev/null +++ b/packages/crypto/src/primitives/p256.ts @@ -0,0 +1,848 @@ +import { Convert } from '@web5/common'; +import { sha256 } from '@noble/hashes/sha256'; +import { p256 } from '@noble/curves/p256'; +import { numberToBytesBE } from '@noble/curves/abstract/utils'; + +import type { Jwk } from '../jose/jwk.js'; +import type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js'; + +import { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js'; + +/** + * The `P256` class provides a comprehensive suite of utilities for working with + * the P-256 (aka secp256r1) elliptic curve, commonly used in blockchain and cryptographic + * applications. This class includes methods for key generation, conversion, signing, verification, + * and Elliptic Curve Diffie-Hellman (ECDH) key agreement. + * + * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It + * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH. + * + * Key Features: + * - Key Generation: Generate P-256 private keys in JWK format. + * - Key Conversion: Transform keys between raw byte arrays and JWK formats. + * - Public Key Derivation: Derive public keys from private keys. + * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys. + * - ECDSA Signing and Verification: Sign data and verify signatures with P-256 keys. + * - Key Validation: Validate the mathematical correctness of P-256 keys. + * + * The methods in this class are asynchronous, returning Promises to accommodate various + * JavaScript environments, and use `Uint8Array` for binary data handling. + * + * @example + * ```ts + * // Key Generation + * const privateKey = await P256.generateKey(); + * + * // Public Key Derivation + * const publicKey = await P256.computePublicKey({ key: privateKey }); + * console.log(publicKey === await P256.getPublicKey({ key: privateKey })); // Output: true + * + * // ECDH Shared Secret Computation + * const sharedSecret = await P256.sharedSecret({ + * privateKeyA: privateKey, + * publicKeyB: anotherPublicKey + * }); + * + * // ECDSA Signing + * const signature = await P256.sign({ + * key: privateKey, + * data: new TextEncoder().encode('Message') + * }); + * + * // ECDSA Signature Verification + * const isValid = await P256.verify({ + * key: publicKey, + * signature: signature, + * data: new TextEncoder().encode('Message') + * }); + * + * // Key Conversion + * const publicKeyBytes = await P256.publicKeyToBytes({ publicKey }); + * const privateKeyBytes = await P256.privateKeyToBytes({ privateKey }); + * const compressedPublicKey = await P256.compressPublicKey({ publicKeyBytes }); + * const uncompressedPublicKey = await P256.decompressPublicKey({ publicKeyBytes }); + * + * // Key Validation + * const isPrivateKeyValid = await P256.validatePrivateKey({ privateKeyBytes }); + * const isPublicKeyValid = await P256.validatePublicKey({ publicKeyBytes }); + * ``` + */ +export class P256 { +/** + * Adjusts an ECDSA signature to a normalized, low-S form. + * + * @remarks + * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of + * which are integers. The curve's order (the total number of points on the curve) is denoted by + * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due + * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is + * also a valid signature for the same message and public key. In other words, for every + * signature, there's a "mirror" signature that's equally valid. For these elliptic curves: + * + * - Low S Signature: A signature where the `s` component is in the lower half of the range, + * specifically less than or equal to `n/2`. + * + * - High S Signature: This is where the `s` component is in the upper half of the range, greater + * than `n/2`. + * + * The practical implication is that a third-party can forge a second valid signature for the same + * message by negating the `s` component of the original signature, without any knowledge of the + * private key. This is known as a "signature malleability" attack. + * + * This type of forgery is not a problem in all systems, but it can be an issue in systems that + * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin, + * transaction malleability is an issue because it allows for the modification of transaction + * identifiers (and potentially, transactions themselves) after they're signed but before they're + * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of + * this occurring, making the system more secure and predictable. + * + * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This + * form is considered standard and preferable in some systems and is known as the "normalized" + * form of the signature. + * + * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the + * signature is already low-S, it's returned unmodified. It's important to note that this + * method does not change the validity of the signature but makes it compliant with systems that + * enforce low-S signatures. + * + * @example + * ```ts + * const signature = new Uint8Array([...]); // Your ECDSA signature + * const adjustedSignature = await P256.adjustSignatureToLowS({ signature }); + * // Now 'adjustedSignature' is in the low-S form. + * ``` + * + * @param params - The parameters for the signature adjustment. + * @param params.signature - The ECDSA signature as a `Uint8Array`. + * + * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`. + */ + public static async adjustSignatureToLowS({ signature }: { + signature: Uint8Array; + }): Promise { + // Convert the signature to a `p256.Signature` object. + const signatureObject = p256.Signature.fromCompact(signature); + + if (signatureObject.hasHighS()) { + // Adjust the signature to low-S format if it's high-S. + const adjustedSignatureObject = signatureObject.normalizeS(); + + // Convert the adjusted signature object back to a byte array. + const adjustedSignature = adjustedSignatureObject.toCompactRawBytes(); + + return adjustedSignature; + + } else { + // Return the unmodified signature if it is already in low-S format. + return signature; + } + } + + /** + * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format. + * + * @remarks + * This method takes a private key represented as a byte array (Uint8Array) and + * converts it into a JWK object. The conversion involves extracting the + * elliptic curve points (x and y coordinates) from the private key and encoding + * them into base64url format, alongside other JWK parameters. + * + * The resulting JWK object includes the following properties: + * - `kty`: Key Type, set to 'EC' for Elliptic Curve. + * - `crv`: Curve Name, set to 'P-256'. + * - `d`: The private key component, base64url-encoded. + * - `x`: The x-coordinate of the public key point, base64url-encoded. + * - `y`: The y-coordinate of the public key point, base64url-encoded. + * + * This method is useful for converting raw public keys into a standardized + * JSON format, facilitating their use in cryptographic operations and making + * them easy to share and store. + * + * @example + * ```ts + * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes + * const privateKey = await P256.bytesToPrivateKey({ privateKeyBytes }); + * ``` + * + * @param params - The parameters for the private key conversion. + * @param params.privateKeyBytes - The raw private key as a Uint8Array. + * + * @returns A Promise that resolves to the private key in JWK format. + */ + public static async bytesToPrivateKey({ privateKeyBytes }: { + privateKeyBytes: Uint8Array; + }): Promise { + // Get the elliptic curve points (x and y coordinates) for the provided private key. + const points = await P256.getCurvePoints({ keyBytes: privateKeyBytes }); + + // Construct the private key in JWK format. + const privateKey: Jwk = { + kty : 'EC', + crv : 'P-256', + d : Convert.uint8Array(privateKeyBytes).toBase64Url(), + x : Convert.uint8Array(points.x).toBase64Url(), + y : Convert.uint8Array(points.y).toBase64Url() + }; + + // Compute the JWK thumbprint and set as the key ID. + privateKey.kid = await computeJwkThumbprint({ jwk: privateKey }); + + return privateKey; + } + + /** + * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format. + * + * @remarks + * This method accepts a public key in a byte array (Uint8Array) format and + * transforms it to a JWK object. It involves decoding the elliptic curve points + * (x and y coordinates) from the raw public key bytes and encoding them into + * base64url format, along with setting appropriate JWK parameters. + * + * The resulting JWK object includes the following properties: + * - `kty`: Key Type, set to 'EC' for Elliptic Curve. + * - `crv`: Curve Name, set to 'P-256'. + * - `x`: The x-coordinate of the public key point, base64url-encoded. + * - `y`: The y-coordinate of the public key point, base64url-encoded. + * + * This method is useful for converting raw public keys into a standardized + * JSON format, facilitating their use in cryptographic operations and making + * them easy to share and store. + * + * @example + * ```ts + * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes + * const publicKey = await P256.bytesToPublicKey({ publicKeyBytes }); + * ``` + * + * @param params - The parameters for the public key conversion. + * @param params.publicKeyBytes - The raw public key as a Uint8Array. + * + * @returns A Promise that resolves to the public key in JWK format. + */ + public static async bytesToPublicKey({ publicKeyBytes }: { + publicKeyBytes: Uint8Array; + }): Promise { + // Get the elliptic curve points (x and y coordinates) for the provided public key. + const points = await P256.getCurvePoints({ keyBytes: publicKeyBytes }); + + // Construct the public key in JWK format. + const publicKey: Jwk = { + kty : 'EC', + crv : 'P-256', + x : Convert.uint8Array(points.x).toBase64Url(), + y : Convert.uint8Array(points.y).toBase64Url() + }; + + // Compute the JWK thumbprint and set as the key ID. + publicKey.kid = await computeJwkThumbprint({ jwk: publicKey }); + + return publicKey; + } + + /** + * Converts a public key to its compressed form. + * + * @remarks + * This method takes a public key represented as a byte array and compresses it. Public key + * compression is a process that reduces the size of the public key by removing the y-coordinate, + * making it more efficient for storage and transmission. The compressed key retains the same + * level of security as the uncompressed key. + * + * @example + * ```ts + * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes + * const compressedPublicKey = await P256.compressPublicKey({ + * publicKeyBytes: uncompressedPublicKeyBytes + * }); + * ``` + * + * @param params - The parameters for the public key compression. + * @param params.publicKeyBytes - The public key as a Uint8Array. + * + * @returns A Promise that resolves to the compressed public key as a Uint8Array. + */ + public static async compressPublicKey({ publicKeyBytes }: { + publicKeyBytes: Uint8Array; + }): Promise { + // Decode Weierstrass points from the public key byte array. + const point = p256.ProjectivePoint.fromHex(publicKeyBytes); + + // Return the compressed form of the public key. + return point.toRawBytes(true); + } + + /** + * Derives the public key in JWK format from a given private key. + * + * @remarks + * This method takes a private key in JWK format and derives its corresponding public key, + * also in JWK format. The derivation process involves converting the private key to a raw + * byte array, then computing the elliptic curve points (x and y coordinates) from this private + * key. These coordinates are then encoded into base64url format to construct the public key in + * JWK format. + * + * The process ensures that the derived public key correctly corresponds to the given private key, + * adhering to the P-256 elliptic curve standards. This method is useful in cryptographic + * operations where a public key is needed for operations like signature verification, but only + * the private key is available. + * + * @example + * ```ts + * const privateKey = { ... }; // A Jwk object representing a P-256 private key + * const publicKey = await P256.computePublicKey({ key: privateKey }); + * ``` + * + * @param params - The parameters for the public key derivation. + * @param params.key - The private key in JWK format from which to derive the public key. + * + * @returns A Promise that resolves to the derived public key in JWK format. + */ + public static async computePublicKey({ key }: + ComputePublicKeyParams + ): Promise { + // Convert the provided private key to a byte array. + const privateKeyBytes = await P256.privateKeyToBytes({ privateKey: key }); + + // Get the elliptic curve points (x and y coordinates) for the provided private key. + const points = await P256.getCurvePoints({ keyBytes: privateKeyBytes }); + + // Construct the public key in JWK format. + const publicKey: Jwk = { + kty : 'EC', + crv : 'P-256', + x : Convert.uint8Array(points.x).toBase64Url(), + y : Convert.uint8Array(points.y).toBase64Url() + }; + + // Compute the JWK thumbprint and set as the key ID. + publicKey.kid = await computeJwkThumbprint({ jwk: publicKey }); + + return publicKey; + } + + /** + * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format. + * + * @remarks + * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more + * compact R+S format. This conversion is often required when dealing with ECDSA signatures in + * certain cryptographic standards such as JWS (JSON Web Signature). + * + * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates + * them into a single byte array. This process involves handling the ASN.1 structure to correctly + * parse the R and S values, considering padding and integer encoding specifics of DER. + * + * @example + * ```ts + * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature + * const signature = await P256.convertDerToCompactSignature({ derSignature }); + * ``` + * + * @param params - The parameters for the signature conversion. + * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`. + * + * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`. + */ + public static async convertDerToCompactSignature({ derSignature }: { + derSignature: Uint8Array; + }): Promise { + // Convert the DER-encoded signature into a `p256.Signature` object. + // This involves parsing the ASN.1 DER structure to extract the R and S components. + const signatureObject = p256.Signature.fromDER(derSignature); + + // Convert the signature object into compact R+S format, which concatenates the R and S values + // into a single byte array. + const compactSignature = signatureObject.toCompactRawBytes(); + + return compactSignature; + } + + /** + * Converts a public key to its uncompressed form. + * + * @remarks + * This method takes a compressed public key represented as a byte array and decompresses it. + * Public key decompression involves reconstructing the y-coordinate from the x-coordinate, + * resulting in the full public key. This method is used when the uncompressed key format is + * required for certain cryptographic operations or interoperability. + * + * @example + * ```ts + * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes + * const decompressedPublicKey = await P256.decompressPublicKey({ + * publicKeyBytes: compressedPublicKeyBytes + * }); + * ``` + * + * @param params - The parameters for the public key decompression. + * @param params.publicKeyBytes - The public key as a Uint8Array. + * + * @returns A Promise that resolves to the uncompressed public key as a Uint8Array. + */ + public static async decompressPublicKey({ publicKeyBytes }: { + publicKeyBytes: Uint8Array; + }): Promise { + // Decode Weierstrass points from the public key byte array. + const point = p256.ProjectivePoint.fromHex(publicKeyBytes); + + // Return the uncompressed form of the public key. + return point.toRawBytes(false); + } + + /** + * Generates a P-256 private key in JSON Web Key (JWK) format. + * + * @remarks + * This method creates a new private key suitable for use with the P-256 + * elliptic curve. The key is generated using cryptographically secure random + * number generation to ensure its uniqueness and security. The resulting + * private key adheres to the JWK format, specifically tailored for P-256, + * making it compatible with common cryptographic standards and easy to use in + * various cryptographic processes. + * + * The private key generated by this method includes the following components: + * - `kty`: Key Type, set to 'EC' for Elliptic Curve. + * - `crv`: Curve Name, set to 'P-256'. + * - `d`: The private key component, base64url-encoded. + * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded. + * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded. + * + * The key is returned in a format suitable for direct use in signin and key agreement operations. + * + * @example + * ```ts + * const privateKey = await P256.generateKey(); + * ``` + * + * @returns A Promise that resolves to the generated private key in JWK format. + */ + public static async generateKey(): Promise { + // Generate a random private key. + const privateKeyBytes = p256.utils.randomPrivateKey(); + + // Convert private key from bytes to JWK format. + const privateKey = await P256.bytesToPrivateKey({ privateKeyBytes }); + + // Compute the JWK thumbprint and set as the key ID. + privateKey.kid = await computeJwkThumbprint({ jwk: privateKey }); + + return privateKey; + } + + /** + * Retrieves the public key properties from a given private key in JWK format. + * + * @remarks + * This method extracts the public key portion from a P-256 private key in JWK format. It does + * so by removing the private key property 'd' and making a shallow copy, effectively yielding the + * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not + * already defined. This approach is used under the assumption that a private key in JWK format + * always contains the corresponding public key properties. + * + * Note: This method offers a significant performance advantage, being about 200 times faster + * than `computePublicKey()`. However, it does not mathematically validate the private key, nor + * does it derive the public key from the private key. It simply extracts existing public key + * properties from the private key object. This makes it suitable for scenarios where speed is + * critical and the private key's integrity is already assured. + * + * @example + * ```ts + * const privateKey = { ... }; // A Jwk object representing a P-256 private key + * const publicKey = await P256.getPublicKey({ key: privateKey }); + * ``` + * + * @param params - The parameters for retrieving the public key properties. + * @param params.key - The private key in JWK format. + * + * @returns A Promise that resolves to the public key in JWK format. + */ + public static async getPublicKey({ key }: + GetPublicKeyParams + ): Promise { + // Verify the provided JWK represents an elliptic curve (EC) P-256 private key. + if (!(isEcPrivateJwk(key) && key.crv === 'P-256')) { + throw new Error(`P256: The provided key is not a P-256 private JWK.`); + } + + // Remove the private key property ('d') and make a shallow copy of the provided key. + let { d, ...publicKey } = key; + + // If the key ID is undefined, set it to the JWK thumbprint. + publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey }); + + return publicKey; + } + + /** + * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array). + * + * @remarks + * This method takes a private key in JWK format and extracts its raw byte representation. + * It specifically focuses on the 'd' parameter of the JWK, which represents the private + * key component in base64url encoding. The method decodes this value into a byte array. + * + * This conversion is essential for operations that require the private key in its raw + * binary form, such as certain low-level cryptographic operations or when interfacing + * with systems and libraries that expect keys in a byte array format. + * + * @example + * ```ts + * const privateKey = { ... }; // An X25519 private key in JWK format + * const privateKeyBytes = await P256.privateKeyToBytes({ privateKey }); + * ``` + * + * @param params - The parameters for the private key conversion. + * @param params.privateKey - The private key in JWK format. + * + * @returns A Promise that resolves to the private key as a Uint8Array. + */ + public static async privateKeyToBytes({ privateKey }: { + privateKey: Jwk; + }): Promise { + // Verify the provided JWK represents a valid EC P-256 private key. + if (!isEcPrivateJwk(privateKey)) { + throw new Error(`P256: The provided key is not a valid EC private key.`); + } + + // Decode the provided private key to bytes. + const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array(); + + return privateKeyBytes; + } + + /** + * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array). + * + * @remarks + * This method accepts a public key in JWK format and converts it into its raw binary + * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK + * (which represent the x and y coordinates of the elliptic curve point, respectively) + * from base64url format into a byte array. The method then concatenates these values, + * along with a prefix indicating the key format, to form the full public key. + * + * This function is particularly useful for use cases where the public key is needed + * in its raw byte format, such as for certain cryptographic operations or when + * interfacing with systems that require raw key formats. + * + * @example + * ```ts + * const publicKey = { ... }; // A Jwk public key object + * const publicKeyBytes = await P256.publicKeyToBytes({ publicKey }); + * ``` + * + * @param params - The parameters for the public key conversion. + * @param params.publicKey - The public key in JWK format. + * + * @returns A Promise that resolves to the public key as a Uint8Array. + */ + public static async publicKeyToBytes({ publicKey }: { + publicKey: Jwk; + }): Promise { + // Verify the provided JWK represents a valid EC P-256 public key, which must have a 'y' value. + if (!(isEcPublicJwk(publicKey) && publicKey.y)) { + throw new Error(`P256: The provided key is not a valid EC public key.`); + } + + // Decode the provided public key to bytes. + const prefix = new Uint8Array([0x04]); // Designates an uncompressed key. + const x = Convert.base64Url(publicKey.x).toUint8Array(); + const y = Convert.base64Url(publicKey.y).toUint8Array(); + + // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array. + const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]); + + return publicKeyBytes; + } + + /** + * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret + * using P-256 private and public keys in JSON Web Key (JWK) format. + * + * @remarks + * This method facilitates the ECDH key agreement protocol, which is a method of securely + * deriving a shared secret between two parties based on their private and public keys. + * It takes the private key of one party (privateKeyA) and the public key of another + * party (publicKeyB) to compute a shared secret. The shared secret is derived from the + * x-coordinate of the elliptic curve point resulting from the multiplication of the + * public key with the private key. + * + * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement, + * the resulting shared secret is a point on the elliptic curve, which + * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like + * P-256, each of these coordinates is 32 bytes (256 bits) long. However, + * in the ECDH process, it's standard practice to use only the x-coordinate + * of the shared secret point as the resulting shared key. This is because + * the y-coordinate does not add to the entropy of the key, and both parties + * can independently compute the x-coordinate. Consquently, this implementation + * omits the y-coordinate for simplicity and standard compliance. + * + * @example + * ```ts + * const privateKeyA = { ... }; // A Jwk private key object for party A + * const publicKeyB = { ... }; // A Jwk public key object for party B + * const sharedSecret = await P256.sharedSecret({ + * privateKeyA, + * publicKeyB + * }); + * ``` + * + * @param params - The parameters for the shared secret computation. + * @param params.privateKeyA - The private key in JWK format of one party. + * @param params.publicKeyB - The public key in JWK format of the other party. + * + * @returns A Promise that resolves to the computed shared secret as a Uint8Array. + */ + public static async sharedSecret({ privateKeyA, publicKeyB }: { + privateKeyA: Jwk; + publicKeyB: Jwk; + }): Promise { + // Ensure that keys from the same key pair are not specified. + if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) { + throw new Error(`P256: ECDH shared secret cannot be computed from a single key pair's public and private keys.`); + } + + // Convert the provided private and public keys to bytes. + const privateKeyABytes = await P256.privateKeyToBytes({ privateKey: privateKeyA }); + const publicKeyBBytes = await P256.publicKeyToBytes({ publicKey: publicKeyB }); + + // Compute the compact representation shared secret between the public and private keys. + const sharedSecret = p256.getSharedSecret(privateKeyABytes, publicKeyBBytes, true); + + // Remove the leading byte that indicates the sign of the y-coordinate + // of the point on the elliptic curve. See note above. + return sharedSecret.slice(1); + } + + /** + * Generates an RFC6979-compliant ECDSA signature of given data using a P-256 private key. + * + * @remarks + * This method signs the provided data with a specified private key using the ECDSA + * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979. + * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then + * signed using the private key. The output is a digital signature in the form of a + * Uint8Array, which uniquely corresponds to both the data and the private key used for signing. + * + * This method is commonly used in cryptographic applications to ensure data integrity and + * authenticity. The signature can later be verified by parties with access to the corresponding + * public key, ensuring that the data has not been tampered with and was indeed signed by the + * holder of the private key. + * + * @example + * ```ts + * const data = new TextEncoder().encode('Messsage'); // Data to be signed + * const privateKey = { ... }; // A Jwk object representing a P-256 private key + * const signature = await P256.sign({ + * key: privateKey, + * data + * }); + * ``` + * + * @param params - The parameters for the signing operation. + * @param params.key - The private key to use for signing, represented in JWK format. + * @param params.data - The data to sign, represented as a Uint8Array. + * + * @returns A Promise that resolves to the signature as a Uint8Array. + */ + public static async sign({ data, key }: + SignParams + ): Promise { + // Convert the private key from JWK format to bytes. + const privateKeyBytes = await P256.privateKeyToBytes({ privateKey: key }); + + // Generate a digest of the data using the SHA-256 hash function. + const digest = sha256(data); + + // Sign the provided data using the ECDSA algorithm. + // The `p256.sign` operation returns a signature object with { r, s, recovery } properties. + const signatureObject = p256.sign(digest, privateKeyBytes); + + // Convert the signature object to Uint8Array. + const signature = signatureObject.toCompactRawBytes(); + + return signature; + } + + /** + * Validates a given private key to ensure its compliance with the P-256 curve standards. + * + * @remarks + * This method checks whether a provided private key is a valid 32-byte number and falls within + * the range defined by the P-256 curve's order. It is essential for ensuring the private + * key's mathematical correctness in the context of P-256-based cryptographic operations. + * + * Note that this validation strictly pertains to the key's format and numerical validity; it does + * not assess whether the key corresponds to a known entity or its security status (e.g., whether + * it has been compromised). + * + * @example + * ```ts + * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key + * const isValid = await P256.validatePrivateKey({ privateKeyBytes }); + * console.log(isValid); // true or false based on the key's validity + * ``` + * + * @param params - The parameters for the key validation. + * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array. + * + * @returns A Promise that resolves to a boolean indicating whether the private key is valid. + */ + public static async validatePrivateKey({ privateKeyBytes }: { + privateKeyBytes: Uint8Array; + }): Promise { + return p256.utils.isValidPrivateKey(privateKeyBytes); + } + + /** + * Validates a given public key to confirm its mathematical correctness on the P-256 curve. + * + * @remarks + * This method checks if the provided public key represents a valid point on the P-256 curve. + * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity + * against the curve's parameters. A valid point must lie on the curve and meet specific + * mathematical criteria defined by the curve's equation. + * + * It's important to note that this method does not verify the key's ownership or whether it has + * been compromised; it solely focuses on the key's adherence to the curve's mathematical + * principles. + * + * @example + * ```ts + * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format + * const isValid = await P256.validatePublicKey({ publicKeyBytes }); + * console.log(isValid); // true if the key is valid on the P-256 curve, false otherwise + * ``` + * + * @param params - The parameters for the key validation. + * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array. + * + * @returns A Promise that resolves to a boolean indicating the public key's validity on + * the P-256 curve. + */ + public static async validatePublicKey({ publicKeyBytes }: { + publicKeyBytes: Uint8Array; + }): Promise { + try { + // Decode Weierstrass points from key bytes. + const point = p256.ProjectivePoint.fromHex(publicKeyBytes); + + // Check if points are on the Short Weierstrass curve. + point.assertValidity(); + + } catch(error: any) { + return false; + } + + return true; + } + + /** + * Verifies an RFC6979-compliant ECDSA signature against given data and a P-256 public key. + * + * @remarks + * This method validates a digital signature to ensure that it was generated by the holder of the + * corresponding private key and that the signed data has not been altered. The signature + * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as + * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and + * this hash is then used along with the public key to verify the signature. + * + * The method returns a boolean value indicating whether the signature is valid. A valid signature + * proves that the signed data was indeed signed by the owner of the private key corresponding to + * the provided public key and that the data has not been tampered with since it was signed. + * + * Note: The verification process does not consider the malleability of low-s signatures, which + * may be relevant in certain contexts, such as Bitcoin transactions. + * + * @example + * ```ts + * const data = new TextEncoder().encode('Messsage'); // Data that was signed + * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data + * const signature = new Uint8Array([...]); // Signature to verify + * const isSignatureValid = await P256.verify({ + * key: publicKey, + * signature, + * data + * }); + * console.log(isSignatureValid); // true if the signature is valid, false otherwise + * ``` + * + * @param params - The parameters for the signature verification. + * @param params.key - The public key used for verification, represented in JWK format. + * @param params.signature - The signature to verify, represented as a Uint8Array. + * @param params.data - The data that was signed, represented as a Uint8Array. + * + * @returns A Promise that resolves to a boolean indicating whether the signature is valid. + */ + public static async verify({ key, signature, data }: + VerifyParams + ): Promise { + // Convert the public key from JWK format to bytes. + const publicKeyBytes = await P256.publicKeyToBytes({ publicKey: key }); + + // Generate a digest of the data using the SHA-256 hash function. + const digest = sha256(data); + + /** Perform the verification of the signature. + * This verify operation has the malleability check disabled. Guaranteed support + * for low-s signatures across languages is unlikely especially in the context + * of SSI. Notable Cloud KMS providers do not natively support it either. It is + * also worth noting that low-s signatures are a requirement for Bitcoin. */ + const isValid = p256.verify(signature, digest, publicKeyBytes, { lowS: false }); + + return isValid; + } + + /** + * Returns the elliptic curve points (x and y coordinates) for a given P-256 key. + * + * @remarks + * This method extracts the elliptic curve points from a given P-256 key, whether + * it's a private or a public key. For a private key, the method first computes the + * corresponding public key and then extracts the x and y coordinates. For a public key, + * it directly returns these coordinates. The coordinates are represented as Uint8Array. + * + * The x and y coordinates represent the key's position on the elliptic curve and can be + * used in various cryptographic operations, such as digital signatures or key agreement + * protocols. + * + * @example + * ```ts + * // For a private key + * const privateKey = new Uint8Array([...]); // A 32-byte private key + * const { x: xFromPrivateKey, y: yFromPrivateKey } = await P256.getCurvePoints({ keyBytes: privateKey }); + * + * // For a public key + * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key + * const { x: xFromPublicKey, y: yFromPublicKey } = await P256.getCurvePoints({ keyBytes: publicKey }); + * ``` + * + * @param params - The parameters for the curve point decoding operation. + * @param params.keyBytes - The key for which to get the elliptic curve points. + * Can be either a private key or a public key. + * The key should be passed as a `Uint8Array`. + * + * @returns A Promise that resolves to an object with properties 'x' and 'y', + * each being a Uint8Array representing the x and y coordinates of the key point on the + * elliptic curve. + */ + private static async getCurvePoints({ keyBytes }: { + keyBytes: Uint8Array; + }): Promise<{ x: Uint8Array, y: Uint8Array }> { + // If key is a private key, first compute the public key. + if (keyBytes.byteLength === 32) { + keyBytes = p256.getPublicKey(keyBytes); + } + + // Decode Weierstrass points from key bytes. + const point = p256.ProjectivePoint.fromHex(keyBytes); + + // Get x- and y-coordinate values and convert to Uint8Array. + const x = numberToBytesBE(point.x, 32); + const y = numberToBytesBE(point.y, 32); + + return { x, y }; + } +} + +export { P256 as Secp256r1 }; \ No newline at end of file diff --git a/packages/dids/package.json b/packages/dids/package.json index eca64978f..fbe1e8d55 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -77,8 +77,10 @@ "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", + "@types/bencode": "2.0.4", "@web5/common": "0.2.2", "@web5/crypto": "0.3.0", + "bencode": "4.0.0", "dns-packet": "5.6.1", "level": "8.0.0", "ms": "2.1.3", diff --git a/packages/dids/src/did-error.ts b/packages/dids/src/did-error.ts new file mode 100644 index 000000000..1e3a7c322 --- /dev/null +++ b/packages/dids/src/did-error.ts @@ -0,0 +1,63 @@ +/** + * A custom error class for DID-related errors. + */ +export class DidError extends Error { + constructor(public code: DidErrorCode, message: string) { + super(message); + this.name = 'DidError'; + + // Ensures that instanceof works properly, the correct prototype chain when using inheritance, + // and that V8 stack traces (like Chrome, Edge, and Node.js) are more readable and relevant. + Object.setPrototypeOf(this, new.target.prototype); + + // Captures the stack trace in V8 engines (like Chrome, Edge, and Node.js). // In non-V8 + // environments, the stack trace will still be captured. + if (Error.captureStackTrace) { + Error.captureStackTrace(this, DidError); + } + } +} + +/** + * An enumeration of possible DID error codes. + */ +export enum DidErrorCode { + /** The DID supplied does not conform to valid syntax. */ + InvalidDid = 'invalidDid', + + /** The supplied method name is not supported by the DID method and/or DID resolver implementation. */ + MethodNotSupported = 'methodNotSupported', + + /** An unexpected error occurred during the requested DID operation. */ + InternalError = 'internalError', + + /** The DID document supplied does not conform to valid syntax. */ + InvalidDidDocument = 'invalidDidDocument', + + /** The byte length of a DID document does not match the expected value. */ + InvalidDidDocumentLength = 'invalidDidDocumentLength', + + /** The DID URL supplied to the dereferencing function does not conform to valid syntax. */ + InvalidDidUrl = 'invalidDidUrl', + + /** An invalid public key is detected during a DID operation. */ + InvalidPublicKey = 'invalidPublicKey', + + /** The byte length of a public key does not match the expected value. */ + InvalidPublicKeyLength = 'invalidPublicKeyLength', + + /** An invalid public key type was detected during a DID operation. */ + InvalidPublicKeyType = 'invalidPublicKeyType', + + /** The DID resolver was unable to find the DID document resulting from the resolution request. */ + NotFound = 'notFound', + + /** + * The representation requested via the `accept` input metadata property is not supported by the + * DID method and/or DID resolver implementation. + */ + RepresentationNotSupported = 'representationNotSupported', + + /** The type of a public key is not supported by the DID method and/or DID resolver implementation. */ + UnsupportedPublicKeyType = 'unsupportedPublicKeyType', +} \ No newline at end of file diff --git a/packages/dids/src/index.ts b/packages/dids/src/index.ts index 3316ee8aa..704199e26 100644 --- a/packages/dids/src/index.ts +++ b/packages/dids/src/index.ts @@ -2,6 +2,7 @@ // export * from './did-dht.js'; // export * from './did-ion.js'; export * from './did-uri.js'; +export * from './did-error.js'; export * from './methods/did-dht.js'; export * from './methods/did-jwk.js'; export * from './methods/did-web.js'; diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 1f4c9b4fa..9a8f31d5d 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -1,44 +1,18 @@ -import type { Packet } from 'dns-packet'; -import type { Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams } from '@web5/crypto'; +import type { Packet, TxtAnswer } from 'dns-packet'; +import type { Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams, Signer } from '@web5/crypto'; +import bencode from 'bencode'; import { Convert } from '@web5/common'; -import { AUTHORITATIVE_ANSWER } from 'dns-packet'; -import { CryptoApi, Ed25519, LocalKmsCrypto, Secp256k1, computeJwkThumbprint } from '@web5/crypto'; +import dns, { AUTHORITATIVE_ANSWER } from 'dns-packet'; +import { CryptoApi, Ed25519, LocalKmsCrypto, P256, Secp256k1, computeJwkThumbprint } from '@web5/crypto'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; -import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidService, DidVerificationMethod } from '../types/did-core.js'; +import { DidVerificationRelationship, type DidDocument, type DidResolutionOptions, type DidResolutionResult, type DidService, type DidVerificationMethod } from '../types/did-core.js'; import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; - -/** - * The default TTL for DNS records published to the DHT network. - */ -const DNS_RECORD_TTL = 60 * 60 * 2; // 7200 seconds or 2 hours - -/** - * Character used to separate distinct elements or entries in the DNS packet representation - * of a DID Document. - * - * For example, verification methods, verification relationships, and services are separated by - * semicolons (`;`) in the root record: - * ``` - * vm=k1;auth=k1;asm=k2;inv=k3;del=k3;srv=s1 - * ``` - */ -const PROPERTY_SEPARATOR = ';'; - -/** - * Character used to separate distinct values within a single element or entry in the DNS packet - * representation of a DID Document. - * - * For example, multiple key references for the `authentication` verification relationships are - * separated by commas (`,`): - * ``` - * auth=0,1,2 - * ``` - */ -const VALUE_SEPARATOR = ','; +import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; +import { DidError, DidErrorCode } from '../did-error.js'; /** * Options for creating a Decentralized Identifier (DID) using the DID DHT method. @@ -170,6 +144,53 @@ export interface DidDhtCreateOptions extends DidCreateOptions { verificationMethods?: DidCreateVerificationMethod[]; } +const DEFAULT_PKARR_RELAY = 'https://diddht.tbddev.org'; + +/** + * The version of the DID DHT specification that is implemented by this library. + * + * When a DID DHT document is published to the DHT network, the version of the specification that + * was used to create the document is included in the DNS TXT record for the root record. This + * allows clients to determine whether the DID DHT document is compatible with the client's + * implementation of the DID DHT specification. The version number is not present in the + * corresponding DID document. + * + * @see {@link https://did-dht.com | DID DHT Method Specification} + */ +const DID_DHT_SPECIFICATION_VERSION = 0; + +/** + * The default TTL for DNS records published to the DHT network. + * + * The recommended TTL value is 7200 seconds (2 hours) since it matches the default TTL for + * Mainline DHT records. + */ +const DNS_RECORD_TTL = 7200; + +/** + * Character used to separate distinct elements or entries in the DNS packet representation + * of a DID Document. + * + * For example, verification methods, verification relationships, and services are separated by + * semicolons (`;`) in the root record: + * ``` + * vm=k1;auth=k1;asm=k2;inv=k3;del=k3;srv=s1 + * ``` + */ +const PROPERTY_SEPARATOR = ';'; + +/** + * Character used to separate distinct values within a single element or entry in the DNS packet + * representation of a DID Document. + * + * For example, multiple key references for the `authentication` verification relationships are + * separated by commas (`,`): + * ``` + * auth=0,1,2 + * ``` + */ +const VALUE_SEPARATOR = ','; + /** * Represents an optional extension to a DID Document’s DNS packet representation exposed as a * type index. @@ -207,6 +228,14 @@ export const DidDhtRegisteredKeyType: Record = { secp256r1 : 2 }; +export const DidDhtVerificationRelationship: Record = { + authentication : 'auth', + assertionMethod : 'asm', + capabilityDelegation : 'del', + capabilityInvocation : 'inv', + keyAgreement : 'agm' +}; + /** * Private helper that maps algorithm identifiers to their corresponding DID DHT * {@link DidDhtRegisteredKeyType | registered key type}. @@ -253,11 +282,53 @@ export class DidDht extends DidMethod { // Create the DID object from the generated key material, including DID document, metadata, // signer convenience function, and URI. - return await DidDht.fromPublicKeys({ - keyManager, - options, - ...keySet, - }); + const did = await DidDht.fromPublicKeys({ keyManager, options, ...keySet }); + + // By default, publish the DID document to a DHT Gateway unless explicitly disabled. + if (options.publish ?? true) { + const isPublished = await this.publish({ did }); + did.metadata.published = isPublished; + } + + return did; + } + + public static async createFromKeys({ + keyManager = new LocalKmsCrypto(), + verificationMethods, + options = {} + }: { + keyManager?: CryptoApi & KeyImporterExporter; + options?: DidDhtCreateOptions; + } & DidKeySet): Promise { + if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { + throw new Error(`${this.name}: At least one verification method is required but 0 were given`); + } + + if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { + throw new Error(`${this.name}: Given verification methods are missing an Identity Key`); + } + + if (!verificationMethods?.some(vm => vm.privateKeyJwk && vm.publicKeyJwk)) { + throw new Error(`${this.name}: All verification methods must contain a public and private key in JWK format`); + } + + // Import the private key material for every verification method into the key manager. + for (let vm of verificationMethods) { + await keyManager.importKey({ key: vm.privateKeyJwk! }); + } + + // Create the DID object from the given key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidDht.fromPublicKeys({ keyManager, options, verificationMethods }); + + // By default, publish the DID document to a DHT Gateway unless explicitly disabled. + if (options.publish ?? true) { + const isPublished = await this.publish({ did }); + did.metadata.published = isPublished; + } + + return did; } public static async fromKeyManager({ didUri, keyManager }: { @@ -299,40 +370,6 @@ export class DidDht extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: didUri }; } - public static async fromKeys({ - keyManager = new LocalKmsCrypto(), - verificationMethods, - options = {} - }: { - keyManager?: CryptoApi & KeyImporterExporter; - options?: DidDhtCreateOptions; - } & DidKeySet): Promise { - if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { - throw new Error(`${this.name}: At least one verification method is required but 0 were given`); - } - - if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { - throw new Error(`${this.name}: Given verification methods are missing an Identity Key`); - } - - if (!verificationMethods?.some(vm => vm.privateKeyJwk && vm.publicKeyJwk)) { - throw new Error(`${this.name}: All verification methods must contain a public and private key in JWK format`); - } - - // Import the private key material for every verification method into the key manager. - for (let vm of verificationMethods) { - await keyManager.importKey({ key: vm.privateKeyJwk! }); - } - - // Create the DID object from the given key material, including DID document, metadata, - // signer convenience function, and URI. - return await DidDht.fromPublicKeys({ - keyManager, - options, - verificationMethods - }); - } - public static async getSigningMethod({ didDocument, methodId = '#0' }: { didDocument: DidDocument; methodId?: string; @@ -348,21 +385,113 @@ export class DidDht extends DidMethod { return verificationMethod; } - public static async publish({ keyManager, didDocument, didTypes }: { - keyManager: CryptoApi; - didDocument: DidDocument; - didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + public static async publish({ did, relay = DEFAULT_PKARR_RELAY }: { + did: Did; + relay?: string; }): Promise { - const isPublished = DidDhtDocument.publish({ keyManager, didDocument, didTypes }); + const isPublished = await DidDhtDocument.put({ did, relay }); return isPublished; } - public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise { + public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise { // Attempt to parse the DID URI. const parsedDid = DidUri.parse(didUri); - return null as any; + // Attempt to decode the z-base-32-encoded identifier. + let identityKey: Jwk | undefined; + try { + identityKey = await DidDht.decodeIdentifier({ didUri }); + } catch { /* Consume the error so that a DID resolution error can be returned later. */ } + + // If parsing or decoding failed, the DID is invalid. + if (!parsedDid || !identityKey) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'invalidDid' } + }; + } + + // If the DID method is not "dht", return an error. + if (parsedDid.method !== DidDht.methodName) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'methodNotSupported' } + }; + } + + // Use the given Pkarr relay or the default. + const relay = options?.pkarrRelay ?? DEFAULT_PKARR_RELAY; + + try { + // Attempt to retrieve the DID document from the DHT network. + const didDocument = await DidDhtDocument.get({ didUri, relay }); + + // If the DID document was retrieved successfully, return it. + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didDocument + }; + + + } catch (error: any) { + // If the DID document could not be retrieved, return an error. + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'notFound' } + }; + } + + } + + private static async decodeIdentifier({ didUri }: { + didUri: string + }): Promise { + // Parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // Verify that the DID URI is valid. + if (!parsedDid) { + throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); + } + + // Decode the method-specific identifier from z-base-32 to a byte array. + let identityKeyBytes: Uint8Array | undefined; + try { + identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); + } catch { /* Capture error */ } + + // Verify that the method-specific identifier was decoded successfully. + if (!identityKeyBytes || identityKeyBytes.length !== 32) { + throw new DidError(DidErrorCode.InvalidDid, `Failed to decode method-specific identifier`); + } + + // Convert the byte array to a JWK. + const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); + + return identityKey; + } + + /** + * Encodes a DID DHT Identity Key into a DID identifier. + * + * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with + * `did:dht:` to form the DID identifier. + * + * @param params The parameters to use when computing the DID identifier. + * @param params.identityKey The Identity Key from which the DID identifier is computed. + * @returns A promise that resolves to a string containing the DID identifier. + */ + private static async encodeIdentifier({ identityKey }: { + identityKey: Jwk + }): Promise { + // Convert the key from JWK format to a byte array. + const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); + + // Encode the byte array as a z-base-32 string. + const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z(); + + return `did:${DidDht.methodName}:${identifier}`; } private static async fromPublicKeys({ @@ -426,13 +555,11 @@ export class DidDht extends DidMethod { didDocument.service.push(service); }); - // By default, publish the DID document to a DHT Gateway unless explicitly disabled. - if (options.publish ?? true) { - await this.publish({ keyManager, didDocument, didTypes: options.didTypes }); - } - - // DID Metadata is initially empty for this DID method. - const metadata: DidMetadata = {}; + // Define DID Metadata. + const metadata: DidMetadata = { + ...options.didTypes && { didTypes: options.didTypes }, + published: false + }; // Define a function that returns a signer for the DID. const getSigner = async (params?: { keyUri?: string }) => await DidDht.getSigner({ @@ -457,8 +584,8 @@ export class DidDht extends DidMethod { // If the given verification methods do not contain an Identity Key, add one. if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { - // Add the Identity Key to the key set. - verificationMethods.push({ + // Add the Identity Key to the beginning of the key set. + verificationMethods.unshift({ algorithm : 'Ed25519' as any, id : '0', purposes : ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation'] @@ -486,19 +613,175 @@ export class DidDht extends DidMethod { return keySet; } +} - private static async decodeIdentifier({ didUri }: { + + +interface Bep44Message { + k: Uint8Array; + seq: number; + sig: Uint8Array; + v: Uint8Array; +} + +class DidDhtDocument { + public static async get({ didUri, relay }: { + didUri: string; + relay: string; + }): Promise { + // Decode the z-base-32 DID identifier to public key as a byte array. + const publicKeyBytes = DidDhtDocument.identifierToPublicKeyBytes({ didUri }); + + // Retrieve the signed BEP44 message from a Pkarr relay. + const bep44Message = await DidDhtDocument.pkarrGet({ relay, publicKeyBytes }); + + // // Fetch the DNS packet from the Pkarr relay. + // const response = await fetch(url); + // const dnsPacket = dns.decode(await response.arrayBuffer()); + + // // Convert the DNS packet to a DID document. + // const didDocument = await DidDhtDocument.fromDnsPacket({ didUri, dnsPacket }); + + return null as any; + } + + /** + * + * @param params - The parameters to use when publishing the DID document to the DHT network. + * @param params.did - The DID object to publish. + * @param params.relay - The Pkarr relay to use when publishing the DID document. + * @returns A promise that resolves to `true` if the DID document was published successfully. + * If publishing fails, `false` is returned. + */ + public static async put({ did, relay }: { + did: Did; + relay: string; + }): Promise { + // Convert the DID document and types (if any) to a DNS packet. + const dnsPacket = await DidDhtDocument.toDnsPacket({ + didDocument : did.didDocument, + didTypes : did.metadata?.didTypes + }); + + // Create a signed BEP44 put message from the DNS packet. + const bep44Message = await DidDhtDocument.createBep44PutMessage({ + dnsPacket, + publicKeyBytes : DidDhtDocument.identifierToPublicKeyBytes({ didUri: did.uri }), + signer : await did.getSigner() + }); + + // Publish the DNS packet to the DHT network. + const putResult = await DidDhtDocument.pkarrPut({ relay, bep44Message }); + + return putResult; + } + + private static async pkarrGet({ relay, publicKeyBytes }: { + publicKeyBytes: Uint8Array; + relay: string; + }): Promise { + // The identifier (key in the DHT) is the z-base-32 encoding of the Identity Key. + const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z(); + + // Concatenate the Pkarr relay URL with the identifier to form the full URL. + const url = new URL(identifier, relay).href; + + // Transmit the Get request to the Pkarr relay and get the response. + const response = await fetch(url); + + // Read the Fetch Response stream into a byte array. + const messageBytes = await response.arrayBuffer(); + + // Decode the BEP44 message from the byte array. + const bep44Message: Bep44Message = { + k : publicKeyBytes, + seq : Number(new DataView(messageBytes).getBigUint64(64)), + sig : new Uint8Array(messageBytes, 0, 64), + v : new Uint8Array(messageBytes, 72) + }; + + // !TODO need to check that length is not less than 72 bytes, check that length + // is not over 1072 bytes + // and verify the signature + + return null as any; + } + + private static async pkarrPut({ relay, bep44Message }: { + bep44Message: Bep44Message; + relay: string; + }): Promise { + // The identifier (key in the DHT) is the z-base-32 encoding of the Identity Key. + const identifier = Convert.uint8Array(bep44Message.k).toBase32Z(); + + // Concatenate the Pkarr relay URL with the identifier to form the full URL. + const url = new URL(identifier, relay).href; + + // Construct the body of the request according to the Pkarr relay specification. + const body = new Uint8Array(bep44Message.v.length + 72); + body.set(bep44Message.sig, 0); + new DataView(body.buffer).setBigUint64(bep44Message.sig.length, BigInt(bep44Message.seq)); + body.set(bep44Message.v, bep44Message.sig.length + 8); + + // Transmit the Put request to the Pkarr relay and get the response. + const response = await fetch(url, { + method : 'PUT', + headers : { 'Content-Type': 'application/octet-stream' }, + body + }); + + // Return `true` if the DHT request was successful, otherwise return `false`. + return response.ok; + } + + /** + * + * @param params - The parameters to use when creating the BEP44 put message + * @param params.dnsPacket - The DNS packet to encode in the BEP44 message. + * @param params.publicKeyBytes - The public key bytes of the Identity Key. + * @param params.signer - Signer that can sign and verify data using the Identity Key. + * @returns A promise that resolves to a BEP44 put message. + */ + private static async createBep44PutMessage({ dnsPacket, publicKeyBytes, signer }: { + dnsPacket: Packet; + publicKeyBytes: Uint8Array; + signer: Signer; + }): Promise { + // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the + // current time in seconds since Unix epoch as a simple solution. Higher precision is not + // recommended since DID DHT documents are not expected to change frequently and there are + // small differences in system clocks that can cause issues if multiple clients are publishing + // updates to the same DID document. + const sequenceNumber = Math.ceil(Date.now() / 1000); + + // Encode the DNS packet into a buffer containing a UDP payload. + const encodedDnsPacket = dns.encode(dnsPacket); + + // Encode the sequence and DNS buffer to bencode format. + const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1); + + if (bencodedData.length > 1000) { + throw new Error(`${this.name}: DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`); + } + + // Sign the BEP44 message. + const signature = await signer.sign({ data: bencodedData }); + + return { k: publicKeyBytes, seq: sequenceNumber, sig: signature, v: encodedDnsPacket }; + } + + private static identifierToPublicKeyBytes({ didUri }: { didUri: string - }): Promise { + }): Uint8Array { // Parse the DID URI. const parsedDid = DidUri.parse(didUri); // Verify that the DID URI is valid. - if (!(parsedDid && parsedDid.method === this.methodName)) { + if (!(parsedDid && parsedDid.method === DidDht.methodName)) { throw new Error(`${this.name}: Invalid DID URI: ${didUri}`); } - // Decode the method-specific identifier from Base32Z to a byte array. + // Decode the method-specific identifier from z-base-32 to a byte array. let identityKeyBytes: Uint8Array | undefined; try { identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); @@ -508,45 +791,9 @@ export class DidDht extends DidMethod { throw new Error(`${this.name}: Failed to decode method-specific identifier`); } - // Convert the key from a byte array to JWK format. - const publicKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); - - return publicKey; - } - - /** - * Encodes a DID DHT Identity Key into a DID identifier. - * - * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with - * `did:dht:` to form the DID identifier. - * - * @param params The parameters to use when computing the DID identifier. - * @param params.identityKey The Identity Key from which the DID identifier is computed. - * @returns A promise that resolves to a string containing the DID identifier. - */ - private static async encodeIdentifier({ identityKey }: { - identityKey: Jwk - }): Promise { - // Convert the key from JWK format to a byte array. - const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); - - // Encode the byte array as a Base32Z string. - const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z(); - - return `did:${DidDht.methodName}:${identifier}`; + return identityKeyBytes; } -} - -class DidDhtDocument { - public static async publish({ keyManager, didDocument, didTypes }: { - keyManager: CryptoApi; - didDocument: DidDocument; - didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; - }): Promise { - const dnsPacket = await DidDhtDocument.toDnsPacket({ didDocument, didTypes }); - return null as any; - } private static async fromDnsPacket({ didUri, dnsPacket }: { didUri: string; @@ -559,30 +806,85 @@ class DidDhtDocument { return null as any; } + // private static async signDnsPacket({ dnsPacket, keyManager, identityKey }: { + // dnsPacket: Packet; + // keyManager: CryptoApi; + // identityKey: Jwk; + // }): Promise { + // const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); + // const origin = Convert.uint8Array(publicKeyBytes).toBase32Z(); + + // dnsPacket.answers = dnsPacket.answers?.map(answer => { + // answer.name = normalizeName(origin, answer.name); + // return answer; + // }); + + // // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the + // // current time in seconds since Unix epoch as a simple solution. Higher precision is not + // // recommended since DID DHT documents are not expected to change frequently and there are + // // small differences in system clocks that can cause issues if multiple clients are publishing + // // updates to the same DID document. + // const sequenceNumber = Math.ceil(Date.now() * 1000); + // // const sequenceNumber = Math.ceil(Date.now() / 1000); + + // const encodedDnsPacket = dns.encode(dnsPacket); + + // // Encode the DNS packet as a BEP44 message. + // const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1); + + // // Get key URI of the Identity Key. + // const keyUri = await keyManager.getKeyUri({ key: identityKey }); + + // // Sign the BEP44 message. + // const signature = await keyManager.sign({ keyUri, data: bencodedData }); + + // // + // const signedPacket = new Uint8Array(encodedDnsPacket.length + 72); + // signedPacket.set(signature, 0); + // new DataView(signedPacket.buffer).setBigUint64(signature.length, BigInt(sequenceNumber)); + // signedPacket.set(encodedDnsPacket, signature.length + 8); + + // return signedPacket; + // } + private static async toDnsPacket({ didDocument, didTypes }: { didDocument: DidDocument; didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; }): Promise { - // Initialize the DNS response packet, with the authoritative answer flag set. - const dnsPacket: Packet = { - type : 'response', - id : 0, - flags : AUTHORITATIVE_ANSWER, - }; + const dnsAnswerRecords: TxtAnswer[] = []; + const idLookup = new Map(); + const serviceIds: string[] = []; + const verificationMethodIds: string[] = []; - // Initialize the DNS packet's answer array. - dnsPacket.answers = []; + // Add DNS TXT records if the DID document contains an `alsoKnownAs` property. + if (didDocument.alsoKnownAs) { + dnsAnswerRecords.push({ + type : 'TXT', + name : '_aka.did.', + ttl : DNS_RECORD_TTL, + data : didDocument.alsoKnownAs.join(VALUE_SEPARATOR) + }); + } - const verificationMethodIds: string[] = []; - const serviceIds: string[] = []; - const rootRecord: string[] = []; - const keyLookup = new Map(); + // Add DNS TXT records if the DID document contains a `controller` property. + if (didDocument.controller) { + const controller = Array.isArray(didDocument.controller) + ? didDocument.controller.join(VALUE_SEPARATOR) + : didDocument.controller; + dnsAnswerRecords.push({ + type : 'TXT', + name : '_cnt.did.', + ttl : DNS_RECORD_TTL, + data : controller + }); + } - // Add key records for each verification method - didDocument.verificationMethod?.forEach(async (vm, index) => { + // Add DNS TXT records for each verification method. + for (const [index, vm] of didDocument.verificationMethod?.entries() ?? []) { const dnsRecordId = `k${index}`; + verificationMethodIds.push(dnsRecordId); let methodId = vm.id.split('#').pop()!; // Remove fragment prefix, if any. - keyLookup.set(methodId, dnsRecordId); + idLookup.set(methodId, dnsRecordId); const publicKey = vm.publicKeyJwk; @@ -594,77 +896,107 @@ class DidDhtDocument { const keyType = DidDhtRegisteredKeyType[publicKey.crv]; // Convert the public key from JWK format to a byte array. - let publicKeyBytes; - switch (publicKey.crv) { - case 'Ed25519': - publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey}); - break; - case 'secp256k1': - publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey}); - break; - case 'secp256r1': - publicKeyBytes = Secp256r1PublicKeyToBytes(vm.publicKeyJwk.x); - break; - } - - // const keyRecord: TxtAnswer = { - // type : 'TXT', - // name : `_${dnsRecordId}._did`, - // ttl : TTL, - // data : `id=${vmId},t=${keyType},k=${keyBase64Url}` - // }; + let publicKeyBytes = publicKey.crv === 'Ed25519' + ? await Ed25519.publicKeyToBytes({ publicKey}) + : publicKey.crv === 'secp256k1' + ? await Secp256k1.publicKeyToBytes({ publicKey}) + : await P256.publicKeyToBytes({ publicKey }); + + // Convert the public key from a byte array to Base64URL format. + const publicKeyBase64Url = Convert.uint8Array(publicKeyBytes).toBase64Url(); + + // Define the data for the DNS TXT record. + const txtData = [`id=${methodId}`, `t=${keyType}`, `k=${publicKeyBase64Url}`]; + + // Add the controller property, if set to a value other than the Identity Key (DID Subject). + if (vm.controller !== didDocument.id) txtData.push(`c=${vm.controller}`); + + // Add a TXT record for the verification method. + dnsAnswerRecords.push({ + type : 'TXT', + name : `_${dnsRecordId}._did.`, + ttl : DNS_RECORD_TTL, + data : txtData.join(PROPERTY_SEPARATOR) + }); + } - // packet.answers.push(keyRecord); - // vmIds.push(dnsRecordId); + // Add DNS TXT records for each service. + didDocument.service?.forEach((service, index) => { + const dnsRecordId = `s${index}`; + serviceIds.push(dnsRecordId); + const serviceId = service.id.split('#').pop()!; // Remove fragment prefix, if any. + const serviceEndpoint = Array.isArray(service.serviceEndpoint) + ? service.serviceEndpoint.join(',') + : service.serviceEndpoint; + + // Define the data for the DNS TXT record. + const txtData = [`id=${serviceId}`, `t=${service.type}`, `se=${serviceEndpoint}`]; + + // Add a TXT record for the verification method. + dnsAnswerRecords.push({ + type : 'TXT', + name : `_${dnsRecordId}._did.`, + ttl : DNS_RECORD_TTL, + data : txtData.join(PROPERTY_SEPARATOR) + }); }); - const results = didDocument.verificationMethod.map(async vm => { - // Get the crv value - const crv = vm.publicKeyJwk.crv; - - // Use the crv value to get the keyType from the DidDhtRegisteredKeyType mapping - const keyType = DidDhtRegisteredKeyType[crv as keyof typeof DidDhtRegisteredKeyType]; - - // Depending on the crv value, call the appropriate publicKeyToBytes() function and get the public key in bytes - let publicKeyBytes; - switch (crv) { - case 'Ed25519': - publicKeyBytes = await Ed25519.publicKeyToBytes(vm.publicKeyJw); - break; - case 'secp256k1': - publicKeyBytes = Secp256k1PublicKeyToBytes(vm.publicKeyJwk.x); - break; - case 'secp256r1': - publicKeyBytes = Secp256r1PublicKeyToBytes(vm.publicKeyJwk.x); - break; - } + // Initialize the root DNS TXT record with the DID DHT specification version. + const rootRecord: string[] = [`v=${DID_DHT_SPECIFICATION_VERSION}`]; - // Return an object that contains the keyType and the public key in bytes - return { keyType, publicKeyBytes }; - }); + // Add verification methods to the root record. + if (verificationMethodIds.length) { + rootRecord.push(`vm=${verificationMethodIds.join(VALUE_SEPARATOR)}`); + } - return null as any; - } -} + // Add verification relationships to the root record. + Object.keys(DidVerificationRelationship).forEach(relationship => { + // Collect the verification method IDs for the given relationship. + const dnsRecordIds = (didDocument[relationship as keyof DidDocument] as any[]) + ?.map(id => idLookup.get(id.split('#').pop())); -const processVerificationMethods = async (didDocument: DidDocument) => { - return didDocument.verificationMethod?.map(async (vm, index) => { - const dnsRecordId = `k${index}`; - let methodId = vm.id.split('#').pop()!; // Remove fragment prefix, if any. + // If the relationship includes verification methods, add them to the root record. + if (dnsRecordIds) { + rootRecord.push(`${DidDhtVerificationRelationship[relationship]}=${dnsRecordIds.join(VALUE_SEPARATOR)}`); + } + }); - if (!(vm.publicKeyJwk?.crv && vm.publicKeyJwk.crv in DidDhtRegisteredKeyType)) { - throw new Error(`DidDht: Verification method '${vm.id}' contains unsupported key type: ${vm.publicKeyJwk?.crv ?? 'undefined'}`); + // Add services to the root record. + if (serviceIds.length) { + rootRecord.push(`svc=${serviceIds.join(VALUE_SEPARATOR)}`); } - const keyType = DidDhtRegisteredKeyType[vm.publicKeyJwk.crv]; - - switch(vm.publicKeyJwk.crv) { - case 'Ed25519': - return { keyType, publicKeyBytes: await Ed25519.publicKeyToBytes({ publicKey: vm.publicKeyJwk }) }; - case 'secp256k1': - return { keyType, publicKeyBytes: await Secp256k1.publicKeyToBytes({ publicKey: vm.publicKeyJwk }) }; - default: - throw new Error(`Unsupported curve type: ${vm.publicKeyJwk.crv}`); + // If defined, add a DNS TXT record for each registered DID type. + if (didTypes?.length) { + dnsAnswerRecords.push({ + type : 'TXT', + name : '_typ._did.', + ttl : DNS_RECORD_TTL, + data : `id=${didTypes.join(VALUE_SEPARATOR)}` + }); } - }); -}; + + // Add a DNS TXT record for the root record. + dnsAnswerRecords.push({ + type : 'TXT', + name : '_did.', + ttl : DNS_RECORD_TTL, + data : rootRecord.join(PROPERTY_SEPARATOR) + }); + + // Per the DID DHT specification, the method-specific identifier must be appended as the + // Origin of all records. + const [, , identifier] = didDocument.id.split(':'); + dnsAnswerRecords.forEach(record => record.name += identifier); + + // Create a DNS response packet with the authoritative answer flag set. + const dnsPacket: Packet = { + id : 0, + type : 'response', + flags : AUTHORITATIVE_ANSWER, + answers : dnsAnswerRecords + }; + + return dnsPacket; + } +} \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 14a290afa..904348726 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -372,13 +372,13 @@ export class DidJwk extends DidMethod { const parsedDid = DidUri.parse(didUri); // Attempt to decode the Base64URL-encoded JWK. - let publicKeyJwk: Jwk | undefined; + let publicKey: Jwk | undefined; try { - publicKeyJwk = Convert.base64Url(parsedDid!.id).toObject() as Jwk; + publicKey = Convert.base64Url(parsedDid!.id).toObject() as Jwk; } catch { /* Consume the error so that a DID resolution error can be returned later. */ } // If parsing or decoding failed, the DID is invalid. - if (!parsedDid || !publicKeyJwk) { + if (!parsedDid || !publicKey) { return { ...EMPTY_DID_RESOLUTION_RESULT, didResolutionMetadata: { error: 'invalidDid' } @@ -408,7 +408,7 @@ export class DidJwk extends DidMethod { id : keyUri, type : 'JsonWebKey2020', controller : didDocument.id, - publicKeyJwk : publicKeyJwk + publicKeyJwk : publicKey }]; // Set the Verification Relationship properties. @@ -421,7 +421,7 @@ export class DidJwk extends DidMethod { // If the JWK contains a `use` property with the value "sig" then the `keyAgreement` property // is not included in the DID Document. If the `use` value is "enc" then only the `keyAgreement` // property is included in the DID Document. - switch (publicKeyJwk.use) { + switch (publicKey.use) { case 'sig': { delete didDocument.keyAgreement; break; diff --git a/packages/dids/src/utils.ts b/packages/dids/src/utils.ts index d21e3ec5c..fb9f3f54d 100644 --- a/packages/dids/src/utils.ts +++ b/packages/dids/src/utils.ts @@ -166,7 +166,10 @@ export function getVerificationMethods({ didDocument }: { // Check verification relationship properties for embedded verification methods. Object.keys(DidVerificationRelationship).forEach((relationship) => { - verificationMethods.push(...(didDocument[relationship as keyof DidDocument] as any[])?.filter(isDidVerificationMethod) ?? []); + verificationMethods.push( + ...(didDocument[relationship as keyof DidDocument] as (string | DidVerificationMethod)[]) + ?.filter(isDidVerificationMethod) ?? [] + ); }); return verificationMethods; diff --git a/packages/dids/tests/did-dht.spec.ts b/packages/dids/tests/did-dht.spec.ts index 36f14b47e..80a4b30b9 100644 --- a/packages/dids/tests/did-dht.spec.ts +++ b/packages/dids/tests/did-dht.spec.ts @@ -3,10 +3,37 @@ import { expect } from 'chai'; import { DidDht } from '../src/methods/did-dht.js'; describe.only('DidDht', () => { + + describe('resolve', () => { + it.only('resolves a DID', async () => { + const did = await DidDht.resolve('did:dht:1wh1ot5daz5rq3dgqngfa45s66aco6y6e6c51gyw8ydtwy9qi7zy'); + // const response = await fetch('https://diddht.tbddev.org/1wh1ot5daz5rq3dgqngfa45s66aco6y6e6c51gyw8ydtwy9qi7zy'); + // console.log(response); + // console.log(await response.arrayBuffer()); + }).timeout(10000); + }); + describe('create', () => { - it('', async () => { + it('two services', async () => { const did = await DidDht.create({ options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + id : '0', + controller : 'did:example:1234', + }, + { + algorithm : 'Ed25519', + id : 'sig', + purposes : ['authentication', 'assertionMethod'] + }, + { + algorithm : 'ES256K', + id : 'enc', + purposes : ['keyAgreement'] + } + ], services: [ { id : 'dwn-svc', @@ -16,12 +43,37 @@ describe.only('DidDht', () => { { id : 'dwn-svc-2', type : 'DIDCommMessaging', + serviceEndpoint : [ + 'https://example.com/endpoint1', + 'https://example.com/endpoint2' + ] + } + ] + } + }); + console.log(did.uri); + }); + + it('two services', async () => { + const did = await DidDht.create({ + options: { + services: [ + { + id : 'dwn-svc', + type : 'DIDCommMessaging', serviceEndpoint : 'https://example.com/endpoint', + }, + { + id : 'dwn-svc-2', + type : 'DIDCommMessaging', + serviceEndpoint : [ + 'https://example.com/endpoint1', + 'https://example.com/endpoint2' + ] } ] } }); - console.log(did); }); it('accepts a custom controller for the Identity Key', async () => { diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/did-jwk.spec.ts index 4edde1ae6..712ad45f8 100644 --- a/packages/dids/tests/did-jwk.spec.ts +++ b/packages/dids/tests/did-jwk.spec.ts @@ -11,7 +11,7 @@ import type { DidKeySet, DidKeySetVerificationMethod } from '../src/methods/did- import { DidJwk } from '../src/methods/did-jwk.js'; import DidJwkResolveTestVector from '../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; -describe.only('DidJwk', () => { +describe('DidJwk', () => { let keyManager: LocalKmsCrypto; before(() => { diff --git a/packages/dids/tests/did-method.spec.ts b/packages/dids/tests/did-method.spec.ts index 2f60e6ef4..f3adff6fc 100644 --- a/packages/dids/tests/did-method.spec.ts +++ b/packages/dids/tests/did-method.spec.ts @@ -20,7 +20,7 @@ class DidTest extends DidMethod { } } -describe.only('DidMethod', () => { +describe('DidMethod', () => { let keyManager: LocalKmsCrypto; before(() => { From 6eff583ce254ca3acd25fd6d20cc057d08a8d22a Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Mon, 22 Jan 2024 12:34:06 -0500 Subject: [PATCH 15/39] Rename createFromKeys to fromKeys and change default publishing behavior Signed-off-by: Frank Hinek --- package-lock.json | 24 +++++++- packages/dids/src/methods/did-dht.ts | 91 ++++++++++++++-------------- 2 files changed, 68 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d12ee3d3..adb799755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1979,6 +1979,14 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/bencode": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.4.tgz", + "integrity": "sha512-sirDu3HUSG7jZMlhTDvCzSFiPR4lkUYBQA75CoMi6DEf2alFZWJWtHgfjBbb9PachPZhPMB1IlH09deyMNBipQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "dev": true, @@ -2184,7 +2192,6 @@ }, "node_modules/@types/node": { "version": "20.10.8", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -11909,7 +11916,6 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "dev": true, "license": "MIT" }, "node_modules/universalify": { @@ -14486,9 +14492,10 @@ "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", + "@types/bencode": "2.0.4", "@web5/common": "0.2.2", "@web5/crypto": "0.3.0", - "did-resolver": "4.1.0", + "bencode": "4.0.0", "dns-packet": "5.6.1", "level": "8.0.0", "ms": "2.1.3", @@ -14619,6 +14626,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "packages/dids/node_modules/bencode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", + "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", + "dependencies": { + "uint8-util": "^2.2.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "packages/dids/node_modules/brace-expansion": { "version": "1.1.11", "dev": true, diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 9a8f31d5d..a620e538e 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -293,44 +293,6 @@ export class DidDht extends DidMethod { return did; } - public static async createFromKeys({ - keyManager = new LocalKmsCrypto(), - verificationMethods, - options = {} - }: { - keyManager?: CryptoApi & KeyImporterExporter; - options?: DidDhtCreateOptions; - } & DidKeySet): Promise { - if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { - throw new Error(`${this.name}: At least one verification method is required but 0 were given`); - } - - if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { - throw new Error(`${this.name}: Given verification methods are missing an Identity Key`); - } - - if (!verificationMethods?.some(vm => vm.privateKeyJwk && vm.publicKeyJwk)) { - throw new Error(`${this.name}: All verification methods must contain a public and private key in JWK format`); - } - - // Import the private key material for every verification method into the key manager. - for (let vm of verificationMethods) { - await keyManager.importKey({ key: vm.privateKeyJwk! }); - } - - // Create the DID object from the given key material, including DID document, metadata, - // signer convenience function, and URI. - const did = await DidDht.fromPublicKeys({ keyManager, options, verificationMethods }); - - // By default, publish the DID document to a DHT Gateway unless explicitly disabled. - if (options.publish ?? true) { - const isPublished = await this.publish({ did }); - did.metadata.published = isPublished; - } - - return did; - } - public static async fromKeyManager({ didUri, keyManager }: { didUri: string; keyManager: CryptoApi; @@ -370,6 +332,44 @@ export class DidDht extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: didUri }; } + public static async fromKeys({ + keyManager = new LocalKmsCrypto(), + verificationMethods, + options = {} + }: { + keyManager?: CryptoApi & KeyImporterExporter; + options?: DidDhtCreateOptions; + } & DidKeySet): Promise { + if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { + throw new Error(`${this.name}: At least one verification method is required but 0 were given`); + } + + if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { + throw new Error(`${this.name}: Given verification methods are missing an Identity Key`); + } + + if (!verificationMethods?.some(vm => vm.privateKeyJwk && vm.publicKeyJwk)) { + throw new Error(`${this.name}: All verification methods must contain a public and private key in JWK format`); + } + + // Import the private key material for every verification method into the key manager. + for (let vm of verificationMethods) { + await keyManager.importKey({ key: vm.privateKeyJwk! }); + } + + // Create the DID object from the given key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidDht.fromPublicKeys({ keyManager, verificationMethods, options }); + + // By default, the DID document will NOT be published unless explicitly enabled. + if (options.publish) { + const isPublished = await this.publish({ did }); + did.metadata.published = isPublished; + } + + return did; + } + public static async getSigningMethod({ didDocument, methodId = '#0' }: { didDocument: DidDocument; methodId?: string; @@ -557,8 +557,7 @@ export class DidDht extends DidMethod { // Define DID Metadata. const metadata: DidMetadata = { - ...options.didTypes && { didTypes: options.didTypes }, - published: false + ...options.didTypes && { didTypes: options.didTypes } }; // Define a function that returns a signer for the DID. @@ -761,7 +760,7 @@ class DidDhtDocument { const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1); if (bencodedData.length > 1000) { - throw new Error(`${this.name}: DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`); + throw new DidError(DidErrorCode.InvalidDidDocumentLength, `DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`); } // Sign the BEP44 message. @@ -778,7 +777,7 @@ class DidDhtDocument { // Verify that the DID URI is valid. if (!(parsedDid && parsedDid.method === DidDht.methodName)) { - throw new Error(`${this.name}: Invalid DID URI: ${didUri}`); + throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); } // Decode the method-specific identifier from z-base-32 to a byte array. @@ -787,8 +786,12 @@ class DidDhtDocument { identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); } catch { /* Capture error */ } - if (!identityKeyBytes || identityKeyBytes.length !== 32) { - throw new Error(`${this.name}: Failed to decode method-specific identifier`); + if (!identityKeyBytes) { + throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`); + } + + if (identityKeyBytes.length !== 32) { + throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`); } return identityKeyBytes; From fcc27962889a9c43240700b79d9ae0c39996b01c Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 24 Jan 2024 13:34:36 -0500 Subject: [PATCH 16/39] Update JWK and DHT implementations Signed-off-by: Frank Hinek --- package-lock.json | 5429 +++++++++++++++-------- packages/agent/package.json | 1 + packages/dids/package.json | 9 +- packages/dids/src/did-error.ts | 3 + packages/dids/src/methods/did-dht.ts | 746 ++-- packages/dids/src/methods/did-jwk.ts | 121 +- packages/dids/src/methods/did-method.ts | 12 +- packages/dids/tests/did-dht.spec.ts | 682 ++- packages/dids/tests/did-jwk.spec.ts | 363 +- packages/dids/tests/did-web.spec.ts | 7 +- packages/proxy-agent/package.json | 1 + packages/user-agent/package.json | 1 + 12 files changed, 5016 insertions(+), 2359 deletions(-) diff --git a/package-lock.json b/package-lock.json index adb799755..e8b8e8112 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,8 +27,9 @@ }, "node_modules/@75lb/deep-merge": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", + "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", "dev": true, - "license": "MIT", "dependencies": { "lodash.assignwith": "^4.2.0", "typical": "^7.1.1" @@ -39,34 +40,39 @@ }, "node_modules/@75lb/deep-merge/node_modules/typical": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@assemblyscript/loader": { "version": "0.9.4", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", + "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==" }, "node_modules/@astronautlabs/jsonpath": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz", + "integrity": "sha512-FqL/muoreH7iltYC1EB5Tvox5E8NSOOPGkgns4G+qxRKl6k5dxEVljUjB5NcKESzkqwnUqWjSZkL61XGYOuV+A==", "dependencies": { "static-eval": "2.0.2" } }, "node_modules/@aws-crypto/crc32": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -75,22 +81,26 @@ }, "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -104,11 +114,13 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-js": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -117,22 +129,26 @@ }, "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/util": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -141,11 +157,13 @@ }, "node_modules/@aws-crypto/util/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-kms": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.478.0.tgz", + "integrity": "sha512-aipAUgPdl9phhCyDNXIdU7zym/UfoMNbwhs1CQ5PiktAcRTb7ERvSvtNKHioKatz8oGVR35+5n5V3mupe4URgA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -194,7 +212,8 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.478.0.tgz", + "integrity": "sha512-Jxy9cE1JMkPR0PklCpq3cORHnZq/Z4klhSTNGgZNeBWovMa+plor52kyh8iUNHKl3XEJvTbHM7V+dvrr/x0P1g==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -240,7 +259,8 @@ }, "node_modules/@aws-sdk/client-sts": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.478.0.tgz", + "integrity": "sha512-D+QID0dYzmn9dcxgKP3/nMndUqiQbDLsqI0Zf2pG4MW5gPhVNKlDGIV3Ztz8SkMjzGJExNOLW2L569o8jshJVw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -289,7 +309,8 @@ }, "node_modules/@aws-sdk/core": { "version": "3.477.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.477.0.tgz", + "integrity": "sha512-o0434EH+d1BxHZvgG7z8vph2SYefciQ5RnJw2MgvETGnthgqsnI4nnNJLSw0FVeqCeS18n6vRtzqlGYR2YPCNg==", "dependencies": { "@smithy/core": "^1.2.0", "@smithy/protocol-http": "^3.0.11", @@ -304,7 +325,8 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz", + "integrity": "sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -317,7 +339,8 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.478.0.tgz", + "integrity": "sha512-SsrYEYUvTG9ZoPC+zB19AnVoOKID+QIEHJDIi1GCZXW5kTVyr1saTVm4orG2TjYvbHQMddsWtHOvGYXZWAYMbw==", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-process": "3.468.0", @@ -336,7 +359,8 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.478.0.tgz", + "integrity": "sha512-nwDutJYeHiIZCQDgKIUrsgwAWTil0mNe+cbd+j8fi+wwxkWUzip+F0+z02molJ8WrUUKNRhqB1V5aVx7IranuA==", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-ini": "3.478.0", @@ -356,7 +380,8 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz", + "integrity": "sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -370,7 +395,8 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.478.0.tgz", + "integrity": "sha512-LsDShG51X/q+s5ZFN7kHVqrd8ZHdyEyHqdhoocmRvvw2Dif50M0AqQfvCrW1ndj5CNzXO4x/eH8EK5ZOVlS6Sg==", "dependencies": { "@aws-sdk/client-sso": "3.478.0", "@aws-sdk/token-providers": "3.478.0", @@ -386,7 +412,8 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz", + "integrity": "sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -399,7 +426,8 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz", + "integrity": "sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -412,7 +440,8 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz", + "integrity": "sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -424,7 +453,8 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz", + "integrity": "sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -437,7 +467,8 @@ }, "node_modules/@aws-sdk/middleware-signing": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz", + "integrity": "sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -453,7 +484,8 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz", + "integrity": "sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw==", "dependencies": { "@aws-sdk/types": "3.468.0", "@aws-sdk/util-endpoints": "3.478.0", @@ -467,7 +499,8 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.470.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.470.0.tgz", + "integrity": "sha512-C1o1J06iIw8cyAAOvHqT4Bbqf+PgQ/RDlSyjt2gFfP2OovDpc2o2S90dE8f8iZdSGpg70N5MikT1DBhW9NbhtQ==", "dependencies": { "@smithy/node-config-provider": "^2.1.8", "@smithy/types": "^2.7.0", @@ -481,7 +514,8 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.478.0.tgz", + "integrity": "sha512-7b5tj1y/wGHZIZ+ckjOUKgKrMuCJMF/G1UKZKIqqdekeEsjcThbvoxAMeY0FEowu2ODVk/ggOmpBFxcu0iYd6A==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -527,7 +561,8 @@ }, "node_modules/@aws-sdk/types": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.468.0.tgz", + "integrity": "sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA==", "dependencies": { "@smithy/types": "^2.7.0", "tslib": "^2.5.0" @@ -538,7 +573,8 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz", + "integrity": "sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/util-endpoints": "^1.0.7", @@ -549,8 +585,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.465.0", - "license": "Apache-2.0", + "version": "3.495.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", + "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", "dependencies": { "tslib": "^2.5.0" }, @@ -560,7 +597,8 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz", + "integrity": "sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -570,7 +608,8 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.470.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz", + "integrity": "sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/node-config-provider": "^2.1.8", @@ -591,15 +630,17 @@ }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", "dependencies": { "tslib": "^2.3.1" } }, "node_modules/@babel/code-frame": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -610,16 +651,18 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -631,12 +674,14 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@decentralized-identity/ion-pow-sdk": { "version": "1.0.17", - "license": "apache-2.0", + "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-pow-sdk/-/ion-pow-sdk-1.0.17.tgz", + "integrity": "sha512-vk7DTDM8aKDbFyu1ad/qkoRrGL4q+KvNeL/FNZXhkWPaDhVExBN/qGEoRLf1YSfFe+myto3+4RYTPut+riiqnw==", "dependencies": { "buffer": "6.0.3", "cross-fetch": "3.1.5", @@ -645,7 +690,8 @@ }, "node_modules/@decentralized-identity/ion-sdk": { "version": "1.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-sdk/-/ion-sdk-1.0.1.tgz", + "integrity": "sha512-+P+DXcRSFjsEsI5KIqUmVjpzgUT28B2lWpTO+IxiBcfibAN/1Sg20NebGTO/+serz2CnSZf95N2a1OZ6eXypGQ==", "dependencies": { "@noble/ed25519": "^2.0.0", "@noble/secp256k1": "^2.0.0", @@ -657,19 +703,81 @@ }, "node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats": { "version": "12.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, + "node_modules/@dnsquery/dns-packet": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@dnsquery/dns-packet/-/dns-packet-6.1.1.tgz", + "integrity": "sha512-WXTuFvL3G+74SchFAtz3FgIYVOe196ycvGsMgvSH/8Goptb1qpIQtIuM4SOK9G9lhMWYpHxnXyy544ZhluFOew==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.4", + "utf8-codec": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", + "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", + "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", + "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", + "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -678,10 +786,299 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", + "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", + "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", + "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", + "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", + "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", + "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", + "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", + "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", + "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", + "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", + "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", + "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", + "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", + "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", + "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", + "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", + "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", + "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -694,16 +1091,18 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -724,8 +1123,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -739,8 +1139,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -748,13 +1149,15 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -764,17 +1167,21 @@ }, "node_modules/@eslint/js": { "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, - "license": "Apache-2.0", "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" @@ -785,8 +1192,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -794,8 +1202,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -805,8 +1214,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -816,13 +1226,15 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "dev": true, - "license": "BSD-3-Clause" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true }, "node_modules/@ipld/dag-cbor": { "version": "9.0.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.3.tgz", + "integrity": "sha512-A2UFccS0+sARK9xwXiVZIaWbLbPxLGP3UZOjBeOMWfDY04SXi8h1+t4rHBzOlKYF/yWNm3RbFLyclWO7hZcy4g==", "dependencies": { "cborg": "^2.0.1", "multiformats": "^12.0.1" @@ -834,7 +1246,8 @@ }, "node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "12.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -842,7 +1255,8 @@ }, "node_modules/@ipld/dag-pb": { "version": "4.0.8", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.8.tgz", + "integrity": "sha512-693AqMY2jvhe+w4jSwjnDrbhxIu39gm1H4f6/KD5gG+6VFMM6EXV7vq85BvEf8CRsnA0+auWfA29/S8gbWI0Ew==", "dependencies": { "multiformats": "^13.0.0" }, @@ -853,12 +1267,14 @@ }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -873,8 +1289,9 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -884,8 +1301,9 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -898,16 +1316,18 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -920,16 +1340,18 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.0.0" @@ -937,8 +1359,9 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -947,13 +1370,15 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -961,7 +1386,8 @@ }, "node_modules/@js-temporal/polyfill": { "version": "0.4.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.4.4.tgz", + "integrity": "sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==", "dependencies": { "jsbi": "^4.3.0", "tslib": "^2.4.1" @@ -972,15 +1398,18 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@multiformats/base-x": { "version": "4.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" }, "node_modules/@multiformats/murmur3": { "version": "2.1.8", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.1.8.tgz", + "integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==", "dependencies": { "multiformats": "^13.0.0", "murmurhash3js-revisited": "^3.0.0" @@ -992,18 +1421,21 @@ }, "node_modules/@multiformats/murmur3/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/@noble/ciphers": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", + "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", "dependencies": { "@noble/hashes": "1.3.3" }, @@ -1013,17 +1445,19 @@ }, "node_modules/@noble/ed25519": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-2.0.0.tgz", + "integrity": "sha512-/extjhkwFupyopDrt80OMWKdLgP429qLZj+z6sYJz90rF2Iz0gjZh2ArMKPImUl13Kx+0EXI2hN9T/KJV0/Zng==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@noble/hashes": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", "engines": { "node": ">= 16" }, @@ -1033,18 +1467,20 @@ }, "node_modules/@noble/secp256k1": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", + "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1055,16 +1491,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1075,8 +1513,9 @@ }, "node_modules/@npmcli/git": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", + "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", @@ -1093,8 +1532,9 @@ }, "node_modules/@npmcli/package-json": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -1110,8 +1550,9 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "dev": true, - "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -1121,8 +1562,9 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1130,8 +1572,9 @@ }, "node_modules/@playwright/test": { "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", + "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "playwright": "1.40.1" }, @@ -1144,8 +1587,9 @@ }, "node_modules/@puppeteer/browsers": { "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", + "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -1172,13 +1616,15 @@ }, "node_modules/@puppeteer/browsers/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/@puppeteer/browsers/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1190,8 +1636,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-fs": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, - "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -1199,9 +1646,10 @@ } }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { - "version": "3.1.6", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, - "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -1210,8 +1658,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1227,8 +1676,9 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, - "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1251,8 +1701,9 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1270,38 +1721,198 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.4", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", @@ -1310,22 +1921,25 @@ }, "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.2", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true }, "node_modules/@smithy/abort-controller": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1333,13 +1947,14 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.23", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", + "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "@smithy/util-middleware": "^2.0.9", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", + "@smithy/util-config-provider": "^2.2.1", + "@smithy/util-middleware": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1347,16 +1962,17 @@ } }, "node_modules/@smithy/core": { - "version": "1.2.2", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", + "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-retry": "^2.1.1", + "@smithy/middleware-serde": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-middleware": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1364,13 +1980,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.1.5", - "license": "Apache-2.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", + "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/property-provider": "^2.0.17", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1378,33 +1995,36 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", + "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/types": "^2.9.1", + "@smithy/util-hex-encoding": "^2.1.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.3.2", - "license": "Apache-2.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", + "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/querystring-builder": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-base64": "^2.1.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.18", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", + "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", + "@smithy/types": "^2.9.1", + "@smithy/util-buffer-from": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1412,16 +2032,18 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", + "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", + "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", "dependencies": { "tslib": "^2.5.0" }, @@ -1430,11 +2052,12 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.18", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", + "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1442,15 +2065,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.3.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-serde": "^2.0.16", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-middleware": "^2.0.9", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", + "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", + "dependencies": { + "@smithy/middleware-serde": "^2.1.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/url-parser": "^2.1.1", + "@smithy/util-middleware": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1458,16 +2082,17 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.26", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/protocol-http": "^3.0.12", - "@smithy/service-error-classification": "^2.0.9", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", + "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", + "dependencies": { + "@smithy/node-config-provider": "^2.2.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/service-error-classification": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-middleware": "^2.1.1", + "@smithy/util-retry": "^2.1.1", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -1476,10 +2101,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", + "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1487,10 +2113,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.10", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", + "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1498,12 +2125,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.9", - "license": "Apache-2.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", + "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/shared-ini-file-loader": "^2.3.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1511,13 +2139,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.2.2", - "license": "Apache-2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", + "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", "dependencies": { - "@smithy/abort-controller": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", + "@smithy/abort-controller": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/querystring-builder": "^2.1.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1525,10 +2154,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.17", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", + "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1536,10 +2166,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.12", - "license": "Apache-2.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", + "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1547,11 +2178,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", + "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-uri-escape": "^2.0.0", + "@smithy/types": "^2.9.1", + "@smithy/util-uri-escape": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1559,10 +2191,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", + "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1570,20 +2203,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.9", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", + "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", "dependencies": { - "@smithy/types": "^2.8.0" + "@smithy/types": "^2.9.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.8", - "license": "Apache-2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", + "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1591,16 +2226,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.19", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-codec": "^2.0.16", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", + "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", + "dependencies": { + "@smithy/eventstream-codec": "^2.1.1", + "@smithy/is-array-buffer": "^2.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-hex-encoding": "^2.1.1", + "@smithy/util-middleware": "^2.1.1", + "@smithy/util-uri-escape": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1608,14 +2244,15 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.2.1", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", + "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.4.1", + "@smithy/middleware-stack": "^2.1.1", + "@smithy/protocol-http": "^3.1.1", + "@smithy/types": "^2.9.1", + "@smithy/util-stream": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1623,8 +2260,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.8.0", - "license": "Apache-2.0", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", + "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", "dependencies": { "tslib": "^2.5.0" }, @@ -1633,19 +2271,21 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.16", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", + "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", "dependencies": { - "@smithy/querystring-parser": "^2.0.16", - "@smithy/types": "^2.8.0", + "@smithy/querystring-parser": "^2.1.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.1", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", + "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-buffer-from": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1653,15 +2293,17 @@ } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.0.1", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", + "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.1.0", - "license": "Apache-2.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", + "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", "dependencies": { "tslib": "^2.5.0" }, @@ -1670,10 +2312,11 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", + "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", + "@smithy/is-array-buffer": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1681,8 +2324,9 @@ } }, "node_modules/@smithy/util-config-provider": { - "version": "2.1.0", - "license": "Apache-2.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", + "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", "dependencies": { "tslib": "^2.5.0" }, @@ -1691,12 +2335,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.24", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", + "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", + "@smithy/property-provider": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -1705,15 +2350,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.32", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^2.0.23", - "@smithy/credential-provider-imds": "^2.1.5", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/property-provider": "^2.0.17", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", + "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", + "dependencies": { + "@smithy/config-resolver": "^2.1.1", + "@smithy/credential-provider-imds": "^2.2.1", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/property-provider": "^2.1.1", + "@smithy/smithy-client": "^2.3.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1721,11 +2367,12 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "1.0.8", - "license": "Apache-2.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", + "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", + "@smithy/node-config-provider": "^2.2.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1733,8 +2380,9 @@ } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", + "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", "dependencies": { "tslib": "^2.5.0" }, @@ -1743,10 +2391,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.9", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", + "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", "dependencies": { - "@smithy/types": "^2.8.0", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1754,11 +2403,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.9", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", + "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", "dependencies": { - "@smithy/service-error-classification": "^2.0.9", - "@smithy/types": "^2.8.0", + "@smithy/service-error-classification": "^2.1.1", + "@smithy/types": "^2.9.1", "tslib": "^2.5.0" }, "engines": { @@ -1766,16 +2416,17 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.24", - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", + "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.4.1", + "@smithy/node-http-handler": "^2.3.1", + "@smithy/types": "^2.9.1", + "@smithy/util-base64": "^2.1.1", + "@smithy/util-buffer-from": "^2.1.1", + "@smithy/util-hex-encoding": "^2.1.1", + "@smithy/util-utf8": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1783,8 +2434,9 @@ } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", + "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", "dependencies": { "tslib": "^2.5.0" }, @@ -1793,10 +2445,11 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.2", - "license": "Apache-2.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", + "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-buffer-from": "^2.1.1", "tslib": "^2.5.0" }, "engines": { @@ -1805,7 +2458,8 @@ }, "node_modules/@sphereon/pex": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@sphereon/pex/-/pex-2.1.0.tgz", + "integrity": "sha512-108iEqbu6D421pK9Q6bq4wnWcL8V+fEtw4Ry6NhBidIlDHuJehdLM8Z70A/axgNYMB1C0smMDYt1Xur/ROLwvQ==", "dependencies": { "@astronautlabs/jsonpath": "^1.1.2", "@sphereon/pex-models": "^2.0.3", @@ -1821,19 +2475,22 @@ } }, "node_modules/@sphereon/pex-models": { - "version": "2.1.2", - "license": "Apache-2.0" + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.1.5.tgz", + "integrity": "sha512-7THexvdYUK/Dh8olBB46ErT9q/RnecnMdb5r2iwZ6be0Dt4vQLAUN7QU80H0HZBok4jRTb8ydt12x0raBSTHOg==" }, "node_modules/@sphereon/ssi-types": { "version": "0.13.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.13.0.tgz", + "integrity": "sha512-THzkvgY6AN4/0INgGowinzOFX6NeUQJ/KmAcXrBXx2Rny5v5wCp7LhBIlK21KF2/76fbiCyJvwcd/+Yeb0fjwQ==", "dependencies": { "jwt-decode": "^3.1.2" } }, "node_modules/@tbd54566975/dwn-sdk-js": { "version": "0.2.8", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sdk-js/-/dwn-sdk-js-0.2.8.tgz", + "integrity": "sha512-oiKk+ekAQO94bUkt6yk+xkDY8uCGmNC+rKaYQLhAoTrhYrczeRSuDT04F5/vPBT5K6NfAoRcQsIyBmvgRCUvgA==", "dependencies": { "@ipld/dag-cbor": "9.0.3", "@js-temporal/polyfill": "0.4.4", @@ -1865,21 +2522,24 @@ }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/cross-fetch": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/lru-cache": { "version": "9.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", "engines": { "node": "14 || >=16.14" } }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1897,15 +2557,18 @@ }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -1913,8 +2576,9 @@ }, "node_modules/@tbd54566975/dwn-sql-store": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sql-store/-/dwn-sql-store-0.2.4.tgz", + "integrity": "sha512-LwSpQMcKtNEAj8ffn/UGrYwiENjN4S7rIDX5FDJ4+qjnMbF7I051i1bpw3INKnrtnVWAuynD5033EHSKLml0Zw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "^9.0.5", "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -1928,8 +2592,9 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor": { "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.8.tgz", + "integrity": "sha512-ETWJ7p7lmGw5X+BuI/7rf4/k56xyOvAOVNUVuQmnGYBdJjObLPgS+vyFxRk4odATlkyZqCq2MLNY52bhE6SlRA==", "dev": true, - "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^4.0.0", "multiformats": "^13.0.0" @@ -1941,21 +2606,24 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "13.0.1", - "dev": true, - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==", + "dev": true }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/cborg": { - "version": "4.0.7", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", + "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==", "dev": true, - "license": "Apache-2.0", "bin": { "cborg": "lib/bin.js" } }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/multiformats": { "version": "12.0.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.0.1.tgz", + "integrity": "sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==", "dev": true, - "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -1963,34 +2631,39 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true }, "node_modules/@types/accepts": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/babel__code-frame": { "version": "7.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz", + "integrity": "sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==", + "dev": true }, "node_modules/@types/bencode": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.4.tgz", "integrity": "sha512-sirDu3HUSG7jZMlhTDvCzSFiPR4lkUYBQA75CoMi6DEf2alFZWJWtHgfjBbb9PachPZhPMB1IlH09deyMNBipQ==", + "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/body-parser": { "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -1998,21 +2671,24 @@ }, "node_modules/@types/chai": { "version": "4.3.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "dev": true }, "node_modules/@types/chai-as-promised": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*" } }, "node_modules/@types/co-body": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.3.tgz", + "integrity": "sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*" @@ -2020,31 +2696,36 @@ }, "node_modules/@types/command-line-args": { "version": "5.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", + "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", + "dev": true }, "node_modules/@types/connect": { "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/content-disposition": { "version": "0.5.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", + "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", + "dev": true }, "node_modules/@types/convert-source-map": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-2.0.3.tgz", + "integrity": "sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==", + "dev": true }, "node_modules/@types/cookies": { "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.10.tgz", + "integrity": "sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -2054,21 +2735,24 @@ }, "node_modules/@types/debounce": { "version": "1.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.4.tgz", + "integrity": "sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==", + "dev": true }, "node_modules/@types/dns-packet": { "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.4.tgz", + "integrity": "sha512-R0ORTvCCeujG+upKfV4JlvozKLdQWlpsducXGd1L6ezBChwpjSj9K84F+KoMDsZQ9RhOLTR1hnNrwJHWagY24g==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2076,8 +2760,9 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/eslint": "*", @@ -2086,13 +2771,15 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/express": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2102,8 +2789,9 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2113,49 +2801,57 @@ }, "node_modules/@types/http-assert": { "version": "1.5.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", + "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==", + "dev": true }, "node_modules/@types/http-errors": { "version": "2.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/keygrip": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", + "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", + "dev": true }, "node_modules/@types/koa": { "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", + "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", "dev": true, - "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -2169,53 +2865,63 @@ }, "node_modules/@types/koa-compose": { "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", + "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", "dev": true, - "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/mime": { "version": "1.3.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/mocha": { "version": "10.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.31", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true }, "node_modules/@types/node": { - "version": "20.10.8", - "license": "MIT", + "version": "20.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.6.tgz", + "integrity": "sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q==", + "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/parse5": { "version": "6.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/readable-stream": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.6.tgz", + "integrity": "sha512-awa7+N1SSD9xz8ZvEUSO3/N3itc2PMH6Sca11HiX55TVsWiMaIgmbM76lN+2eZOrCQPiFqj0GmgsfsNtNGWoUw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -2223,18 +2929,21 @@ }, "node_modules/@types/resolve": { "version": "1.20.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "node_modules/@types/semver": { "version": "7.5.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true }, "node_modules/@types/send": { "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2242,8 +2951,9 @@ }, "node_modules/@types/serve-static": { "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -2252,29 +2962,33 @@ }, "node_modules/@types/sinon": { "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", + "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "dev": true }, "node_modules/@types/ws": { "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -2282,8 +2996,9 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", + "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.4.0", @@ -2315,19 +3030,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.18.1", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz", + "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", + "@typescript-eslint/scope-manager": "6.19.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/typescript-estree": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4" }, "engines": { @@ -2347,15 +3059,14 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.1", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", + "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1" - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1" + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2366,13 +3077,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.1", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/types": "6.19.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2385,8 +3096,9 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", + "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0" @@ -2401,8 +3113,9 @@ }, "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2413,8 +3126,9 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", + "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.4.0", "@typescript-eslint/utils": "6.4.0", @@ -2439,8 +3153,9 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2451,8 +3166,9 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -2476,9 +3192,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.18.1", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", + "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2489,15 +3206,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.1", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", + "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", + "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/visitor-keys": "6.19.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2519,13 +3235,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.1", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", + "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/types": "6.19.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2538,8 +3254,9 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", + "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -2562,8 +3279,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2574,8 +3292,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -2600,8 +3319,9 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", + "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "eslint-visitor-keys": "^3.4.1" @@ -2616,8 +3336,9 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2628,14 +3349,16 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/@web/browser-logs": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", + "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", "dev": true, - "license": "MIT", "dependencies": { "errorstacks": "^2.2.0" }, @@ -2645,16 +3368,18 @@ }, "node_modules/@web/config-loader": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.3.1.tgz", + "integrity": "sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/@web/dev-server": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.4.1.tgz", + "integrity": "sha512-GHeyH8MBZQpODFiHiXAdX4hOVbeDyD/DUermUinh/nexWAZUcXyXa200RItuAL6b25MQ3D/5hKNDypujSvXxiw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", @@ -2681,8 +3406,9 @@ }, "node_modules/@web/dev-server-core": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", + "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", "dev": true, - "license": "MIT", "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", @@ -2709,16 +3435,18 @@ }, "node_modules/@web/dev-server-core/node_modules/lru-cache": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/dev-server-rollup": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.1.tgz", + "integrity": "sha512-vhtsQ8qu1pBHailOBOYJwZnYDc1Lmx6ZAd2j+y5PD2ck0R1LmVsZ7dZK8hDCpkvpvlu2ndURjL9tbzdcsBRJmg==", "dev": true, - "license": "MIT", "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.0", @@ -2733,8 +3461,9 @@ }, "node_modules/@web/parse5-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz", + "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse5": "^6.0.1", "parse5": "^6.0.1" @@ -2745,8 +3474,9 @@ }, "node_modules/@web/test-runner": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.0.tgz", + "integrity": "sha512-aAlQrdSqwCie1mxuSK5kM0RYDJZL4Q0Hd5LeXn1on3OtHLtgztL4dZzzNSuAWablR2/Vuve3ChwDDxmYSTqXRg==", "dev": true, - "license": "MIT", "dependencies": { "@web/browser-logs": "^0.4.0", "@web/config-loader": "^0.3.0", @@ -2775,8 +3505,9 @@ }, "node_modules/@web/test-runner-chrome": { "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.15.0.tgz", + "integrity": "sha512-ZqkTJGQ57FDz3lWw+9CKfHuTV64S9GzBy5+0siSQulEVPfGiTzpksx9DohtA3BCLXdbEq4OHg40/XIQJomlc9w==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -2790,8 +3521,9 @@ }, "node_modules/@web/test-runner-commands": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", + "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "mkdirp": "^1.0.4" @@ -2802,8 +3534,9 @@ }, "node_modules/@web/test-runner-core": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", + "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/babel__code-frame": "^7.0.2", @@ -2838,8 +3571,9 @@ }, "node_modules/@web/test-runner-coverage-v8": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz", + "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "istanbul-lib-coverage": "^3.0.0", @@ -2853,16 +3587,18 @@ }, "node_modules/@web/test-runner-coverage-v8/node_modules/lru-cache": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/test-runner-mocha": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz", + "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0" }, @@ -2872,8 +3608,9 @@ }, "node_modules/@web/test-runner-playwright": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz", + "integrity": "sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -2913,6 +3650,8 @@ }, "node_modules/@web5/dwn-server": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@web5/dwn-server/-/dwn-server-0.1.7.tgz", + "integrity": "sha512-SlOL3Fzq/O43c7v+cJS+cMassuHyKQxmoPJQ7U/OjZNw51yHAveQJ3nKbxkUuiHIc+ERMKGE7tW4ignhxieSgQ==", "dev": true, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -2940,16 +3679,18 @@ }, "node_modules/@web5/dwn-server/node_modules/uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@web5/dwn-server/node_modules/ws": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", + "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -2980,8 +3721,9 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -2990,26 +3732,30 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -3019,14 +3765,16 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3037,8 +3785,9 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -3046,8 +3795,9 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" @@ -3055,14 +3805,16 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3077,8 +3829,9 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3090,8 +3843,9 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3102,8 +3856,9 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3116,8 +3871,9 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3126,24 +3882,29 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0", "peer": true }, "node_modules/abab": { "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true }, "node_modules/abort-controller": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3153,7 +3914,8 @@ }, "node_modules/abstract-level": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", "dependencies": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -3169,8 +3931,9 @@ }, "node_modules/accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3181,8 +3944,9 @@ }, "node_modules/acorn": { "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3192,8 +3956,9 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^8" @@ -3201,16 +3966,18 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -3220,7 +3987,8 @@ }, "node_modules/ajv": { "version": "8.12.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3234,7 +4002,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dependencies": { "ajv": "^8.0.0" }, @@ -3249,16 +4018,18 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -3271,8 +4042,9 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3282,16 +4054,18 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -3301,8 +4075,9 @@ }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3313,20 +4088,23 @@ }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-back": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -3337,20 +4115,23 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -3369,8 +4150,9 @@ }, "node_modules/asn1.js": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -3380,13 +4162,15 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/assert": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -3397,16 +4181,18 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/ast-types": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -3416,31 +4202,35 @@ }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-mutex": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "engines": { "node": ">= 0.4" }, @@ -3450,22 +4240,27 @@ }, "node_modules/b4a": { "version": "1.6.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-arraybuffer": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", "engines": { "node": ">= 0.6.0" } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -3479,22 +4274,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/basic-ftp": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", + "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/bencode": { - "version": "3.1.1", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", + "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", "dependencies": { - "uint8-util": "^2.1.6" + "uint8-util": "^2.2.2" }, "engines": { "node": ">=12.20.0" @@ -3502,9 +4298,10 @@ }, "node_modules/better-sqlite3": { "version": "8.7.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.7.0.tgz", + "integrity": "sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" @@ -3512,27 +4309,32 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/bindings": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bintrees": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", + "dev": true }, "node_modules/bittorrent-dht": { "version": "11.0.5", + "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-11.0.5.tgz", + "integrity": "sha512-R09D6uNaziRqsc+B/j5QzkjceTak+wH9vcNLnkmt8A52EWF9lQwBP0vvCKgSA3AJOYYl+41n3osA2KYYn/z5uQ==", "funding": [ { "type": "github", @@ -3547,7 +4349,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "bencode": "^4.0.0", "debug": "^4.3.4", @@ -3562,19 +4363,10 @@ "node": ">=12.20.0" } }, - "node_modules/bittorrent-dht/node_modules/bencode": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "uint8-util": "^2.2.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, "node_modules/bl": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -3583,7 +4375,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3595,7 +4388,8 @@ }, "node_modules/blake2b": { "version": "2.1.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", + "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" @@ -3603,7 +4397,8 @@ }, "node_modules/blake2b-wasm": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", + "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -3611,7 +4406,8 @@ }, "node_modules/blockstore-core": { "version": "4.2.0", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/blockstore-core/-/blockstore-core-4.2.0.tgz", + "integrity": "sha512-F8BCobc75D+9/+hUD+5cixbU6zmZA+lBgNiuBkNlJqRgmAaBBvLOQF6Ad9Jei0Nvmy2a1jaF4CiN76W1apIghA==", "dependencies": { "err-code": "^3.0.1", "interface-blockstore": "^5.0.0", @@ -3625,13 +4421,15 @@ }, "node_modules/bn.js": { "version": "5.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true }, "node_modules/body-parser": { "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -3653,21 +4451,24 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/body-parser/node_modules/qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -3680,8 +4481,9 @@ }, "node_modules/body-parser/node_modules/raw-body": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -3694,20 +4496,23 @@ }, "node_modules/bowser": { "version": "2.11.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -3717,12 +4522,14 @@ }, "node_modules/brorand": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true }, "node_modules/browser-level": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.1", @@ -3732,21 +4539,24 @@ }, "node_modules/browser-resolve": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve": "^1.17.0" } }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -3758,8 +4568,9 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -3768,8 +4579,9 @@ }, "node_modules/browserify-des": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -3779,8 +4591,9 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -3788,8 +4601,9 @@ }, "node_modules/browserify-sign": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, - "license": "ISC", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -3807,8 +4621,9 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3820,6 +4635,8 @@ }, "node_modules/browserify-sign/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -3834,19 +4651,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/browserify-zlib": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -3862,7 +4681,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001565", @@ -3879,6 +4697,8 @@ }, "node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -3893,7 +4713,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -3901,35 +4720,40 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/buffer-writer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/buffer-xor": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true }, "node_modules/builtin-modules": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -3939,21 +4763,24 @@ }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true }, "node_modules/builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3985,8 +4812,9 @@ }, "node_modules/cache-content-type": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -3997,7 +4825,8 @@ }, "node_modules/call-bind": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", @@ -4009,16 +4838,18 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4027,7 +4858,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001576", + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", "dev": true, "funding": [ { @@ -4043,38 +4876,42 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "CC-BY-4.0", "peer": true }, "node_modules/canonicalize": { "version": "2.0.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" }, "node_modules/catering": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", "engines": { "node": ">=6" } }, "node_modules/cborg": { "version": "2.0.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-2.0.5.tgz", + "integrity": "sha512-xVW1rSIw1ZXbkwl2XhJ7o/jAv0vnVoQv/QlfQxV8a7V5PlA4UU/AcIiXqmpyybwNWy/GPQU1m/aBVNIWr7/T0w==", "bin": { "cborg": "cli.js" } }, "node_modules/chacha20-universal": { "version": "1.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/chacha20-universal/-/chacha20-universal-1.0.4.tgz", + "integrity": "sha512-/IOxdWWNa7nRabfe7+oF+jVkGjlr2xUL4J8l/OvzZhj+c9RpMqoo3Dq+5nU1j/BflRV4BKnaQ4+4oH1yBpQG1Q==", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/chai": { "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -4090,8 +4927,9 @@ }, "node_modules/chai-as-promised": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -4101,8 +4939,9 @@ }, "node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4114,8 +4953,9 @@ }, "node_modules/chalk-template": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -4128,8 +4968,9 @@ }, "node_modules/chalk-template/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4142,8 +4983,9 @@ }, "node_modules/chalk-template/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4157,8 +4999,9 @@ }, "node_modules/chalk-template/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4168,21 +5011,24 @@ }, "node_modules/chalk-template/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/chalk-template/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/chalk-template/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4192,16 +5038,18 @@ }, "node_modules/charenc": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -4211,6 +5059,8 @@ }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -4218,7 +5068,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4237,11 +5086,14 @@ }, "node_modules/chownr": { "version": "1.1.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "node_modules/chrome-dgram": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.6.tgz", + "integrity": "sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==", "funding": [ { "type": "github", @@ -4256,7 +5108,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "run-series": "^1.1.9" @@ -4264,15 +5115,17 @@ }, "node_modules/chrome-dns": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chrome-dns/-/chrome-dns-1.0.1.tgz", + "integrity": "sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==", "dependencies": { "chrome-net": "^3.3.2" } }, "node_modules/chrome-launcher": { "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -4288,8 +5141,9 @@ }, "node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4299,6 +5153,8 @@ }, "node_modules/chrome-net": { "version": "3.3.4", + "resolved": "https://registry.npmjs.org/chrome-net/-/chrome-net-3.3.4.tgz", + "integrity": "sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==", "funding": [ { "type": "github", @@ -4313,15 +5169,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "inherits": "^2.0.1" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.0" @@ -4329,8 +5185,9 @@ }, "node_modules/chromium-bidi": { "version": "0.4.16", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", + "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "mitt": "3.0.0" }, @@ -4340,17 +5197,19 @@ }, "node_modules/cipher-base": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/classic-level": { - "version": "1.3.0", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz", + "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", @@ -4364,8 +5223,9 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4375,8 +5235,9 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4388,8 +5249,9 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4402,8 +5264,9 @@ }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4413,18 +5276,21 @@ }, "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4436,8 +5302,9 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4452,16 +5319,18 @@ }, "node_modules/clone": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -4469,8 +5338,9 @@ }, "node_modules/co-body": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", "dev": true, - "license": "MIT", "dependencies": { "inflation": "^2.0.0", "qs": "^6.5.2", @@ -4480,21 +5350,24 @@ }, "node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/command-line-args": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -4507,8 +5380,9 @@ }, "node_modules/command-line-usage": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", + "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -4521,44 +5395,52 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/console-browserify": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/constants-browserify": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -4568,6 +5450,8 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -4582,39 +5466,43 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/content-type": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true }, "node_modules/cookies": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -4625,8 +5513,9 @@ }, "node_modules/cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, - "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -4637,8 +5526,9 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -4646,13 +5536,15 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/create-hash": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -4663,8 +5555,9 @@ }, "node_modules/create-hmac": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -4676,19 +5569,22 @@ }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-fetch": { "version": "3.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dependencies": { "node-fetch": "2.6.7" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.6.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -4706,15 +5602,18 @@ }, "node_modules/cross-fetch/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/cross-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/cross-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -4722,8 +5621,9 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4735,13 +5635,15 @@ }, "node_modules/cross-spawn/node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4754,16 +5656,18 @@ }, "node_modules/crypt": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/crypto-browserify": { "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -4783,20 +5687,23 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/debounce": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -4811,12 +5718,14 @@ }, "node_modules/debug/node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4826,8 +5735,9 @@ }, "node_modules/decompress-response": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -4840,8 +5750,9 @@ }, "node_modules/deep-eql": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -4851,32 +5762,37 @@ }, "node_modules/deep-equal": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/define-data-property": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -4888,15 +5804,17 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4911,8 +5829,9 @@ }, "node_modules/degenerator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -4924,37 +5843,42 @@ }, "node_modules/delegates": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/denque": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-graph": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/des.js": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -4962,8 +5886,9 @@ }, "node_modules/destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4971,33 +5896,38 @@ }, "node_modules/detect-libc": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/devtools-protocol": { "version": "0.0.1147663", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", + "dev": true }, "node_modules/did-resolver": { "version": "4.1.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" }, "node_modules/diff": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -5006,13 +5936,15 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -5022,7 +5954,8 @@ }, "node_modules/dns-packet": { "version": "5.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -5032,8 +5965,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5043,8 +5977,9 @@ }, "node_modules/domain-browser": { "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", "dev": true, - "license": "Artistic-2.0", "engines": { "node": ">=10" }, @@ -5054,12 +5989,14 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/eciesjs": { "version": "0.4.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.5.tgz", + "integrity": "sha512-2zSRIygO48LpdS95Rwt9ryIkJNO37IdbkjRsnYyAn7gx7e4WPBNimnk6jGNdx2QQYr/VJRPnSVdwQpO5bycYZw==", "dependencies": { "@noble/ciphers": "^0.3.0", "@noble/curves": "^1.2.0", @@ -5071,26 +6008,30 @@ }, "node_modules/eciesjs/node_modules/@noble/ciphers": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.3.0.tgz", + "integrity": "sha512-ldbrnOjmNRwFdXcTM6uXDcxpMIFrbzAWNnpBPp4oTJTFF0XByGD6vf45WrehZGXRQTRVV+Zm8YP+EgEf+e4cWA==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/ee-first": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.626", + "version": "1.4.643", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.643.tgz", + "integrity": "sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/elliptic": { "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5103,34 +6044,39 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -5142,16 +6088,19 @@ }, "node_modules/err-code": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" }, "node_modules/errorstacks": { "version": "2.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz", + "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==", + "dev": true }, "node_modules/es-abstract": { "version": "1.22.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", @@ -5202,12 +6151,14 @@ }, "node_modules/es-module-lexer": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true }, "node_modules/es-set-tostringtag": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -5219,7 +6170,8 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5234,9 +6186,10 @@ }, "node_modules/esbuild": { "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", + "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5270,29 +6223,33 @@ }, "node_modules/escalade": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -5311,8 +6268,9 @@ }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -5320,8 +6278,9 @@ }, "node_modules/eslint": { "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -5375,8 +6334,9 @@ }, "node_modules/eslint-plugin-mocha": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz", + "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^3.0.0", "rambda": "^7.1.0" @@ -5390,8 +6350,9 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5405,8 +6366,9 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -5422,16 +6384,18 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5441,8 +6405,9 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5457,8 +6422,9 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "color-convert": "^2.0.1" @@ -5472,8 +6438,9 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -5482,8 +6449,9 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -5498,8 +6466,9 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "color-name": "~1.1.4" @@ -5510,14 +6479,16 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -5528,8 +6499,9 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.3" @@ -5540,8 +6512,9 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -5549,14 +6522,16 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -5567,8 +6542,9 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -5579,8 +6555,9 @@ }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5595,7 +6572,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5606,8 +6584,9 @@ }, "node_modules/esquery": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5617,8 +6596,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5628,54 +6608,62 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "5.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/events": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -5683,16 +6671,18 @@ }, "node_modules/expand-template": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, - "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/express": { "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -5732,21 +6722,24 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/express/node_modules/qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -5759,6 +6752,8 @@ }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -5773,13 +6768,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -5797,8 +6792,9 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5811,17 +6807,20 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-fifo": { "version": "1.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5835,15 +6834,19 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-xml-parser": { "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ { "type": "paypal", @@ -5854,7 +6857,6 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -5864,22 +6866,26 @@ }, "node_modules/fastq": { "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fetch-blob": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -5891,7 +6897,6 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -5902,8 +6907,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -5913,13 +6919,15 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true }, "node_modules/fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5929,8 +6937,9 @@ }, "node_modules/finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -5946,21 +6955,24 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/find-replace": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -5970,8 +6982,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5985,15 +6998,17 @@ }, "node_modules/flat": { "version": "5.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -6005,8 +7020,9 @@ }, "node_modules/flat-cache/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6014,8 +7030,9 @@ }, "node_modules/flat-cache/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6033,8 +7050,9 @@ }, "node_modules/flat-cache/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6044,8 +7062,9 @@ }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6058,12 +7077,14 @@ }, "node_modules/flatted": { "version": "3.2.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/for-each": { "version": "0.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { "is-callable": "^1.1.3" } @@ -6084,22 +7105,11 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/formdata-polyfill": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, - "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -6109,29 +7119,33 @@ }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -6143,13 +7157,16 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -6160,14 +7177,16 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6183,38 +7202,43 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/generate-function": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "dev": true, - "license": "MIT", "dependencies": { "is-property": "^1.0.2" } }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", @@ -6227,8 +7251,9 @@ }, "node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -6238,7 +7263,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -6252,8 +7278,9 @@ }, "node_modules/get-uri": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dev": true, - "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.0", @@ -6266,21 +7293,24 @@ }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/github-from-package": { "version": "0.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true }, "node_modules/glob": { "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -6300,8 +7330,9 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6311,14 +7342,16 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, "node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -6331,7 +7364,8 @@ }, "node_modules/globalthis": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dependencies": { "define-properties": "^1.1.3" }, @@ -6344,8 +7378,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6363,7 +7398,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6373,24 +7409,28 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graceful-goodbye": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graceful-goodbye/-/graceful-goodbye-1.3.0.tgz", + "integrity": "sha512-hcZOs20emYlTM7MmUE0FpuZcjlk2GPsR+UYTHDeWxtGjXcbh2CawGi8vlzqsIvspqAbot7mRv3sC/uhgtKc4hQ==", "dependencies": { "safety-catch": "^1.0.2" } }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/hamt-sharding": { "version": "3.0.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.2.tgz", + "integrity": "sha512-f0DzBD2tSmLFdFsLAvOflIBqFPjerbA7BfmwO8mVho/5hXwgyyYhv+ijIzidQf/DpDX3bRjAQvhGoBFj+DBvPw==", "dependencies": { "sparse-array": "^1.3.1", "uint8arrays": "^4.0.2" @@ -6402,22 +7442,25 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { "get-intrinsic": "^1.2.2" }, @@ -6427,7 +7470,8 @@ }, "node_modules/has-proto": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { "node": ">= 0.4" }, @@ -6437,7 +7481,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -6447,7 +7492,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { "has-symbols": "^1.0.2" }, @@ -6460,8 +7506,9 @@ }, "node_modules/hash-base": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -6473,8 +7520,9 @@ }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6486,6 +7534,8 @@ }, "node_modules/hash-base/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -6500,17 +7550,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/hash-wasm": { "version": "4.9.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", + "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" }, "node_modules/hash.js": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -6518,7 +7569,8 @@ }, "node_modules/hasown": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { "function-bind": "^1.1.2" }, @@ -6528,16 +7580,18 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hmac-drbg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -6546,8 +7600,9 @@ }, "node_modules/hosted-git-info": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -6557,13 +7612,15 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/http-assert": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, - "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -6574,16 +7631,18 @@ }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-assert/node_modules/http-errors": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -6597,16 +7656,18 @@ }, "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -6620,8 +7681,9 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -6632,13 +7694,15 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true }, "node_modules/https-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -6649,8 +7713,9 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6660,6 +7725,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -6673,21 +7740,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6701,24 +7769,27 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflation": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", + "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6726,16 +7797,19 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/interface-blockstore": { "version": "5.2.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.2.3.tgz", + "integrity": "sha512-15cN+ZFdcVXdXo6I/SrSzFDsuJyDTyEI52XuvXQlR/G5fe3cK8p0tvVjfu5diRQH1XqNgmJEdMPixyt0xgjtvQ==", "dependencies": { "interface-store": "^5.0.0", "multiformats": "^11.0.2" @@ -6747,7 +7821,8 @@ }, "node_modules/interface-store": { "version": "5.1.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.2.tgz", + "integrity": "sha512-q2sLoqC+UdaWnjwGyghsH0jwqqVk226lsG207e3QwPB8sAZYmYIWUnJwJH3JjFNNRV9e6CUTmm+gDO0Xg4KRiw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -6755,7 +7830,8 @@ }, "node_modules/internal-slot": { "version": "1.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", @@ -6767,33 +7843,33 @@ }, "node_modules/ip": { "version": "1.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/ipfs-unixfs": { - "version": "11.1.2", - "license": "Apache-2.0 OR MIT", + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.1.3.tgz", + "integrity": "sha512-sy6Koojwm/EcM8yvDlycRYA89C8wIcLcGTMMpqnCPUtqTCdl+JxsuPNCBgAu7tmO8Nipm7Tv7f0g/erxTGKKRA==", "dependencies": { "err-code": "^3.0.1", "protons-runtime": "^5.0.0", "uint8arraylist": "^2.4.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" } }, "node_modules/ipfs-unixfs-exporter": { "version": "13.1.5", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.1.5.tgz", + "integrity": "sha512-O5aMawsHoe4DaYk5FFil2EPrNOaU3pkHC6qUR5JMnW7es93W3b/RjJoO7AyDL1rpb+M3K0oRu86Yc5wLNQQ8jg==", "dependencies": { "@ipld/dag-cbor": "^9.0.0", "@ipld/dag-pb": "^4.0.0", @@ -6820,7 +7896,8 @@ }, "node_modules/ipfs-unixfs-importer": { "version": "15.1.5", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.1.5.tgz", + "integrity": "sha512-TXaOI0M5KNpq2+qLw8AIYd0Lnc0gWTKCBqUd9eErBUwaP3Fna4qauF+JX9Rj2UrwaOvG/1xbF8Vm+92eOcKWMA==", "dependencies": { "@ipld/dag-pb": "^4.0.0", "@multiformats/murmur3": "^2.0.0", @@ -6846,8 +7923,9 @@ }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6861,7 +7939,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -6873,7 +7952,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { "has-bigints": "^1.0.1" }, @@ -6883,8 +7963,9 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6894,7 +7975,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6908,6 +7990,8 @@ }, "node_modules/is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -6922,15 +8006,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-builtin-module": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, - "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -6943,7 +8027,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -6953,8 +8038,9 @@ }, "node_modules/is-core-module": { "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -6964,7 +8050,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6977,8 +8064,9 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -6991,24 +8079,27 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7021,8 +8112,9 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7032,13 +8124,15 @@ }, "node_modules/is-module": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true }, "node_modules/is-nan": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -7052,7 +8146,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -7062,15 +8157,17 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7083,28 +8180,32 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-property": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true }, "node_modules/is-regex": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7118,7 +8219,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { "call-bind": "^1.0.2" }, @@ -7128,8 +8230,9 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7139,7 +8242,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7152,7 +8256,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7165,7 +8270,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -7178,8 +8284,9 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7189,7 +8296,8 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { "call-bind": "^1.0.2" }, @@ -7199,8 +8307,9 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -7210,12 +8319,14 @@ }, "node_modules/isarray": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isbinaryfile": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", + "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.0.0" }, @@ -7225,32 +8336,36 @@ }, "node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -7262,16 +8377,18 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7281,8 +8398,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -7293,62 +8411,73 @@ }, "node_modules/it-all": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz", + "integrity": "sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ==" }, "node_modules/it-batch": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.4.tgz", + "integrity": "sha512-WRu2mqOYIs+T9k7+yxSK9VJdk0UE4R0jKQsWQcti5c6vhb1FhjC2+yCB5XBrctQ9edNfCMU/wVzdDj8qSwimbA==" }, "node_modules/it-filter": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz", + "integrity": "sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-first": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", + "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" }, "node_modules/it-last": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.4.tgz", + "integrity": "sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q==" }, "node_modules/it-map": { "version": "3.0.5", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz", + "integrity": "sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w==", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-merge": { "version": "3.0.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz", + "integrity": "sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA==", "dependencies": { "it-pushable": "^3.2.0" } }, "node_modules/it-parallel": { "version": "3.0.6", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.6.tgz", + "integrity": "sha512-i7UM7I9LTkDJw3YIqXHFAPZX6CWYzGc+X3irdNrVExI4vPazrJdI7t5OqrSVN8CONXLAunCiqaSV/zZRbQR56A==", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-parallel-batch": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.4.tgz", + "integrity": "sha512-O1omh8ss8+UtXiMjE+8kM5C20DT0Ma4VtKVfrSHOJU0UHZ+iWBXarabzPYEp+WiuQmrv+klDPPlTZ9KaLN9xOA==", "dependencies": { "it-batch": "^3.0.0" } }, "node_modules/it-peekable": { "version": "3.0.3", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz", + "integrity": "sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w==" }, "node_modules/it-pipe": { "version": "3.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", "dependencies": { "it-merge": "^3.0.0", "it-pushable": "^3.1.2", @@ -7361,14 +8490,16 @@ }, "node_modules/it-pushable": { "version": "3.2.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-stream-types": { "version": "2.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", + "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -7376,8 +8507,9 @@ }, "node_modules/jackspeak": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7393,8 +8525,9 @@ }, "node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -7407,8 +8540,9 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -7416,8 +8550,9 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -7431,13 +8566,15 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7447,57 +8584,67 @@ }, "node_modules/jsbi": { "version": "4.3.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", + "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, - "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/just-extend": { "version": "6.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true }, "node_modules/jwt-decode": { "version": "3.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, "node_modules/k-bucket": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", + "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/k-rpc": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-5.1.0.tgz", + "integrity": "sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==", "dependencies": { "k-bucket": "^5.0.0", "k-rpc-socket": "^1.7.2", @@ -7506,7 +8653,8 @@ }, "node_modules/k-rpc-socket": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz", + "integrity": "sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==", "dependencies": { "bencode": "^2.0.0", "chrome-dgram": "^3.0.2", @@ -7516,12 +8664,14 @@ }, "node_modules/k-rpc-socket/node_modules/bencode": { "version": "2.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.3.tgz", + "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==" }, "node_modules/keygrip": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, - "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -7531,16 +8681,18 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/koa": { "version": "2.15.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.0.tgz", + "integrity": "sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -7572,13 +8724,15 @@ }, "node_modules/koa-compose": { "version": "4.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true }, "node_modules/koa-convert": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, - "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -7589,16 +8743,18 @@ }, "node_modules/koa-etag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", "dev": true, - "license": "MIT", "dependencies": { "etag": "^1.8.1" } }, "node_modules/koa-send": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "http-errors": "^1.7.3", @@ -7610,16 +8766,18 @@ }, "node_modules/koa-send/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-send/node_modules/http-errors": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7633,16 +8791,18 @@ }, "node_modules/koa-send/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-static": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.1.0", "koa-send": "^5.0.0" @@ -7653,16 +8813,18 @@ }, "node_modules/koa-static/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/koa/node_modules/http-errors": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7676,39 +8838,45 @@ }, "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/kysely": { "version": "0.26.3", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.3.tgz", + "integrity": "sha512-yWSgGi9bY13b/W06DD2OCDDHQmq1kwTGYlQ4wpZkMOJqMGCstVCFIvxCCVG4KfY1/3G0MhDAcZsip/Lw8/vJWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/last-one-wins": { "version": "1.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", + "integrity": "sha512-t+KLJFkHPQk8lfN6WBOiGkiUXoub+gnb2XTYI2P3aiISL+94xgZ1vgz1SXN/N4hthuOoLXarXfBZPUruyjQtfA==" }, "node_modules/layerr": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/layerr/-/layerr-2.0.1.tgz", + "integrity": "sha512-z0730CwG/JO24evdORnyDkwG1Q7b7mF2Tp1qRQ0YvrMMARbt1DFG694SOv439Gm7hYKolyZyaB49YIrYIfZBdg==" }, "node_modules/level": { "version": "8.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", "dependencies": { "browser-level": "^1.0.1", "classic-level": "^1.2.0" @@ -7723,14 +8891,16 @@ }, "node_modules/level-supports": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", "engines": { "node": ">=12" } }, "node_modules/level-transcoder": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", "dependencies": { "buffer": "^6.0.3", "module-error": "^1.0.1" @@ -7741,8 +8911,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7753,8 +8924,9 @@ }, "node_modules/lighthouse-logger": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -7762,21 +8934,24 @@ }, "node_modules/lighthouse-logger/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -7784,8 +8959,9 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -7798,32 +8974,38 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.assignwith": { "version": "4.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==", + "dev": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7837,8 +9019,9 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7851,8 +9034,9 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7866,8 +9050,9 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7877,21 +9062,24 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7901,8 +9089,9 @@ }, "node_modules/log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -7918,8 +9107,9 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7932,8 +9122,9 @@ }, "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7943,18 +9134,21 @@ }, "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7966,8 +9160,9 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7979,8 +9174,9 @@ }, "node_modules/loglevel": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -7991,25 +9187,29 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true }, "node_modules/long": { "version": "5.2.3", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lru": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", + "integrity": "sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==", "dependencies": { "inherits": "^2.0.1" }, @@ -8019,16 +9219,18 @@ }, "node_modules/lru-cache": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, - "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -8041,13 +9243,15 @@ }, "node_modules/marky": { "version": "1.2.5", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true }, "node_modules/md5": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -8056,8 +9260,9 @@ }, "node_modules/md5.js": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -8066,48 +9271,55 @@ }, "node_modules/md5/node_modules/is-buffer": { "version": "1.1.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -8118,8 +9330,9 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -8130,13 +9343,15 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8146,16 +9361,18 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8165,16 +9382,18 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8184,18 +9403,21 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, "node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8208,28 +9430,32 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true }, "node_modules/mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -8239,13 +9465,15 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "node_modules/mocha": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -8283,8 +9511,9 @@ }, "node_modules/mocha-junit-reporter": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", + "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4", "md5": "^2.3.0", @@ -8298,8 +9527,9 @@ }, "node_modules/mocha-junit-reporter/node_modules/mkdirp": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -8312,8 +9542,9 @@ }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8326,8 +9557,9 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -8336,8 +9568,9 @@ }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8347,26 +9580,30 @@ }, "node_modules/mocha/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8376,8 +9613,9 @@ }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8395,8 +9633,9 @@ }, "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8404,8 +9643,9 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8415,16 +9655,18 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8434,8 +9676,9 @@ }, "node_modules/mocha/node_modules/nanoid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8445,8 +9688,9 @@ }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8458,8 +9702,9 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8472,8 +9717,9 @@ }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8488,8 +9734,9 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8505,26 +9752,31 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/module-error": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multibase": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { "@multiformats/base-x": "^4.0.1" }, @@ -8535,7 +9787,8 @@ }, "node_modules/multiformats": { "version": "11.0.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -8543,7 +9796,8 @@ }, "node_modules/multihashes": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", + "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", "dependencies": { "multibase": "^4.0.1", "uint8arrays": "^3.0.0", @@ -8556,30 +9810,35 @@ }, "node_modules/multihashes/node_modules/multiformats": { "version": "9.9.0", - "license": "(Apache-2.0 AND MIT)" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "node_modules/multihashes/node_modules/uint8arrays": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/multihashes/node_modules/varint": { "version": "5.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" }, "node_modules/murmurhash3js-revisited": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", + "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", "engines": { "node": ">=8.0.0" } }, "node_modules/mysql2": { - "version": "3.7.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.8.0.tgz", + "integrity": "sha512-rC9J/Wy9TCaoQWhk/p4J0Jd+WCDYghniuawi7pheDqhQOEJyDfiWGiWOR3iPgTFJaOK3GezC7dmCki7cP1HFkQ==", "dev": true, - "license": "MIT", "dependencies": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -8596,8 +9855,9 @@ }, "node_modules/mysql2/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -8607,16 +9867,18 @@ }, "node_modules/mysql2/node_modules/lru-cache": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/named-placeholders": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "dev": true, - "license": "MIT", "dependencies": { "lru-cache": "^7.14.1" }, @@ -8626,30 +9888,34 @@ }, "node_modules/named-placeholders/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/nanoassert": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", + "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" }, "node_modules/nanocolors": { "version": "0.2.13", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8659,44 +9925,51 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true }, "node_modules/napi-macros": { "version": "2.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/netmask": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/nise": { "version": "5.1.7", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.7.tgz", + "integrity": "sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", @@ -8712,8 +9985,9 @@ }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" "@sinonjs/commons": "^3.0.0" @@ -8721,13 +9995,15 @@ }, "node_modules/nise/node_modules/path-to-regexp": { "version": "6.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true }, "node_modules/node-abi": { "version": "3.54.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", + "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -8737,6 +10013,8 @@ }, "node_modules/node-domexception": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -8748,15 +10026,15 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dev": true, - "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -8772,7 +10050,8 @@ }, "node_modules/node-gyp-build": { "version": "4.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -8781,14 +10060,16 @@ }, "node_modules/node-releases": { "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/node-stdlib-browser": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", "dev": true, - "license": "MIT", "dependencies": { "assert": "^2.0.0", "browser-resolve": "^2.0.0", @@ -8824,6 +10105,8 @@ }, "node_modules/node-stdlib-browser/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -8839,7 +10122,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -8847,8 +10129,9 @@ }, "node_modules/node-stdlib-browser/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8860,8 +10143,9 @@ }, "node_modules/normalize-package-data": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -8874,16 +10158,18 @@ }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-install-checks": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -8893,16 +10179,18 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", @@ -8915,8 +10203,9 @@ }, "node_modules/npm-pick-manifest": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "dev": true, - "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -8929,23 +10218,26 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -8959,14 +10251,16 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -8982,8 +10276,9 @@ }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -8993,24 +10288,27 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -9023,12 +10321,15 @@ }, "node_modules/only": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", "dev": true }, "node_modules/open": { "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, - "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -9043,8 +10344,9 @@ }, "node_modules/optionator": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -9059,12 +10361,14 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true }, "node_modules/p-defer": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", "engines": { "node": ">=12" }, @@ -9074,8 +10378,9 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9088,8 +10393,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9102,7 +10408,8 @@ }, "node_modules/p-queue": { "version": "7.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^5.0.2" @@ -9116,7 +10423,8 @@ }, "node_modules/p-timeout": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "engines": { "node": ">=12" }, @@ -9126,8 +10434,9 @@ }, "node_modules/pac-proxy-agent": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", @@ -9144,8 +10453,9 @@ }, "node_modules/pac-resolver": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "dev": true, - "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "ip": "^1.1.8", @@ -9157,18 +10467,21 @@ }, "node_modules/packet-reader": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", + "dev": true }, "node_modules/pako": { "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9178,8 +10491,9 @@ }, "node_modules/parse-asn1": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "license": "ISC", "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -9190,55 +10504,63 @@ }, "node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-browserify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -9252,29 +10574,33 @@ }, "node_modules/path-to-regexp": { "version": "0.1.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -9288,13 +10614,15 @@ }, "node_modules/pend": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/pg": { "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -9321,48 +10649,55 @@ }, "node_modules/pg-cloudflare": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { "version": "2.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", + "dev": true }, "node_modules/pg-cursor": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.10.3.tgz", + "integrity": "sha512-rDyBVoqPVnx/PTmnwQAYgusSeAKlTL++gmpf5klVK+mYMFEqsOc6VHHZnPKc/4lOvr4r6fiMuoxSFuBF1dx4FQ==", "dev": true, - "license": "MIT", "peerDependencies": { "pg": "^8" } }, "node_modules/pg-int8": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", "dev": true, - "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-pool": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "dev": true, - "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { "version": "1.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==", + "dev": true }, "node_modules/pg-types": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "dev": true, - "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -9376,22 +10711,25 @@ }, "node_modules/pgpass": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "dev": true, - "license": "MIT", "dependencies": { "split2": "^4.1.0" } }, "node_modules/picocolors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9401,7 +10739,8 @@ }, "node_modules/pkarr": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pkarr/-/pkarr-1.1.1.tgz", + "integrity": "sha512-X27LKqf83X3WuJd2Z9qdfVxkmfOu6HUbY0pm11LqeBbFmgmZRPgOxJG8bKiIsmmD6Vjc25j45KHYflF2lfodyQ==", "dependencies": { "bencode": "^3.0.3", "bittorrent-dht": "^11.0.4", @@ -9415,9 +10754,21 @@ "pkarr": "bin.js" } }, + "node_modules/pkarr/node_modules/bencode": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-3.1.1.tgz", + "integrity": "sha512-btsxX9201yoWh45TdqYg6+OZ5O1xTYKTYSGvJndICDFtznE/9zXgow8yjMvvhOqKKuzuL7h+iiCMpfkG8+QuBA==", + "dependencies": { + "uint8-util": "^2.1.6" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/pkarr/node_modules/chalk": { "version": "5.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -9427,8 +10778,9 @@ }, "node_modules/pkg-dir": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -9438,8 +10790,9 @@ }, "node_modules/playwright": { "version": "1.40.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", + "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "playwright-core": "1.40.1" }, @@ -9455,8 +10808,9 @@ }, "node_modules/playwright-core": { "version": "1.40.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", + "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", "dev": true, - "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -9466,8 +10820,10 @@ }, "node_modules/playwright/node_modules/fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -9478,8 +10834,9 @@ }, "node_modules/portfinder": { "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, - "license": "MIT", "dependencies": { "async": "^2.6.4", "debug": "^3.2.7", @@ -9491,16 +10848,18 @@ }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/portfinder/node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -9510,32 +10869,36 @@ }, "node_modules/postgres-array": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/postgres-bytea": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-date": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-interval": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "dev": true, - "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -9545,8 +10908,9 @@ }, "node_modules/prebuild-install": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, - "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -9570,38 +10934,43 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/proc-log": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process": { "version": "0.11.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { "node": ">= 0.6.0" } }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/progress-events": { "version": "1.0.0", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.0.tgz", + "integrity": "sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -9609,8 +10978,9 @@ }, "node_modules/prom-client": { "version": "14.2.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", + "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tdigest": "^0.1.1" }, @@ -9620,13 +10990,15 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -9637,12 +11009,14 @@ }, "node_modules/promise-retry/node_modules/err-code": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/protons-runtime": { "version": "5.2.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.2.2.tgz", + "integrity": "sha512-o97rNPN9pE3cxOxjs/waZNRKlbY/DR11oc20rUvarWZgFzQLLLzJU0RFh5JPi6GJCN67VGVn9/FDIEtFblfB3A==", "dependencies": { "uint8arraylist": "^2.4.3", "uint8arrays": "^5.0.1" @@ -9650,19 +11024,22 @@ }, "node_modules/protons-runtime/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/protons-runtime/node_modules/uint8arrays": { "version": "5.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -9673,8 +11050,9 @@ }, "node_modules/proxy-agent": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -9691,21 +11069,24 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -9717,13 +11098,15 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -9731,13 +11114,15 @@ }, "node_modules/punycode": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true }, "node_modules/puppeteer-core": { "version": "20.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", + "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", @@ -9760,16 +11145,18 @@ }, "node_modules/puppeteer-core/node_modules/cross-fetch": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, - "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/puppeteer-core/node_modules/node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9787,18 +11174,21 @@ }, "node_modules/puppeteer-core/node_modules/tr46": { "version": "0.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/puppeteer-core/node_modules/webidl-conversions": { "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/puppeteer-core/node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -9806,8 +11196,9 @@ }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9826,8 +11217,9 @@ }, "node_modules/qs": { "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -9840,6 +11232,8 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" @@ -9847,6 +11241,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -9860,17 +11256,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/queue-tick": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "node_modules/rabin-wasm": { "version": "0.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", + "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", "dependencies": { "@assemblyscript/loader": "^0.9.4", "bl": "^5.0.0", @@ -9885,7 +11282,8 @@ }, "node_modules/rabin-wasm/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9903,7 +11301,8 @@ }, "node_modules/rabin-wasm/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9915,15 +11314,18 @@ }, "node_modules/rabin-wasm/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/rabin-wasm/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/rabin-wasm/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -9931,20 +11333,23 @@ }, "node_modules/rambda": { "version": "7.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", + "dev": true }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -9952,16 +11357,18 @@ }, "node_modules/range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -9974,8 +11381,9 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -9988,15 +11396,17 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/readable-stream": { "version": "4.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -10010,7 +11420,8 @@ }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dependencies": { "readable-stream": "^3.6.0" }, @@ -10024,7 +11435,8 @@ }, "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10036,8 +11448,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10047,14 +11460,16 @@ }, "node_modules/record-cache": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.2.0.tgz", + "integrity": "sha512-kyy3HWCez2WrotaL3O4fTn0rsIdfRKOdQQcEJ9KpvmKmbffKVvwsloX063EgRUlpJIXHiDQFhJcTbZequ2uTZw==", "dependencies": { "b4a": "^1.3.1" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10069,23 +11484,26 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -10100,16 +11518,18 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-path": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, - "license": "MIT", "dependencies": { "http-errors": "~1.6.2", "path-is-absolute": "1.0.1" @@ -10120,16 +11540,18 @@ }, "node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/resolve-path/node_modules/http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -10142,26 +11564,30 @@ }, "node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, "node_modules/resolve-path/node_modules/setprototypeof": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true }, "node_modules/resolve-path/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/response-time": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.0", "on-headers": "~1.0.1" @@ -10172,16 +11598,18 @@ }, "node_modules/response-time/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -10190,18 +11618,26 @@ "node": ">=8" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10209,8 +11645,9 @@ }, "node_modules/rimraf": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", + "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -10226,8 +11663,9 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -10243,8 +11681,9 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10257,25 +11696,28 @@ }, "node_modules/rimraf/node_modules/minipass": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/ripemd160": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "node_modules/rollup": { - "version": "4.9.4", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -10287,37 +11729,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.4", - "@rollup/rollup-android-arm64": "4.9.4", - "@rollup/rollup-darwin-arm64": "4.9.4", - "@rollup/rollup-darwin-x64": "4.9.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", - "@rollup/rollup-linux-arm64-gnu": "4.9.4", - "@rollup/rollup-linux-arm64-musl": "4.9.4", - "@rollup/rollup-linux-riscv64-gnu": "4.9.4", - "@rollup/rollup-linux-x64-gnu": "4.9.4", - "@rollup/rollup-linux-x64-musl": "4.9.4", - "@rollup/rollup-win32-arm64-msvc": "4.9.4", - "@rollup/rollup-win32-ia32-msvc": "4.9.4", - "@rollup/rollup-win32-x64-msvc": "4.9.4", - "@rollup/rollup-android-arm-eabi": "4.9.4", - "@rollup/rollup-android-arm64": "4.9.4", - "@rollup/rollup-darwin-arm64": "4.9.4", - "@rollup/rollup-darwin-x64": "4.9.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", - "@rollup/rollup-linux-arm64-gnu": "4.9.4", - "@rollup/rollup-linux-arm64-musl": "4.9.4", - "@rollup/rollup-linux-riscv64-gnu": "4.9.4", - "@rollup/rollup-linux-x64-gnu": "4.9.4", - "@rollup/rollup-linux-x64-musl": "4.9.4", - "@rollup/rollup-win32-arm64-msvc": "4.9.4", - "@rollup/rollup-win32-ia32-msvc": "4.9.4", - "@rollup/rollup-win32-x64-msvc": "4.9.4", + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -10333,13 +11764,14 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-parallel-limit": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "funding": [ { "type": "github", @@ -10354,13 +11786,14 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-series": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", + "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", "funding": [ { "type": "github", @@ -10374,15 +11807,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -10395,11 +11828,13 @@ }, "node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { - "version": "1.0.1", - "license": "MIT", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", @@ -10419,17 +11854,20 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/safety-catch": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safety-catch/-/safety-catch-1.0.2.tgz", + "integrity": "sha512-C1UYVZ4dtbBxEtvOcpjBaaD27nP8MlvyAQEp2fOTOEe6pfUpk1cDUxij6BR1jZup6rSyUTaBBplK7LanskrULA==" }, "node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -10446,8 +11884,9 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -10462,8 +11901,9 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -10471,14 +11911,16 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/semver": { "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10491,8 +11933,9 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10502,8 +11945,9 @@ }, "node_modules/send": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -10525,33 +11969,39 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/seq-queue": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", "dev": true }, "node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, - "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -10563,13 +12013,15 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dependencies": { "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -10577,7 +12029,8 @@ }, "node_modules/set-function-name": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -10589,18 +12042,21 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "node_modules/setprototypeof": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "node_modules/sha.js": { "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -10611,7 +12067,8 @@ }, "node_modules/sha256-universal": { "version": "1.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha256-universal/-/sha256-universal-1.2.1.tgz", + "integrity": "sha512-ghn3muhdn1ailCQqqceNxRgkOeZSVfSE13RQWEg6njB+itsFzGVSJv+O//2hvNXZuxVIRyNzrgsZ37SPDdGJJw==", "dependencies": { "b4a": "^1.0.1", "sha256-wasm": "^2.2.1" @@ -10619,7 +12076,8 @@ }, "node_modules/sha256-wasm": { "version": "2.2.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha256-wasm/-/sha256-wasm-2.2.2.tgz", + "integrity": "sha512-qKSGARvao+JQlFiA+sjJZhJ/61gmW/3aNLblB2rsgIxDlDxsJPHo8a1seXj12oKtuHVgJSJJ7QEGBUYQN741lQ==", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -10627,7 +12085,8 @@ }, "node_modules/sha512-universal": { "version": "1.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha512-universal/-/sha512-universal-1.2.1.tgz", + "integrity": "sha512-kehYuigMoRkIngCv7rhgruLJNNHDnitGTBdkcYbCbooL8Cidj/bS78MDxByIjcc69M915WxcQTgZetZ1JbeQTQ==", "dependencies": { "b4a": "^1.0.1", "sha512-wasm": "^2.3.1" @@ -10635,7 +12094,8 @@ }, "node_modules/sha512-wasm": { "version": "2.3.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha512-wasm/-/sha512-wasm-2.3.4.tgz", + "integrity": "sha512-akWoxJPGCB3aZCrZ+fm6VIFhJ/p8idBv7AWGFng/CZIrQo51oQNsvDbTSRXWAzIiZJvpy16oIDiCCPqTe21sKg==", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -10643,8 +12103,9 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10654,15 +12115,17 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -10673,12 +12136,21 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -10693,11 +12165,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/simple-get": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -10713,7 +12186,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -10722,8 +12194,9 @@ }, "node_modules/sinon": { "version": "16.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", + "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^10.3.0", @@ -10739,16 +12212,18 @@ }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10758,23 +12233,26 @@ }, "node_modules/siphash24": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/siphash24/-/siphash24-1.3.1.tgz", + "integrity": "sha512-moemC3ZKiTzH29nbFo3Iw8fbemWWod4vNs/WgKbQ54oEs6mE6XVlguxvinYjB+UmaE0PThgyED9fUkWvirT8hA==", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -10789,8 +12267,9 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10803,8 +12282,9 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10814,13 +12294,15 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -10828,8 +12310,9 @@ }, "node_modules/socks": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, - "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -10841,8 +12324,9 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -10854,12 +12338,14 @@ }, "node_modules/socks/node_modules/ip": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "node_modules/sodium-javascript": { "version": "0.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sodium-javascript/-/sodium-javascript-0.8.0.tgz", + "integrity": "sha512-rEBzR5mPxPES+UjyMDvKPIXy9ImF17KOJ32nJNi9uIquWpS/nfj+h6m05J5yLJaGXjgM72LmQoUbWZVxh/rmGg==", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -10872,15 +12358,17 @@ }, "node_modules/sodium-native": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.0.5.tgz", + "integrity": "sha512-YGimGhy7Ho6pTAAvuNdn3Tv9C2MD7HP89X1omReHat0Fd1mMnapGqwzb5YoHTAbIEh8tQmKP6+uLlwYCkf+EOA==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-gyp-build": "^4.6.0" } }, "node_modules/sodium-universal": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sodium-universal/-/sodium-universal-4.0.0.tgz", + "integrity": "sha512-iKHl8XnBV96k1c75gwwzANFdephw/MDWSjQAjPmBE+du0y3P23Q8uf7AcdcfFsYAMwLg7WVBfSAIBtV/JvRsjA==", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -10895,24 +12383,27 @@ }, "node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", "dev": true, - "license": "MIT", "dependencies": { "abab": "^2.0.6", "iconv-lite": "^0.6.3", @@ -10931,8 +12422,9 @@ }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -10942,8 +12434,9 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "buffer-from": "^1.0.0", @@ -10952,8 +12445,9 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -10961,26 +12455,30 @@ }, "node_modules/sparse-array": { "version": "1.3.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", + "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==" }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -10988,35 +12486,40 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true }, "node_modules/split2": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/sqlstring": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/static-eval": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", "dependencies": { "escodegen": "^1.8.1" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -11036,14 +12539,16 @@ }, "node_modules/static-eval/node_modules/estraverse": { "version": "4.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { "node": ">=4.0" } }, "node_modules/static-eval/node_modules/levn": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -11054,7 +12559,8 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -11069,13 +12575,16 @@ }, "node_modules/static-eval/node_modules/prelude-ls": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, "node_modules/static-eval/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true, "engines": { "node": ">=0.10.0" @@ -11083,7 +12592,8 @@ }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -11093,16 +12603,18 @@ }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stream-browserify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -11110,8 +12622,9 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11123,8 +12636,9 @@ }, "node_modules/stream-http": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -11134,8 +12648,9 @@ }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11147,16 +12662,18 @@ }, "node_modules/stream-read-all": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/streamx": { "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", "dev": true, - "license": "MIT", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -11164,13 +12681,16 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -11184,13 +12704,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -11206,8 +12726,9 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11219,13 +12740,15 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -11235,8 +12758,9 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11249,7 +12773,8 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11267,7 +12792,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11282,7 +12808,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11294,7 +12821,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11306,8 +12834,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11318,8 +12847,9 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11329,8 +12859,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -11340,12 +12871,14 @@ }, "node_modules/strnum": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -11355,8 +12888,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11366,8 +12900,9 @@ }, "node_modules/table-layout": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", + "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", "dev": true, - "license": "MIT", "dependencies": { "@75lb/deep-merge": "^1.1.1", "array-back": "^6.2.2", @@ -11386,24 +12921,27 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/table-layout/node_modules/typical": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -11411,8 +12949,9 @@ }, "node_modules/tar-fs": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -11422,8 +12961,9 @@ }, "node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -11437,8 +12977,9 @@ }, "node_modules/tar-stream/node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11447,6 +12988,8 @@ }, "node_modules/tar-stream/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -11462,7 +13005,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11470,8 +13012,9 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11483,16 +13026,18 @@ }, "node_modules/tdigest": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dev": true, - "license": "MIT", "dependencies": { "bintrees": "1.0.2" } }, "node_modules/terser": { - "version": "5.26.0", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -11509,8 +13054,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -11543,8 +13089,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "randombytes": "^2.1.0" @@ -11552,8 +13099,9 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11565,8 +13113,9 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11574,8 +13123,9 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11593,8 +13143,9 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11604,18 +13155,21 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/timers-browserify": { "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, - "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -11625,8 +13179,9 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -11636,16 +13191,18 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -11655,16 +13212,18 @@ }, "node_modules/tr46/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ts-api-utils": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.13.0" }, @@ -11674,25 +13233,29 @@ }, "node_modules/tslib": { "version": "2.6.2", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsscmp": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.x" } }, "node_modules/tty-browserify": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -11702,8 +13265,9 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -11713,16 +13277,18 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -11732,8 +13298,9 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -11744,7 +13311,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -11756,7 +13324,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -11772,7 +13341,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -11789,7 +13359,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -11801,8 +13372,9 @@ }, "node_modules/typescript": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11813,47 +13385,54 @@ }, "node_modules/typical": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uint8-util": { "version": "2.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", + "integrity": "sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA==", "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "node_modules/uint8arraylist": { "version": "2.4.8", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", "dependencies": { "uint8arrays": "^5.0.1" } }, "node_modules/uint8arraylist/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { "version": "5.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/uint8arrays": { "version": "4.0.10", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", "dependencies": { "multiformats": "^12.0.1" } }, "node_modules/uint8arrays/node_modules/multiformats": { "version": "12.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -11861,7 +13440,8 @@ }, "node_modules/ulidx": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ulidx/-/ulidx-2.1.0.tgz", + "integrity": "sha512-DlMi97oP9HASI3kLCjBlOhAG1SoisUrEqC2PJ7itiFbq9q5Zo0JejupXeu2Gke99W62epNzA4MFNToNiq8A5LA==", "dependencies": { "layerr": "^2.0.1" }, @@ -11871,7 +13451,8 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -11884,8 +13465,9 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -11893,6 +13475,8 @@ }, "node_modules/unbzip2-stream/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -11908,7 +13492,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11916,26 +13499,32 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -11951,7 +13540,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "peer": true, "dependencies": { "escalade": "^3.1.1", @@ -11966,31 +13554,40 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/url": { "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" } }, + "node_modules/utf8-codec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utf8-codec/-/utf8-codec-1.0.0.tgz", + "integrity": "sha512-S/QSLezp3qvG4ld5PUfXiH7mCFxLKjSVZRFkB3DOjgwHuJPFDkInAXc/anf7BAbHt/D38ozDzL+QMZ6/7gsI6w==" + }, "node_modules/util": { "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -12001,27 +13598,31 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -12033,8 +13634,9 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -12042,8 +13644,9 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, - "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -12053,25 +13656,29 @@ }, "node_modules/varint": { "version": "6.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vm-browserify": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "node_modules/watchpack": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -12083,34 +13690,37 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { - "version": "5.89.0", + "version": "5.90.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.0.tgz", + "integrity": "sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", + "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", @@ -12124,7 +13734,7 @@ "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -12146,8 +13756,9 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -12155,8 +13766,9 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -12168,8 +13780,9 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -12177,14 +13790,16 @@ }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/whatwg-url": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -12195,8 +13810,9 @@ }, "node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -12209,7 +13825,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -12223,7 +13840,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", @@ -12240,28 +13858,32 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrapjs": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", + "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/workerpool": { "version": "6.2.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -12277,8 +13899,9 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12293,8 +13916,9 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12307,8 +13931,9 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12318,18 +13943,21 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12341,8 +13969,9 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12352,8 +13981,9 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12363,8 +13993,9 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12377,13 +14008,15 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -12402,38 +14035,44 @@ }, "node_modules/xml": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true }, "node_modules/xsalsa20": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -12449,16 +14088,18 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -12471,13 +14112,15 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12489,8 +14132,9 @@ }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -12498,16 +14142,18 @@ }, "node_modules/ylru": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -12517,7 +14163,8 @@ }, "node_modules/z32": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/z32/-/z32-1.0.1.tgz", + "integrity": "sha512-Uytfqf6VEVchHKZDw0NRdCViOARHP84uzvOw0CXCMLOwhgHZUL9XibpEPLLQN10mCVLxOlGCQWbkV7km7yNYcw==", "dependencies": { "b4a": "^1.5.3" } @@ -12540,6 +14187,7 @@ "@playwright/test": "1.40.1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", + "@types/dns-packet": "5.6.4", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@types/readable-stream": "4.0.6", @@ -12568,14 +14216,16 @@ }, "packages/agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -12585,7 +14235,8 @@ }, "packages/agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -12595,8 +14246,9 @@ }, "packages/agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -12622,8 +14274,9 @@ }, "packages/agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -12634,8 +14287,9 @@ }, "packages/agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -12660,7 +14314,8 @@ }, "packages/agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -12673,7 +14328,8 @@ }, "packages/agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -12684,7 +14340,8 @@ }, "packages/agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -12703,8 +14360,9 @@ }, "packages/agent/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12718,8 +14376,9 @@ }, "packages/agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12732,8 +14391,9 @@ }, "packages/agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12741,8 +14401,9 @@ }, "packages/agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12756,8 +14417,9 @@ }, "packages/agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12767,13 +14429,15 @@ }, "packages/agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -12783,8 +14447,9 @@ }, "packages/agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -12836,8 +14501,9 @@ }, "packages/agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -12847,21 +14513,24 @@ }, "packages/agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12871,8 +14540,9 @@ }, "packages/agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12930,14 +14600,16 @@ }, "packages/api/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/api/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -12947,7 +14619,8 @@ }, "packages/api/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -12957,8 +14630,9 @@ }, "packages/api/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -12984,8 +14658,9 @@ }, "packages/api/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -12996,8 +14671,9 @@ }, "packages/api/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -13022,7 +14698,8 @@ }, "packages/api/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -13035,7 +14712,8 @@ }, "packages/api/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -13046,7 +14724,8 @@ }, "packages/api/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -13065,8 +14744,9 @@ }, "packages/api/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13080,8 +14760,9 @@ }, "packages/api/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13094,8 +14775,9 @@ }, "packages/api/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13103,8 +14785,9 @@ }, "packages/api/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13118,8 +14801,9 @@ }, "packages/api/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13129,13 +14813,15 @@ }, "packages/api/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/api/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13145,8 +14831,9 @@ }, "packages/api/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13198,8 +14885,9 @@ }, "packages/api/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -13209,21 +14897,24 @@ }, "packages/api/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/api/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/api/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13233,8 +14924,9 @@ }, "packages/api/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13280,8 +14972,9 @@ }, "packages/common/node_modules/@types/readable-stream": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.9.tgz", + "integrity": "sha512-4cwuvrmNF96M4Nrx0Eep37RwPB1Mth+nCSezsGRv5+PsFyRvDdLd0pil6gVLcWD/bh69INNdwZ98dJwfHpLohA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -13289,8 +14982,9 @@ }, "packages/common/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -13316,8 +15010,9 @@ }, "packages/common/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -13328,8 +15023,9 @@ }, "packages/common/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -13354,8 +15050,9 @@ }, "packages/common/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13369,8 +15066,9 @@ }, "packages/common/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13383,8 +15081,9 @@ }, "packages/common/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13392,8 +15091,9 @@ }, "packages/common/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13407,8 +15107,9 @@ }, "packages/common/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13418,13 +15119,15 @@ }, "packages/common/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/common/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13434,8 +15137,9 @@ }, "packages/common/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13487,8 +15191,9 @@ }, "packages/common/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -13498,21 +15203,24 @@ }, "packages/common/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/common/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/common/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13522,8 +15230,9 @@ }, "packages/common/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13569,14 +15278,16 @@ }, "packages/credentials/node_modules/@noble/ciphers": { "version": "0.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz", + "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@noble/curves": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -13586,7 +15297,8 @@ }, "packages/credentials/node_modules/@noble/hashes": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "engines": { "node": ">= 16" }, @@ -13596,8 +15308,9 @@ }, "packages/credentials/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -13623,8 +15336,9 @@ }, "packages/credentials/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -13635,8 +15349,9 @@ }, "packages/credentials/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -13661,7 +15376,8 @@ }, "packages/credentials/node_modules/@web5/crypto": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.4.tgz", + "integrity": "sha512-heRUuV10mZ04dWp1C2mNF/EEPw8nnRe+yAXvmclJ+4XUHL6+mY7j+hjYOTKUAQzd4ouvbHrpJM0uYcUntA3AeA==", "dependencies": { "@noble/ciphers": "0.4.0", "@noble/curves": "1.2.0", @@ -13674,7 +15390,8 @@ }, "packages/credentials/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -13693,14 +15410,16 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -13710,7 +15429,8 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -13720,7 +15440,8 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -13733,7 +15454,8 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -13744,8 +15466,9 @@ }, "packages/credentials/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13759,8 +15482,9 @@ }, "packages/credentials/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13773,8 +15497,9 @@ }, "packages/credentials/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13782,8 +15507,9 @@ }, "packages/credentials/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13797,8 +15523,9 @@ }, "packages/credentials/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13808,13 +15535,15 @@ }, "packages/credentials/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/credentials/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13824,8 +15553,9 @@ }, "packages/credentials/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13877,8 +15607,9 @@ }, "packages/credentials/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -13888,21 +15619,24 @@ }, "packages/credentials/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/credentials/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/credentials/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13912,8 +15646,9 @@ }, "packages/credentials/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13999,8 +15734,9 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14026,8 +15762,9 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14038,8 +15775,9 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14064,8 +15802,9 @@ }, "packages/crypto-aws-kms/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14079,8 +15818,9 @@ }, "packages/crypto-aws-kms/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14093,8 +15833,9 @@ }, "packages/crypto-aws-kms/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14102,8 +15843,9 @@ }, "packages/crypto-aws-kms/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14117,8 +15859,9 @@ }, "packages/crypto-aws-kms/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14128,13 +15871,15 @@ }, "packages/crypto-aws-kms/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/crypto-aws-kms/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14144,8 +15889,9 @@ }, "packages/crypto-aws-kms/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14197,8 +15943,9 @@ }, "packages/crypto-aws-kms/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14208,21 +15955,24 @@ }, "packages/crypto-aws-kms/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto-aws-kms/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/crypto-aws-kms/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14232,8 +15982,9 @@ }, "packages/crypto-aws-kms/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14243,8 +15994,9 @@ }, "packages/crypto/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14270,8 +16022,9 @@ }, "packages/crypto/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14282,8 +16035,9 @@ }, "packages/crypto/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14308,8 +16062,9 @@ }, "packages/crypto/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14323,8 +16078,9 @@ }, "packages/crypto/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14337,8 +16093,9 @@ }, "packages/crypto/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14346,8 +16103,9 @@ }, "packages/crypto/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14361,8 +16119,9 @@ }, "packages/crypto/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14372,13 +16131,15 @@ }, "packages/crypto/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/crypto/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14388,8 +16149,9 @@ }, "packages/crypto/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14441,8 +16203,9 @@ }, "packages/crypto/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14452,21 +16215,24 @@ }, "packages/crypto/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/crypto/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14476,8 +16242,9 @@ }, "packages/crypto/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14492,21 +16259,18 @@ "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", - "@types/bencode": "2.0.4", + "@dnsquery/dns-packet": "6.1.1", "@web5/common": "0.2.2", "@web5/crypto": "0.3.0", "bencode": "4.0.0", - "dns-packet": "5.6.1", "level": "8.0.0", - "ms": "2.1.3", - "pkarr": "1.1.1", - "z32": "1.0.1" + "ms": "2.1.3" }, "devDependencies": { "@playwright/test": "1.40.1", + "@types/bencode": "2.0.4", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", - "@types/dns-packet": "^5.6.1", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@types/sinon": "17.0.2", @@ -14534,8 +16298,9 @@ }, "packages/dids/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14561,8 +16326,9 @@ }, "packages/dids/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14573,8 +16339,9 @@ }, "packages/dids/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14599,8 +16366,9 @@ }, "packages/dids/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14614,8 +16382,9 @@ }, "packages/dids/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14626,21 +16395,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "packages/dids/node_modules/bencode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", - "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", - "dependencies": { - "uint8-util": "^2.2.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, "packages/dids/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14648,8 +16407,9 @@ }, "packages/dids/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14663,8 +16423,9 @@ }, "packages/dids/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14674,13 +16435,15 @@ }, "packages/dids/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/dids/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14690,8 +16453,9 @@ }, "packages/dids/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14743,8 +16507,9 @@ }, "packages/dids/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14754,21 +16519,24 @@ }, "packages/dids/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/dids/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/dids/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14778,8 +16546,9 @@ }, "packages/dids/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14827,14 +16596,16 @@ }, "packages/identity-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/identity-agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -14844,7 +16615,8 @@ }, "packages/identity-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -14854,8 +16626,9 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14881,8 +16654,9 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14893,8 +16667,9 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14919,7 +16694,8 @@ }, "packages/identity-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -14932,7 +16708,8 @@ }, "packages/identity-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -14943,7 +16720,8 @@ }, "packages/identity-agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -14962,8 +16740,9 @@ }, "packages/identity-agent/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14977,8 +16756,9 @@ }, "packages/identity-agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14991,8 +16771,9 @@ }, "packages/identity-agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15000,8 +16781,9 @@ }, "packages/identity-agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15015,8 +16797,9 @@ }, "packages/identity-agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15026,13 +16809,15 @@ }, "packages/identity-agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/identity-agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15042,8 +16827,9 @@ }, "packages/identity-agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15095,8 +16881,9 @@ }, "packages/identity-agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15106,21 +16893,24 @@ }, "packages/identity-agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/identity-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/identity-agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15130,8 +16920,9 @@ }, "packages/identity-agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15178,14 +16969,16 @@ }, "packages/proxy-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/proxy-agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -15195,7 +16988,8 @@ }, "packages/proxy-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -15205,8 +16999,9 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15232,8 +17027,9 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15244,8 +17040,9 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15270,7 +17067,8 @@ }, "packages/proxy-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -15283,7 +17081,8 @@ }, "packages/proxy-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -15294,7 +17093,8 @@ }, "packages/proxy-agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -15313,8 +17113,9 @@ }, "packages/proxy-agent/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15328,8 +17129,9 @@ }, "packages/proxy-agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15342,8 +17144,9 @@ }, "packages/proxy-agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15351,8 +17154,9 @@ }, "packages/proxy-agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15366,8 +17170,9 @@ }, "packages/proxy-agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15377,13 +17182,15 @@ }, "packages/proxy-agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/proxy-agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15393,8 +17200,9 @@ }, "packages/proxy-agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15446,8 +17254,9 @@ }, "packages/proxy-agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15457,21 +17266,24 @@ }, "packages/proxy-agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/proxy-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/proxy-agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15481,8 +17293,9 @@ }, "packages/proxy-agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15529,14 +17342,16 @@ }, "packages/user-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/user-agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -15546,7 +17361,8 @@ }, "packages/user-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -15556,8 +17372,9 @@ }, "packages/user-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15583,8 +17400,9 @@ }, "packages/user-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15595,8 +17413,9 @@ }, "packages/user-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15621,7 +17440,8 @@ }, "packages/user-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -15634,7 +17454,8 @@ }, "packages/user-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -15645,7 +17466,8 @@ }, "packages/user-agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -15664,8 +17486,9 @@ }, "packages/user-agent/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15679,8 +17502,9 @@ }, "packages/user-agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15693,8 +17517,9 @@ }, "packages/user-agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15702,8 +17527,9 @@ }, "packages/user-agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15717,8 +17543,9 @@ }, "packages/user-agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15728,13 +17555,15 @@ }, "packages/user-agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/user-agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15744,8 +17573,9 @@ }, "packages/user-agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15797,8 +17627,9 @@ }, "packages/user-agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15808,21 +17639,24 @@ }, "packages/user-agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/user-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/user-agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15832,8 +17666,9 @@ }, "packages/user-agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, diff --git a/packages/agent/package.json b/packages/agent/package.json index 3eabe1baa..de2308ce4 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -81,6 +81,7 @@ "@playwright/test": "1.40.1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", + "@types/dns-packet": "5.6.4", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@types/readable-stream": "4.0.6", diff --git a/packages/dids/package.json b/packages/dids/package.json index fbe1e8d55..1dcbc2ad3 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -77,21 +77,18 @@ "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", - "@types/bencode": "2.0.4", + "@dnsquery/dns-packet": "6.1.1", "@web5/common": "0.2.2", "@web5/crypto": "0.3.0", "bencode": "4.0.0", - "dns-packet": "5.6.1", "level": "8.0.0", - "ms": "2.1.3", - "pkarr": "1.1.1", - "z32": "1.0.1" + "ms": "2.1.3" }, "devDependencies": { "@playwright/test": "1.40.1", + "@types/bencode": "2.0.4", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", - "@types/dns-packet": "^5.6.1", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@types/sinon": "17.0.2", diff --git a/packages/dids/src/did-error.ts b/packages/dids/src/did-error.ts index 1e3a7c322..08b46ad08 100644 --- a/packages/dids/src/did-error.ts +++ b/packages/dids/src/did-error.ts @@ -49,6 +49,9 @@ export enum DidErrorCode { /** An invalid public key type was detected during a DID operation. */ InvalidPublicKeyType = 'invalidPublicKeyType', + /** Verification of a signature failed during a DID operation. */ + InvalidSignature = 'invalidSignature', + /** The DID resolver was unable to find the DID document resulting from the resolution request. */ NotFound = 'notFound', diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index a620e538e..12305cebe 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -1,18 +1,40 @@ -import type { Packet, TxtAnswer } from 'dns-packet'; -import type { Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams, Signer } from '@web5/crypto'; +import type { Packet, TxtAnswer, TxtData } from '@dnsquery/dns-packet'; +import type { + Jwk, + Signer, + KeyIdentifier, + KmsExportKeyParams, + KmsImportKeyParams, + KeyImporterExporter, + AsymmetricKeyConverter, +} from '@web5/crypto'; import bencode from 'bencode'; import { Convert } from '@web5/common'; -import dns, { AUTHORITATIVE_ANSWER } from 'dns-packet'; import { CryptoApi, Ed25519, LocalKmsCrypto, P256, Secp256k1, computeJwkThumbprint } from '@web5/crypto'; +import { AUTHORITATIVE_ANSWER, decode as dnsPacketDecode, encode as dnsPacketEncode } from '@dnsquery/dns-packet'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; -import { DidVerificationRelationship, type DidDocument, type DidResolutionOptions, type DidResolutionResult, type DidService, type DidVerificationMethod } from '../types/did-core.js'; +import type { + DidService, + DidDocument, + DidResolutionResult, + DidResolutionOptions, + DidVerificationMethod, +} from '../types/did-core.js'; import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; -import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; import { DidError, DidErrorCode } from '../did-error.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; +import { DidVerificationRelationship } from '../types/did-core.js'; + +interface Bep44Message { + k: Uint8Array; + seq: number; + sig: Uint8Array; + v: Uint8Array; +} /** * Options for creating a Decentralized Identifier (DID) using the DID DHT method. @@ -68,7 +90,7 @@ export interface DidDhtCreateOptions extends DidCreateOptions { * * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. */ - didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + types?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; /** * Optional. Determines whether the created DID should be published to the DHT network. @@ -202,13 +224,13 @@ const VALUE_SEPARATOR = ','; * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. */ export enum DidDhtRegisteredDidType { - Discoverable = 0, - Organization = 1, - Government = 2, - Corporation = 3, - LocalBusiness = 4, - SoftwarePackage = 5, - WebApp = 6, + Discoverable = 0, + Organization = 1, + Government = 2, + Corporation = 3, + LocalBusiness = 4, + SoftwarePackage = 5, + WebApp = 6, FinancialInstitution = 7 } @@ -222,19 +244,19 @@ export enum DidDhtRegisteredDidType { * * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}. */ -export const DidDhtRegisteredKeyType: Record = { - Ed25519 : 0, - secp256k1 : 1, - secp256r1 : 2 -}; - -export const DidDhtVerificationRelationship: Record = { - authentication : 'auth', - assertionMethod : 'asm', - capabilityDelegation : 'del', - capabilityInvocation : 'inv', - keyAgreement : 'agm' -}; +export enum DidDhtRegisteredKeyType { + Ed25519 = 0, + secp256k1 = 1, + secp256r1 = 2 +} + +export enum DidDhtVerificationRelationship { + authentication = 'auth', + assertionMethod = 'asm', + capabilityDelegation = 'del', + capabilityInvocation = 'inv', + keyAgreement = 'agm' +} /** * Private helper that maps algorithm identifiers to their corresponding DID DHT @@ -266,16 +288,16 @@ export class DidDht extends DidMethod { // Check 1: Validate that the algorithm for any given verification method is supported by the // DID DHT specification. if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) { - throw new Error('DidDht: One or more verification method algorithms are not supported'); + throw new Error('One or more verification method algorithms are not supported'); } // Check 2: Validate that the required properties for any given services are present. if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) { - throw new Error('DidDht: One or more services are missing required properties'); + throw new Error('One or more services are missing required properties'); } // Generate random key material for the Identity Key and any additional verification methods. - const keySet = await DidDht.generateKeySet({ + const keySet = await DidDht.generateKeys({ keyManager, verificationMethods: options.verificationMethods ?? [] }); @@ -298,18 +320,23 @@ export class DidDht extends DidMethod { keyManager: CryptoApi; }): Promise { // Resolve the DID URI to a DID Document. - const { didDocument } = await DidDht.resolve(didUri); + const { didDocument, didResolutionMetadata } = await DidDht.resolve(didUri); + + // If the given DID isn't "did:dht", throw an error. + if (didResolutionMetadata.error === DidErrorCode.MethodNotSupported) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`); + } // Verify the DID Resolution Result includes a DID document containing verification methods. if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { - throw new Error(`${this.name}: DID document for '${didUri}' is missing verification methods`); + throw new Error(`DID document for '${didUri}' is missing verification methods`); } // Validate that the key material for every verification method in the DID document is present // in the provided key manager. for (let vm of didDocument.verificationMethod) { if (!vm.publicKeyJwk) { - throw new Error(`${this.name}: Verification method '${vm.id}' does not contain a public key in JWK format`); + throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); } // Compute the key URI of the verification method's public key. @@ -341,15 +368,15 @@ export class DidDht extends DidMethod { options?: DidDhtCreateOptions; } & DidKeySet): Promise { if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { - throw new Error(`${this.name}: At least one verification method is required but 0 were given`); + throw new Error(`At least one verification method is required but 0 were given`); } if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { - throw new Error(`${this.name}: Given verification methods are missing an Identity Key`); + throw new Error(`Given verification methods are missing an Identity Key`); } if (!verificationMethods?.some(vm => vm.privateKeyJwk && vm.publicKeyJwk)) { - throw new Error(`${this.name}: All verification methods must contain a public and private key in JWK format`); + throw new Error(`All verification methods must contain a public and private key in JWK format`); } // Import the private key material for every verification method into the key manager. @@ -377,7 +404,7 @@ export class DidDht extends DidMethod { const parsedDid = DidUri.parse(didDocument.id); if (parsedDid && parsedDid.method !== this.methodName) { - throw new Error(`DidDht: Method not supported: ${parsedDid.method}`); + throw new Error(`Method not supported: ${parsedDid.method}`); } const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id.includes(methodId)); @@ -395,103 +422,36 @@ export class DidDht extends DidMethod { } public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise { - // Attempt to parse the DID URI. - const parsedDid = DidUri.parse(didUri); - - // Attempt to decode the z-base-32-encoded identifier. - let identityKey: Jwk | undefined; - try { - identityKey = await DidDht.decodeIdentifier({ didUri }); - } catch { /* Consume the error so that a DID resolution error can be returned later. */ } - - // If parsing or decoding failed, the DID is invalid. - if (!parsedDid || !identityKey) { - return { - ...EMPTY_DID_RESOLUTION_RESULT, - didResolutionMetadata: { error: 'invalidDid' } - }; - } - - // If the DID method is not "dht", return an error. - if (parsedDid.method !== DidDht.methodName) { - return { - ...EMPTY_DID_RESOLUTION_RESULT, - didResolutionMetadata: { error: 'methodNotSupported' } - }; - } - // Use the given Pkarr relay or the default. const relay = options?.pkarrRelay ?? DEFAULT_PKARR_RELAY; try { - // Attempt to retrieve the DID document from the DHT network. - const didDocument = await DidDhtDocument.get({ didUri, relay }); + // Attempt to decode the z-base-32-encoded identifier. + await DidDhtUtils.identifierToIdentityKey({ didUri }); + + // Attempt to retrieve the DID document and metadata from the DHT network. + const { didDocument, didMetadata } = await DidDhtDocument.get({ didUri, relay }); // If the DID document was retrieved successfully, return it. return { ...EMPTY_DID_RESOLUTION_RESULT, - didDocument + didDocument, + ...didMetadata && { didDocumentMetadata: didMetadata } }; - } catch (error: any) { - // If the DID document could not be retrieved, return an error. + // Rethrow any unexpected errors that are not a `DidError`. + if (!(error instanceof DidError)) throw new Error(error); + + // Return a DID Resolution Result with the appropriate error code. return { ...EMPTY_DID_RESOLUTION_RESULT, - didResolutionMetadata: { error: 'notFound' } + didResolutionMetadata: { + error: error.code, + ...error.message && { errorMessage: error.message } + } }; } - - } - - private static async decodeIdentifier({ didUri }: { - didUri: string - }): Promise { - // Parse the DID URI. - const parsedDid = DidUri.parse(didUri); - - // Verify that the DID URI is valid. - if (!parsedDid) { - throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); - } - - // Decode the method-specific identifier from z-base-32 to a byte array. - let identityKeyBytes: Uint8Array | undefined; - try { - identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); - } catch { /* Capture error */ } - - // Verify that the method-specific identifier was decoded successfully. - if (!identityKeyBytes || identityKeyBytes.length !== 32) { - throw new DidError(DidErrorCode.InvalidDid, `Failed to decode method-specific identifier`); - } - - // Convert the byte array to a JWK. - const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); - - return identityKey; - } - - /** - * Encodes a DID DHT Identity Key into a DID identifier. - * - * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with - * `did:dht:` to form the DID identifier. - * - * @param params The parameters to use when computing the DID identifier. - * @param params.identityKey The Identity Key from which the DID identifier is computed. - * @returns A promise that resolves to a string containing the DID identifier. - */ - private static async encodeIdentifier({ identityKey }: { - identityKey: Jwk - }): Promise { - // Convert the key from JWK format to a byte array. - const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); - - // Encode the byte array as a z-base-32 string. - const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z(); - - return `did:${DidDht.methodName}:${identifier}`; } private static async fromPublicKeys({ @@ -505,11 +465,11 @@ export class DidDht extends DidMethod { // Validate that the given verification methods contain an Identity Key. const identityKey = verificationMethods?.find(vm => vm.id?.split('#').pop() === '0')?.publicKeyJwk; if (!identityKey) { - throw new Error('DidDht: Identity Key not found in verification methods'); + throw new Error('Identity Key not found in verification methods'); } // Compute the DID identifier from the Identity Key. - const id = await DidDht.encodeIdentifier({ identityKey }); + const id = await DidDhtUtils.identityKeyToIdentifier({ identityKey }); // Begin constructing the DID Document. const didDocument: DidDocument = { @@ -521,7 +481,7 @@ export class DidDht extends DidMethod { // Add verification methods to the DID document. for (const vm of verificationMethods) { if (!vm.publicKeyJwk) { - throw new Error(`DidJwk: Verification method '${vm.id}' does not contain a public key in JWK format`); + throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); } // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID. @@ -557,7 +517,7 @@ export class DidDht extends DidMethod { // Define DID Metadata. const metadata: DidMetadata = { - ...options.didTypes && { didTypes: options.didTypes } + ...options.types && { types: options.types } }; // Define a function that returns a signer for the DID. @@ -570,7 +530,7 @@ export class DidDht extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: id }; } - private static async generateKeySet({ + private static async generateKeys({ keyManager, verificationMethods }: { @@ -578,8 +538,8 @@ export class DidDht extends DidMethod { verificationMethods?: DidCreateVerificationMethod[]; }): Promise { let keySet: DidKeySet = {}; - // If `verificationMethodKeys` was not provided, create one. - if (!verificationMethods) verificationMethods = []; + // If `verificationMethodKeys` was not provided, initialize it as an empty array. + verificationMethods ??= []; // If the given verification methods do not contain an Identity Key, add one. if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { @@ -614,34 +574,24 @@ export class DidDht extends DidMethod { } } - - -interface Bep44Message { - k: Uint8Array; - seq: number; - sig: Uint8Array; - v: Uint8Array; -} - class DidDhtDocument { public static async get({ didUri, relay }: { didUri: string; relay: string; - }): Promise { + }): Promise<{ didDocument: DidDocument, didMetadata: DidMetadata }> { // Decode the z-base-32 DID identifier to public key as a byte array. - const publicKeyBytes = DidDhtDocument.identifierToPublicKeyBytes({ didUri }); + const publicKeyBytes = DidDhtUtils.identifierToIdentityKeyBytes({ didUri }); // Retrieve the signed BEP44 message from a Pkarr relay. const bep44Message = await DidDhtDocument.pkarrGet({ relay, publicKeyBytes }); - // // Fetch the DNS packet from the Pkarr relay. - // const response = await fetch(url); - // const dnsPacket = dns.decode(await response.arrayBuffer()); + // Verify the signature of the BEP44 message and parse the value to a DNS packet. + const dnsPacket = await DidDhtUtils.parseBep44GetMessage({ bep44Message }); - // // Convert the DNS packet to a DID document. - // const didDocument = await DidDhtDocument.fromDnsPacket({ didUri, dnsPacket }); + // Convert the DNS packet to a DID document and DID metadata. + const { didDocument, didMetadata } = await DidDhtDocument.fromDnsPacket({ didUri, dnsPacket }); - return null as any; + return { didDocument, didMetadata }; } /** @@ -656,16 +606,16 @@ class DidDhtDocument { did: Did; relay: string; }): Promise { - // Convert the DID document and types (if any) to a DNS packet. + // Convert the DID document and DID metadata (such as DID types) to a DNS packet. const dnsPacket = await DidDhtDocument.toDnsPacket({ didDocument : did.didDocument, - didTypes : did.metadata?.didTypes + didMetadata : did.metadata }); // Create a signed BEP44 put message from the DNS packet. - const bep44Message = await DidDhtDocument.createBep44PutMessage({ + const bep44Message = await DidDhtUtils.createBep44PutMessage({ dnsPacket, - publicKeyBytes : DidDhtDocument.identifierToPublicKeyBytes({ didUri: did.uri }), + publicKeyBytes : DidDhtUtils.identifierToIdentityKeyBytes({ didUri: did.uri }), signer : await did.getSigner() }); @@ -686,11 +636,30 @@ class DidDhtDocument { const url = new URL(identifier, relay).href; // Transmit the Get request to the Pkarr relay and get the response. - const response = await fetch(url); + let response: Response; + try { + response = await fetch(url, { method: 'GET' }); + + if (!response.ok) { + throw new DidError(DidErrorCode.NotFound, `Pkarr record not found for: ${identifier}`); + } + + } catch (error: any) { + if (error instanceof DidError) throw error; + throw new DidError(DidErrorCode.InternalError, `Failed to fetch Pkarr record: ${error.message}`); + } // Read the Fetch Response stream into a byte array. const messageBytes = await response.arrayBuffer(); + if (messageBytes.byteLength < 72) { + throw new DidError(DidErrorCode.InvalidDidDocumentLength, `Pkarr response must be at least 72 bytes but got: ${messageBytes.byteLength}`); + } + + if (messageBytes.byteLength > 1072) { + throw new DidError(DidErrorCode.InvalidDidDocumentLength, `Pkarr response exceeds 1000 byte limit: ${messageBytes.byteLength}`); + } + // Decode the BEP44 message from the byte array. const bep44Message: Bep44Message = { k : publicKeyBytes, @@ -699,11 +668,7 @@ class DidDhtDocument { v : new Uint8Array(messageBytes, 72) }; - // !TODO need to check that length is not less than 72 bytes, check that length - // is not over 1072 bytes - // and verify the signature - - return null as any; + return bep44Message; } private static async pkarrPut({ relay, bep44Message }: { @@ -723,136 +688,183 @@ class DidDhtDocument { body.set(bep44Message.v, bep44Message.sig.length + 8); // Transmit the Put request to the Pkarr relay and get the response. - const response = await fetch(url, { - method : 'PUT', - headers : { 'Content-Type': 'application/octet-stream' }, - body - }); + let response: Response; + try { + response = await fetch(url, { + method : 'PUT', + headers : { 'Content-Type': 'application/octet-stream' }, + body + }); + + } catch (error: any) { + throw new DidError(DidErrorCode.InternalError, `Failed to put Pkarr record: ${error.message}`); + } // Return `true` if the DHT request was successful, otherwise return `false`. return response.ok; } /** + * Converts a DNS packet to a DID document according to the DID DHT specification. * - * @param params - The parameters to use when creating the BEP44 put message - * @param params.dnsPacket - The DNS packet to encode in the BEP44 message. - * @param params.publicKeyBytes - The public key bytes of the Identity Key. - * @param params.signer - Signer that can sign and verify data using the Identity Key. - * @returns A promise that resolves to a BEP44 put message. + * @see {@link https://did-dht.com/#dids-as-dns-records | DID DHT Specification, § DIDs as DNS Records} + * + * @param params - The parameters to use when converting a DNS packet to a DID document. + * @param params.didUri - The DID URI of the DID document. + * @param params.dnsPacket - The DNS packet to convert to a DID document. + * @returns A promise that resolves to a DID document. */ - private static async createBep44PutMessage({ dnsPacket, publicKeyBytes, signer }: { - dnsPacket: Packet; - publicKeyBytes: Uint8Array; - signer: Signer; - }): Promise { - // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the - // current time in seconds since Unix epoch as a simple solution. Higher precision is not - // recommended since DID DHT documents are not expected to change frequently and there are - // small differences in system clocks that can cause issues if multiple clients are publishing - // updates to the same DID document. - const sequenceNumber = Math.ceil(Date.now() / 1000); - - // Encode the DNS packet into a buffer containing a UDP payload. - const encodedDnsPacket = dns.encode(dnsPacket); - - // Encode the sequence and DNS buffer to bencode format. - const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1); - - if (bencodedData.length > 1000) { - throw new DidError(DidErrorCode.InvalidDidDocumentLength, `DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`); - } - - // Sign the BEP44 message. - const signature = await signer.sign({ data: bencodedData }); - - return { k: publicKeyBytes, seq: sequenceNumber, sig: signature, v: encodedDnsPacket }; - } - - private static identifierToPublicKeyBytes({ didUri }: { - didUri: string - }): Uint8Array { - // Parse the DID URI. - const parsedDid = DidUri.parse(didUri); - - // Verify that the DID URI is valid. - if (!(parsedDid && parsedDid.method === DidDht.methodName)) { - throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); - } - - // Decode the method-specific identifier from z-base-32 to a byte array. - let identityKeyBytes: Uint8Array | undefined; - try { - identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); - } catch { /* Capture error */ } - - if (!identityKeyBytes) { - throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`); - } - - if (identityKeyBytes.length !== 32) { - throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`); - } - - return identityKeyBytes; - } - - private static async fromDnsPacket({ didUri, dnsPacket }: { didUri: string; dnsPacket: Packet; - }): Promise { + }): Promise<{ didDocument: DidDocument, didMetadata: DidMetadata }> { // Begin constructing the DID Document. const didDocument: DidDocument = { id: didUri }; + const didMetadata: DidMetadata = {}; - const __ = dnsPacket; - return null as any; - } - - // private static async signDnsPacket({ dnsPacket, keyManager, identityKey }: { - // dnsPacket: Packet; - // keyManager: CryptoApi; - // identityKey: Jwk; - // }): Promise { - // const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); - // const origin = Convert.uint8Array(publicKeyBytes).toBase32Z(); - - // dnsPacket.answers = dnsPacket.answers?.map(answer => { - // answer.name = normalizeName(origin, answer.name); - // return answer; - // }); - - // // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the - // // current time in seconds since Unix epoch as a simple solution. Higher precision is not - // // recommended since DID DHT documents are not expected to change frequently and there are - // // small differences in system clocks that can cause issues if multiple clients are publishing - // // updates to the same DID document. - // const sequenceNumber = Math.ceil(Date.now() * 1000); - // // const sequenceNumber = Math.ceil(Date.now() / 1000); - - // const encodedDnsPacket = dns.encode(dnsPacket); - - // // Encode the DNS packet as a BEP44 message. - // const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1); + const idLookup = new Map(); - // // Get key URI of the Identity Key. - // const keyUri = await keyManager.getKeyUri({ key: identityKey }); + for (const answer of dnsPacket?.answers ?? []) { + // DID DHT properties are ONLY present in DNS TXT records. + if (answer.type !== 'TXT') continue; - // // Sign the BEP44 message. - // const signature = await keyManager.sign({ keyUri, data: bencodedData }); + // Get the DID DHT record identifier (e.g., k0, aka, did, etc.) from the DNS resource name. + const dnsRecordId = answer.name.split('.')[0].substring(1); + + switch (true) { + // Process an also known as record. + case dnsRecordId.startsWith('aka'): { + // Decode the DNS TXT record data value to a string. + const data = DidDhtUtils.parseTxtDataToString(answer.data); - // // - // const signedPacket = new Uint8Array(encodedDnsPacket.length + 72); - // signedPacket.set(signature, 0); - // new DataView(signedPacket.buffer).setBigUint64(signature.length, BigInt(sequenceNumber)); - // signedPacket.set(encodedDnsPacket, signature.length + 8); + // Add the 'alsoKnownAs' property to the DID document. + didDocument.alsoKnownAs = data.split(VALUE_SEPARATOR); + + break; + } + + // Process a controller record. + case dnsRecordId.startsWith('cnt'): { + // Decode the DNS TXT record data value to a string. + const data = DidDhtUtils.parseTxtDataToString(answer.data); + + // Add the 'controller' property to the DID document. + didDocument.controller = data.includes(VALUE_SEPARATOR) ? data.split(VALUE_SEPARATOR) : data; + + break; + } + + // Process verification methods. + case dnsRecordId.startsWith('k'): { + // Get the method ID fragment (id), key type (t), Base64URL-encoded public key (k), and + // optionally, controller (c) from the decoded TXT record data. + const { id, t, k, c } = DidDhtUtils.parseTxtDataToObject(answer.data); + + // Convert the public key from Base64URL format to a byte array. + const publicKeyBytes = Convert.base64Url(k).toUint8Array(); + + // Use the key type integer to look up the cryptographic curve name. + const namedCurve = DidDhtRegisteredKeyType[Number(t)]; + + // Convert the public key from a byte array to JWK format. + let publicKey = await DidDhtUtils.keyConverter(namedCurve).bytesToPublicKey({ publicKeyBytes }); + + // Initialize the `verificationMethod` array if it does not already exist. + didDocument.verificationMethod ??= []; + + // Prepend the DID URI to the ID fragment to form the full verification method ID. + const methodId = `${didUri}#${id}`; + + // Add the verification method to the DID document. + didDocument.verificationMethod.push({ + id : methodId, + type : 'JsonWebKey', + controller : c ?? didUri, + publicKeyJwk : publicKey, + }); + + // Add a mapping from the DNS record ID (e.g., 'k0', 'k1', etc.) to the verification + // method ID (e.g., 'did:dht:...#0', etc.). + idLookup.set(dnsRecordId, methodId); + + break; + } + + // Process services. + case dnsRecordId.startsWith('s'): { + // Get the service ID fragment (id), type (t), service endpoint (se), and optionally, + // other properties from the decoded TXT record data. + const { id, t, se, ...customProperties } = DidDhtUtils.parseTxtDataToObject(answer.data); + + // The service endpoint can either be a string or an array of strings. + const serviceEndpoint = se.includes(VALUE_SEPARATOR) ? se.split(VALUE_SEPARATOR) : se; + + // Initialize the `service` array if it does not already exist. + didDocument.service ??= []; + + didDocument.service.push({ + ...customProperties, + id : `${didUri}#${id}`, + type : t, + serviceEndpoint + }); + + break; + } + + // Process DID DHT types. + case dnsRecordId.startsWith('typ'): { + // Decode the DNS TXT record data value to an object. + const { id: types } = DidDhtUtils.parseTxtDataToObject(answer.data); + + // ! TODO: Figure out which one of these to support and delete the other. + // Map the DID DHT Registered DID Types from integers to names and add to DID metadata. + // didMetadata.types = types.split(VALUE_SEPARATOR).map(typeInteger => DidDhtRegisteredDidType[Number(typeInteger)]); + // Add the DID DHT Registered DID Types represented as numbers to DID metadata. + didMetadata.types = types.split(VALUE_SEPARATOR).map(typeInteger => Number(typeInteger)); + + break; + } + + // Process root record. + case dnsRecordId.startsWith('did'): { + // Helper function that maps verification relationship values to verification method IDs. + const recordIdsToMethodIds = (data: string): string[] => data + .split(VALUE_SEPARATOR) + .map(dnsRecordId => idLookup.get(dnsRecordId)) + .filter((id): id is string => typeof id === 'string'); + + // Decode the DNS TXT record data and destructure verification relationship properties. + const { auth, asm, del, inv, agm } = DidDhtUtils.parseTxtDataToObject(answer.data); + + // Add the verification relationships, if any, to the DID document. + if (auth) didDocument.authentication = recordIdsToMethodIds(auth); + if (asm) didDocument.assertionMethod = recordIdsToMethodIds(asm); + if (del) didDocument.capabilityDelegation = recordIdsToMethodIds(del); + if (inv) didDocument.capabilityInvocation = recordIdsToMethodIds(inv); + if (agm) didDocument.keyAgreement = recordIdsToMethodIds(agm); + + break; + } + } + } - // return signedPacket; - // } + return { didDocument, didMetadata }; + } - private static async toDnsPacket({ didDocument, didTypes }: { + /** + * Converts a DID document to a DNS packet according to the DID DHT specification. + * + * @see {@link https://did-dht.com/#dids-as-dns-records | DID DHT Specification, § DIDs as DNS Records} + * + * @param params - The parameters to use when converting a DID document to a DNS packet. + * @param params.didDocument - The DID document to convert to a DNS packet. + * @param params.didMetadata - The DID metadata to include in the DNS packet. + * @returns A promise that resolves to a DNS packet. + */ + private static async toDnsPacket({ didDocument, didMetadata }: { didDocument: DidDocument; - didTypes?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + didMetadata: DidMetadata; }): Promise { const dnsAnswerRecords: TxtAnswer[] = []; const idLookup = new Map(); @@ -892,18 +904,14 @@ class DidDhtDocument { const publicKey = vm.publicKeyJwk; if (!(publicKey?.crv && publicKey.crv in DidDhtRegisteredKeyType)) { - throw new Error(`DidDht: Verification method '${vm.id}' contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`); + throw new DidError(DidErrorCode.InvalidPublicKeyType, `Verification method '${vm.id}' contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`); } // Use the public key's `crv` property to get the DID DHT key type. - const keyType = DidDhtRegisteredKeyType[publicKey.crv]; + const keyType = DidDhtRegisteredKeyType[publicKey.crv as keyof typeof DidDhtRegisteredKeyType]; // Convert the public key from JWK format to a byte array. - let publicKeyBytes = publicKey.crv === 'Ed25519' - ? await Ed25519.publicKeyToBytes({ publicKey}) - : publicKey.crv === 'secp256k1' - ? await Secp256k1.publicKeyToBytes({ publicKey}) - : await P256.publicKeyToBytes({ publicKey }); + const publicKeyBytes = await DidDhtUtils.keyConverter(publicKey.crv).publicKeyToBytes({ publicKey }); // Convert the public key from a byte array to Base64URL format. const publicKeyBase64Url = Convert.uint8Array(publicKeyBytes).toBase64Url(); @@ -960,7 +968,8 @@ class DidDhtDocument { // If the relationship includes verification methods, add them to the root record. if (dnsRecordIds) { - rootRecord.push(`${DidDhtVerificationRelationship[relationship]}=${dnsRecordIds.join(VALUE_SEPARATOR)}`); + const recordName = DidDhtVerificationRelationship[relationship as keyof typeof DidDhtVerificationRelationship]; + rootRecord.push(`${recordName}=${dnsRecordIds.join(VALUE_SEPARATOR)}`); } }); @@ -970,12 +979,17 @@ class DidDhtDocument { } // If defined, add a DNS TXT record for each registered DID type. - if (didTypes?.length) { + if (didMetadata.types?.length) { + // DID types can be specified as either a string or a number, so we need to normalize the + // values to integers. + const types = didMetadata.types as (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + const typeIntegers = types.map(type => typeof type === 'string' ? DidDhtRegisteredDidType[type] : type); + dnsAnswerRecords.push({ type : 'TXT', name : '_typ._did.', ttl : DNS_RECORD_TTL, - data : `id=${didTypes.join(VALUE_SEPARATOR)}` + data : `id=${typeIntegers.join(VALUE_SEPARATOR)}` }); } @@ -1002,4 +1016,192 @@ class DidDhtDocument { return dnsPacket; } +} + +class DidDhtUtils { + /** + * + * @param params - The parameters to use when creating the BEP44 put message + * @param params.dnsPacket - The DNS packet to encode in the BEP44 message. + * @param params.publicKeyBytes - The public key bytes of the Identity Key. + * @param params.signer - Signer that can sign and verify data using the Identity Key. + * @returns A promise that resolves to a BEP44 put message. + */ + public static async createBep44PutMessage({ dnsPacket, publicKeyBytes, signer }: { + dnsPacket: Packet; + publicKeyBytes: Uint8Array; + signer: Signer; + }): Promise { + // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the + // current time in seconds since Unix epoch as a simple solution. Higher precision is not + // recommended since DID DHT documents are not expected to change frequently and there are + // small differences in system clocks that can cause issues if multiple clients are publishing + // updates to the same DID document. + const sequenceNumber = Math.ceil(Date.now() / 1000); + + // Encode the DNS packet into a byte array containing a UDP payload. + const encodedDnsPacket = dnsPacketEncode(dnsPacket); + + // Encode the sequence and DNS byte array to bencode format. + const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1); + + if (bencodedData.length > 1000) { + throw new DidError(DidErrorCode.InvalidDidDocumentLength, `DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`); + } + + // Sign the BEP44 message. + const signature = await signer.sign({ data: bencodedData }); + + return { k: publicKeyBytes, seq: sequenceNumber, sig: signature, v: encodedDnsPacket }; + } + + public static async identifierToIdentityKey({ didUri }: { + didUri: string + }): Promise { + // Parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // Verify that the DID URI is valid. + if (!parsedDid) { + throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); + } + + // Verify the DID method is supported. + if (parsedDid.method !== DidDht.methodName) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`); + } + + // Decode the method-specific identifier from z-base-32 to a byte array. + let identityKeyBytes: Uint8Array | undefined; + try { + identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); + } catch { /* Capture error */ } + + // Verify that the method-specific identifier was decoded successfully. + if (!identityKeyBytes || identityKeyBytes.length !== 32) { + throw new DidError(DidErrorCode.InvalidDid, `Failed to decode method-specific identifier`); + } + + // Convert the byte array to a JWK. + const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); + + return identityKey; + } + + /** + * Encodes a DID DHT Identity Key into a DID identifier. + * + * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with + * `did:dht:` to form the DID identifier. + * + * @param params The parameters to use when computing the DID identifier. + * @param params.identityKey The Identity Key from which the DID identifier is computed. + * @returns A promise that resolves to a string containing the DID identifier. + */ + public static async identityKeyToIdentifier({ identityKey }: { + identityKey: Jwk + }): Promise { + // Convert the key from JWK format to a byte array. + const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey }); + + // Encode the byte array as a z-base-32 string. + const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z(); + + return `did:${DidDht.methodName}:${identifier}`; + } + + public static identifierToIdentityKeyBytes({ didUri }: { + didUri: string + }): Uint8Array { + // Parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // Verify that the DID URI is valid. + if (!(parsedDid && parsedDid.method === DidDht.methodName)) { + throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); + } + + // Decode the method-specific identifier from z-base-32 to a byte array. + let identityKeyBytes: Uint8Array | undefined; + try { + identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); + } catch { /* Capture error */ } + + if (!identityKeyBytes) { + throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`); + } + + if (identityKeyBytes.length !== 32) { + throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`); + } + + return identityKeyBytes; + } + + public static keyConverter(curve: string): AsymmetricKeyConverter { + const converters: Record = { + 'Ed25519' : Ed25519, + 'secp256k1' : Secp256k1, + 'secp256r1' : P256 + }; + + const converter = converters[curve]; + + if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`); + + return converter; + } + + /** + * + * @param params - The parameters to use when verifying and parsing the BEP44 Get response message. + * @param params.bep44Message - The BEP44 message to verify and parse. + * @returns A promise that resolves to a DNS packet. + */ + public static async parseBep44GetMessage({ bep44Message }: { + bep44Message: Bep44Message; + }): Promise { + // Convert the public key byte array to JWK format. + const publicKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: bep44Message.k }); + + // Encode the sequence and DNS byte array to bencode format. + const bencodedData = bencode.encode({ seq: bep44Message.seq, v: bep44Message.v }).subarray(1, -1); + + // Verify the signature of the BEP44 message. + const isValid = await Ed25519.verify({ + key : publicKey, + signature : bep44Message.sig, + data : bencodedData + }); + + if (!isValid) { + throw new DidError(DidErrorCode.InvalidSignature, `Invalid signature for DHT BEP44 message`); + } + + return dnsPacketDecode(bep44Message.v); + } + + /** + * Helper function to decode and parse the data value of a DNS TXT record. + */ + public static parseTxtDataToObject(txtData: TxtData): Record { + return this.parseTxtDataToString(txtData).split(PROPERTY_SEPARATOR).reduce((acc, pair) => { + const [key, value] = pair.split('='); + acc[key] = value; + return acc; + }, {} as Record); + } + + // Helper function to convert TXT data property to a string value. + public static parseTxtDataToString(txtData: TxtData): string { + if (typeof txtData === 'string') { + return txtData; + } else if (txtData instanceof Uint8Array) { + return Convert.uint8Array(txtData).toString(); + } else if (Array.isArray(txtData)) { + return txtData.map(item => this.parseTxtDataToString(item)).join(''); + } else { + throw new DidError(DidErrorCode.InternalError, 'Pkarr returned DNS TXT record with invalid data type'); + } + } } \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 904348726..b67fcac13 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -1,14 +1,22 @@ -import type { CryptoApi, EnclosedSignParams, EnclosedVerifyParams, Jwk, Signer, InferKeyGeneratorAlgorithm, KeyImporterExporter, KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams } from '@web5/crypto'; +import type { + Jwk, + CryptoApi, + KeyIdentifier, + KmsExportKeyParams, + KmsImportKeyParams, + KeyImporterExporter, + InferKeyGeneratorAlgorithm, +} from '@web5/crypto'; import { Convert } from '@web5/common'; import { LocalKmsCrypto } from '@web5/crypto'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; -import { DidVerificationRelationship, type DidDocument, type DidResolutionOptions, type DidResolutionResult, type DidVerificationMethod } from '../types/did-core.js'; +import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; -import { getVerificationMethodByKey } from '../utils.js'; +import { DidError, DidErrorCode } from '../did-error.js'; import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; /** @@ -156,7 +164,7 @@ export class DidJwk extends DidMethod { options?: DidJwkCreateOptions; } = {}): Promise { if (options.algorithm && options.verificationMethods) { - throw new Error(`DidJwk: The 'algorithm' and 'verificationMethods' options are mutually exclusive`); + throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`); } // Default to Ed25519 key generation if an algorithm is not given. @@ -166,27 +174,11 @@ export class DidJwk extends DidMethod { const keyUri = await keyManager.generateKey({ algorithm }); const publicKey = await keyManager.getPublicKey({ keyUri }); - // Serialize the public key JWK to a UTF-8 string and encode to Base64URL format. - const base64UrlEncoded = Convert.object(publicKey).toBase64Url(); - - // Attach the prefix `did:jwk` to form the complete DID URI. - const didUri = `did:${DidJwk.methodName}:${base64UrlEncoded}`; - - // Expand the DID URI string to a DID didDocument. - const didResolutionResult = await DidJwk.resolve(didUri); - const didDocument = didResolutionResult.didDocument as DidDocument; - - // DID Metadata is initially empty for this DID method. - const metadata: DidMetadata = {}; - - // Define a function that returns a signer for the DID. - const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ - didDocument, - keyManager, - keyUri: params?.keyUri - }); + // Create the DID object from the generated key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidJwk.fromPublicKey({ keyManager, publicKey }); - return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + return did; } /** @@ -230,37 +222,24 @@ export class DidJwk extends DidMethod { keyManager?: CryptoApi & KeyImporterExporter; } & DidKeySet): Promise { if (!verificationMethods || verificationMethods.length !== 1) { - throw new Error(`DidJwk: Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); + throw new Error(`Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); } if (!(verificationMethods[0].privateKeyJwk && verificationMethods[0].publicKeyJwk)) { - throw new Error(`DidJwk: Verification method does not contain a public and private key in JWK format`); + throw new Error(`Verification method does not contain a public and private key in JWK format`); } // Store the private key in the key manager. await keyManager.importKey({ key: verificationMethods[0].privateKeyJwk }); - // Serialize the public key JWK to a UTF-8 string and encode to Base64URL format. - const base64UrlEncoded = Convert.object(verificationMethods[0].publicKeyJwk).toBase64Url(); - - // Attach the prefix `did:jwk` to form the complete DID URI. - const didUri = `did:${DidJwk.methodName}:${base64UrlEncoded}`; - - // Expand the DID URI string to a DID didDocument. - const didResolutionResult = await DidJwk.resolve(didUri); - const didDocument = didResolutionResult.didDocument as DidDocument; - - // DID Metadata is initially empty for this DID method. - const metadata: DidMetadata = {}; - - // Define a function that returns a signer for the DID. - const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ - didDocument, + // Create the DID object from the given key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidJwk.fromPublicKey({ keyManager, - keyUri: params?.keyUri + publicKey: verificationMethods[0].publicKeyJwk }); - return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + return did; } /** @@ -296,18 +275,23 @@ export class DidJwk extends DidMethod { keyManager: CryptoApi; }): Promise { // Resolve the DID URI to a DID Document. - const { didDocument } = await DidJwk.resolve(didUri); + const { didDocument, didResolutionMetadata } = await DidJwk.resolve(didUri); + + // If the given DID isn't "did:jwk", throw an error. + if (didResolutionMetadata.error === DidErrorCode.MethodNotSupported) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`); + } - // Verify the DID Resolution Result includes a DID document containing verification methods. + // Validate that the DID Resolution Result includes a DID document containing verification methods. if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { - throw new Error(`DidJwk: DID document for '${didUri}' is missing verification methods`); + throw new Error(`DID document for '${didUri}' is missing verification methods`); } // Validate that the key material for every verification method in the DID document is present // in the provided key manager. for (let vm of didDocument.verificationMethod) { if (!vm.publicKeyJwk) { - throw new Error(`DidJwk: Verification method '${vm.id}' does not contain a public key in JWK format`); + throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); } // Compute the key URI of the verification method's public key. @@ -351,7 +335,7 @@ export class DidJwk extends DidMethod { // Verify the DID method is supported. const parsedDid = DidUri.parse(didDocument.id); if (parsedDid && parsedDid.method !== this.methodName) { - throw new Error(`DidJwk: Method not supported: ${parsedDid.method}`); + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`); } // Attempt to find the verification method in the DID Document. @@ -441,4 +425,43 @@ export class DidJwk extends DidMethod { didDocument, }; } + + /** + * Instantiates a `Did` object for the `did:jwk` method from a given public key. + * + * @param params - The parameters for the operation. + * @param params.keyManager - A Key Management System (KMS) instance for managing keys and + * performing cryptographic operations. + * @param params.publicKey - The public key of the DID in JWK format. + * @returns A Promise resolving to a `Did` object representing the DID formed from the provided public key. + */ + private static async fromPublicKey({ + keyManager, + publicKey + }: { + keyManager: CryptoApi; + publicKey: Jwk; + }): Promise { + // Serialize the public key JWK to a UTF-8 string and encode to Base64URL format. + const base64UrlEncoded = Convert.object(publicKey).toBase64Url(); + + // Attach the prefix `did:jwk` to form the complete DID URI. + const didUri = `did:${DidJwk.methodName}:${base64UrlEncoded}`; + + // Expand the DID URI string to a DID didDocument. + const didResolutionResult = await DidJwk.resolve(didUri); + const didDocument = didResolutionResult.didDocument as DidDocument; + + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + } } \ No newline at end of file diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index 5a3a4f945..ca81a9af2 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -315,7 +315,7 @@ export class DidMethod { publicKey = await keyManager.getPublicKey({ keyUri }); // Verify the public key exists in the DID Document. if (!(await getVerificationMethodByKey({ didDocument, publicKeyJwk: publicKey }))) { - throw new Error(`DidJwk: Key referenced by '${keyUri}' is not present in the provided DID Document for '${didDocument.id}'`); + throw new Error(`Key referenced by '${keyUri}' is not present in the provided DID Document for '${didDocument.id}'`); } } else { @@ -324,7 +324,7 @@ export class DidMethod { // the DID method implementation. ({ publicKeyJwk: publicKey } = await this.getSigningMethod({ didDocument }) ?? {}); if (publicKey === undefined) { - throw new Error(`DidJwk: No verification methods found in the provided DID Document for '${didDocument.id}'`); + throw new Error(`No verification methods found in the provided DID Document for '${didDocument.id}'`); } // Compute the expected key URI of the signing key. keyUri = await keyManager.getKeyUri({ key: publicKey }); @@ -332,7 +332,7 @@ export class DidMethod { // Both the `keyUri` and `publicKey` must be known before returning a signer. if (!(keyUri && publicKey)) { - throw new Error(`DidJwk: Failed to determine the keys needed to create a signer`); + throw new Error(`Failed to determine the keys needed to create a signer`); } return { @@ -400,12 +400,12 @@ export class DidMethod { public static async toKeys({ did }: { did: Did }): Promise { // First, confirm that the DID's key manager supports exporting keys. if (!('exportKey' in did.keyManager && typeof did.keyManager.exportKey === 'function')) { - throw new Error(`${this.name}: The key manager of the given DID does not support exporting keys`); + throw new Error(`The key manager of the given DID does not support exporting keys`); } // Verify the DID document contains at least one verification method. if (!(Array.isArray(did.didDocument.verificationMethod) && did.didDocument.verificationMethod.length > 0)) { - throw new Error(`${this.name}: DID document for '${did.uri}' is missing verification methods`); + throw new Error(`DID document for '${did.uri}' is missing verification methods`); } let keySet: DidKeySet = { verificationMethods: [] }; @@ -414,7 +414,7 @@ export class DidMethod { // manager. for (let vm of did.didDocument.verificationMethod) { if (!vm.publicKeyJwk) { - throw new Error(`${this.name}: Verification method '${vm.id}' does not contain a public key in JWK format`); + throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); } // Compute the key URI of the verification method's public key. diff --git a/packages/dids/tests/did-dht.spec.ts b/packages/dids/tests/did-dht.spec.ts index 80a4b30b9..73c4285aa 100644 --- a/packages/dids/tests/did-dht.spec.ts +++ b/packages/dids/tests/did-dht.spec.ts @@ -1,82 +1,204 @@ +import sinon from 'sinon'; import { expect } from 'chai'; +import { Convert } from '@web5/common'; -import { DidDht } from '../src/methods/did-dht.js'; +import type { DidKeySet } from '../src/methods/did-method.js'; -describe.only('DidDht', () => { +import { DidErrorCode } from '../src/did-error.js'; +import { DidDht, DidDhtRegisteredDidType } from '../src/methods/did-dht.js'; +import { Jwk, LocalKmsCrypto } from '@web5/crypto'; - describe('resolve', () => { - it.only('resolves a DID', async () => { - const did = await DidDht.resolve('did:dht:1wh1ot5daz5rq3dgqngfa45s66aco6y6e6c51gyw8ydtwy9qi7zy'); - // const response = await fetch('https://diddht.tbddev.org/1wh1ot5daz5rq3dgqngfa45s66aco6y6e6c51gyw8ydtwy9qi7zy'); - // console.log(response); - // console.log(await response.arrayBuffer()); - }).timeout(10000); +// Helper function to create a mocked fetch response that fails and returns a 404 Not Found. +const fetchNotFoundResponse = () => ({ + status : 404, + statusText : 'Not Found', + ok : false +}); + +// Helper function to create a mocked fetch response that is successful and returns the given +// response. +const fetchOkResponse = (response?: any) => ({ + status : 200, + statusText : 'OK', + ok : true, + arrayBuffer : async () => Promise.resolve(response) +}); + +describe('DidDht', () => { + let fetchStub: sinon.SinonStub; + + beforeEach(() => { + // Setup stub so that a mocked response is returned rather than calling over the network. + fetchStub = sinon.stub(globalThis as any, 'fetch'); + + // By default, return a 200 OK response when fetch is called by publish(). + fetchStub.resolves(fetchOkResponse()); + }); + + afterEach(() => { + fetchStub.restore(); }); describe('create', () => { - it('two services', async () => { + it('creates a DID with a single verification method, by default', async () => { + const did = await DidDht.create(); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri'); + + expect(did.didDocument).to.have.property('verificationMethod'); + expect(did.didDocument.verificationMethod).to.have.length(1); + }); + + it('handles creating DIDs with additional verification methods', async () => { const did = await DidDht.create({ options: { verificationMethods: [ { - algorithm : 'Ed25519', - id : '0', - controller : 'did:example:1234', - }, + algorithm : 'Ed25519', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod).to.have.length(2); + }); + + it('allows one or more DID controller identifiers to be specified', async () => { + let did = await DidDht.create({ + options: { + controllers: 'did:example:1234' + } + }); + + expect(did.didDocument).to.have.property('controller', 'did:example:1234'); + + did = await DidDht.create({ + options: { + controllers: ['did:example:1234', 'did:example:5678'] + } + }); + + expect(did.didDocument.controller).to.deep.equal(['did:example:1234', 'did:example:5678']); + }); + + it('allows one or more Also Known As identifiers to be specified', async () => { + let did = await DidDht.create({ + options: { + alsoKnownAs: ['did:example:1234'] + } + }); + + expect(did.didDocument.alsoKnownAs).to.deep.equal(['did:example:1234']); + + did = await DidDht.create({ + options: { + alsoKnownAs: ['did:example:1234', 'did:example:5678'] + } + }); + + expect(did.didDocument.alsoKnownAs).to.deep.equal(['did:example:1234', 'did:example:5678']); + }); + + it('handles creating DIDs with additional verification methods', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ { algorithm : 'Ed25519', - id : 'sig', purposes : ['authentication', 'assertionMethod'] - }, + } + ] + } + }); + + expect(did.didDocument.verificationMethod).to.have.length(2); + }); + + it('assigns 0 as the ID of the Identity Key verification method ', async () => { + const did = await DidDht.create(); + + expect(did.didDocument.verificationMethod?.[0].id).to.include('#0'); + }); + + it('uses the JWK thumbprint as the ID for additional verification methods, by default', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ { - algorithm : 'ES256K', - id : 'enc', - purposes : ['keyAgreement'] + algorithm : 'Ed25519', + purposes : ['authentication', 'assertionMethod'] } - ], - services: [ + ] + } + }); + + expect(did.didDocument.verificationMethod?.[1].id).to.include(`#${did?.didDocument?.verificationMethod?.[1]?.publicKeyJwk?.kid}`); + }); + + it('allows a custom ID to be specified for additional verification methods', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ { - id : 'dwn-svc', - type : 'DIDCommMessaging', - serviceEndpoint : 'https://example.com/endpoint', - }, + algorithm : 'Ed25519', + id : '1', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod?.[1]).to.have.property('id', `${did.uri}#1`); + }); + + it('handles creating DIDs with one service', async () => { + const did = await DidDht.create({ + options: { + services: [ { - id : 'dwn-svc-2', - type : 'DIDCommMessaging', - serviceEndpoint : [ - 'https://example.com/endpoint1', - 'https://example.com/endpoint2' - ] + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', } ] } }); - console.log(did.uri); + + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `${did.uri}#dwn`); + expect(did.didDocument.service?.[0]).to.have.property('type', 'DecentralizedWebNode'); + expect(did.didDocument.service?.[0]).to.have.property('serviceEndpoint', 'https://example.com/dwn'); }); - it('two services', async () => { + it('handles creating DIDs with multiple services', async () => { const did = await DidDht.create({ options: { services: [ { - id : 'dwn-svc', - type : 'DIDCommMessaging', - serviceEndpoint : 'https://example.com/endpoint', + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', }, { - id : 'dwn-svc-2', - type : 'DIDCommMessaging', - serviceEndpoint : [ - 'https://example.com/endpoint1', - 'https://example.com/endpoint2' - ] + id : 'oid4vci', + type : 'OID4VCI', + serviceEndpoint : 'https://issuer.example.com', } ] } }); + + expect(did.didDocument.service).to.have.length(2); + expect(did.didDocument.service?.[0]).to.have.property('id', `${did.uri}#dwn`); + expect(did.didDocument.service?.[1]).to.have.property('id', `${did.uri}#oid4vci`); }); - it('accepts a custom controller for the Identity Key', async () => { + it('accepts a custom controller for the Identity Key verification method', async () => { const did = await DidDht.create({ options: { verificationMethods: [ @@ -95,7 +217,7 @@ describe.only('DidDht', () => { expect(identityKeyVerificationMethod).to.have.property('controller', 'did:example:1234'); }); - it('creates a DID with additional verification methods, if given', async () => { + it('accepts custom properties for services', async () => { const did = await DidDht.create({ options: { verificationMethods: [ @@ -109,15 +231,53 @@ describe.only('DidDht', () => { id : 'enc', purposes : ['keyAgreement'] } + ], + services: [ + { + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + enc : '#enc', + sig : '#sig' + } ] } }); - expect(did).to.have.property('didDocument'); - expect(did.didDocument).to.have.property('verificationMethod'); expect(did.didDocument.verificationMethod).to.have.length(3); - // expect(did.didDocument.verificationMethod[0]).to.have.property('id', 'dwn-sig'); - // expect(did.didDocument.verificationMethod[1]).to.have.property('id', 'dwn-auth'); + expect(did.didDocument.verificationMethod?.[1]).to.have.property('id', `${did.uri}#sig`); + expect(did.didDocument.verificationMethod?.[2]).to.have.property('id', `${did.uri}#enc`); + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `${did.uri}#dwn`); + expect(did.didDocument.service?.[0]).to.have.property('type', 'DecentralizedWebNode'); + expect(did.didDocument.service?.[0]).to.have.property('serviceEndpoint', 'https://example.com/dwn'); + expect(did.didDocument.service?.[0]).to.have.property('enc', '#enc'); + expect(did.didDocument.service?.[0]).to.have.property('sig', '#sig'); + }); + + it('accepts one or more DID DHT registered types', async () => { + const did = await DidDht.create({ + options: { + types: [DidDhtRegisteredDidType.FinancialInstitution, DidDhtRegisteredDidType.WebApp] + } + }); + + expect(did.metadata).to.have.property('types'); + expect(did.metadata.types).to.have.length(2); + expect(did.metadata.types).to.include(DidDhtRegisteredDidType.FinancialInstitution); + expect(did.metadata.types).to.include(DidDhtRegisteredDidType.WebApp); + }); + + it('publishes DIDs, by default', async () => { + await DidDht.create(); + + expect(fetchStub.calledOnce).to.be.true; + }); + + it('allows publishing of DIDs to optionally be disabled', async () => { + await DidDht.create({ options: { publish: false } }); + + expect(fetchStub.called).to.be.false; }); it('returns a DID with a getSigner function that can sign and verify data', async () => { @@ -156,10 +316,434 @@ describe.only('DidDht', () => { expect(error.message).to.include('algorithms are not supported'); } }); + + it('throws an error if services are missing required properties', async () => { + try { + // @ts-expect-error - Testing service with missing 'id' property. + await DidDht.create({ options: { services: [{ type: 'b', serviceEndpoint: 'c' }] } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('services are missing required properties'); + } + + try { + // @ts-expect-error - Testing service with missing 'type' property. + await DidDht.create({ options: { services: [{ id: 'a', serviceEndpoint: 'c' }] } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('services are missing required properties'); + } + + try { + // @ts-expect-error - Testing service with missing 'serviceEndpoint' property. + await DidDht.create({ options: { services: [{ id: 'a', type: 'b' }] } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('services are missing required properties'); + } + }); + + it('throws an error if the resulting DID document would exceed the 1000 byte maximum', async () => { + try { + // Attempt to create a DID with 6 verification methods (Identity Key plus 5 additional). + await DidDht.create({ + options: { + verificationMethods: [ + { algorithm: 'Ed25519' }, + { algorithm: 'Ed25519' }, + { algorithm: 'Ed25519' }, + { algorithm: 'Ed25519' }, + { algorithm: 'Ed25519' } + ] + } + }); + + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.code).to.equal(DidErrorCode.InvalidDidDocumentLength); + } + }); + }); + + describe('fromKeyManager()', () => { + let didUri: string; + let keyManager: LocalKmsCrypto; + let privateKey: Jwk; + + before(() => { + keyManager = new LocalKmsCrypto(); + }); + + beforeEach(() => { + didUri = 'did:dht:cf69rrqpanddbhkqecuwia314hfawfua9yr6zx433jmgm39ez57y'; + + privateKey = { + crv : 'Ed25519', + d : 'PISwJgl1nOlURuaqo144O1eXuGDWggYo7XX1X8oxPJs', + kty : 'OKP', + x : 'YX3yEc3AhjDxTkMnSuMy1wuKFnj4Ceu_WcpWZefovvo', + kid : 'un6C53LHsjSmjFmZsEKZKwrz0gO_LBg2nSV3a54CNoo' + }; + }); + + it('returns a DID from existing keys present in a key manager', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchOkResponse( + Convert.hex('28a37dbbf9692e2930696ade738f85a757a508442a9a454946e9a6e11a4ccd6d47e4f1839791' + + 'e7085d836e343d71726ed77fbad48760128e8a749cd61fcf3d0d0000000065b14cbe00008400' + + '0000000200000000035f6b30045f646964346366363972727170616e646462686b7165637577' + + '696133313468666177667561397972367a783433336a6d676d3339657a353779000010000100' + + '001c2000373669643d303b743d303b6b3d5958337945633341686a4478546b4d6e53754d7931' + + '77754b466e6a344365755f576370575a65666f76766f045f646964346366363972727170616e' + + '646462686b7165637577696133313468666177667561397972367a783433336a6d676d333965' + + '7a353779000010000100001c20002726763d303b766d3d6b303b617574683d6b303b61736d3d' + + '6b303b64656c3d6b303b696e763d6b30').toArrayBuffer() + )); + + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); + + const did = await DidDht.fromKeyManager({ didUri, keyManager }); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', 'did:dht:cf69rrqpanddbhkqecuwia314hfawfua9yr6zx433jmgm39ez57y'); + }); + + it('throws an error if an unsupported DID method is given', async () => { + try { + await DidDht.fromKeyManager({ didUri: 'did:example:1234', keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('Method not supported'); + expect(error.code).to.equal(DidErrorCode.MethodNotSupported); + } + }); + + it('throws an error if the resolved DID document lacks any verification methods', async () => { + // Stub the DID resolve method to return a DID document without a verificationMethod property. + sinon.stub(DidDht, 'resolve').returns(Promise.resolve({ + didDocument : { id: 'did:dht:...' }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + const didUri = 'did:dht:...'; + try { + await DidDht.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } finally { + sinon.restore(); + } + + // Stub the DID resolve method to return a DID document an empty verificationMethod property. + sinon.stub(DidDht, 'resolve').returns(Promise.resolve({ + didDocument : { id: 'did:dht:...', verificationMethod: [] }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + try { + await DidDht.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } finally { + sinon.restore(); + } + }); + + it('throws an error if the resolved DID document is missing a public key', async () => { + // Stub the DID resolution method to return a DID document with no verification methods. + sinon.stub(DidDht, 'resolve').returns(Promise.resolve({ + didDocument: { + id : 'did:dht:...', + verificationMethod : [{ + id : 'did:dht:...#0', + type : 'JsonWebKey', + controller : 'did:dht:...' + }], + }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + const didUri = 'did:dht:...'; + try { + await DidDht.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public key'); + } finally { + sinon.restore(); + } + }); + }); + + describe('fromKeys', () => { + + let didUri: string; + let keySet: DidKeySet; + + beforeEach(() => { + // Define a DID to use for the test. + didUri = 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo'; + + // Define a key set to use for the test. + keySet = { + verificationMethods: [ + { + id : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', + type : 'JsonWebKey', + controller : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'mRDzqCLKKBGRLs-gEuSNMdMILu2cjB0wquJygGgfK40', + kid : 'FuIkkMgnsq-XRX8gWp3HJpqwoIbyNNsx4Uk-tdDSqbE', + alg : 'EdDSA' + }, + privateKeyJwk: { + crv : 'Ed25519', + d : '3OQkejC7rNiGQSPAugN8CFrIjHGemZh5hbtgD8GXUVw', + kty : 'OKP', + x : 'mRDzqCLKKBGRLs-gEuSNMdMILu2cjB0wquJygGgfK40', + kid : 'FuIkkMgnsq-XRX8gWp3HJpqwoIbyNNsx4Uk-tdDSqbE', + alg : 'EdDSA' + }, + purposes: [ + 'authentication', + 'assertionMethod', + 'capabilityDelegation', + 'capabilityInvocation' + ], + }, + ], + }; + }); + + it('returns a DID given keys for a single verification method', async () => { + const did = await DidDht.fromKeys(keySet); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', didUri); + }); + + it('throws an error if no verification methods are given', async () => { + try { + await DidDht.fromKeys({}); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is empty', async () => { + try { + await DidDht.fromKeys({ verificationMethods: [] }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is missing a public key', async () => { + delete keySet.verificationMethods![0].publicKeyJwk; + + try { + await DidDht.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('must contain a public and private key'); + } + }); + + it('throws an error if the given key set is missing a private key', async () => { + delete keySet.verificationMethods![0].privateKeyJwk; + + try { + await DidDht.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('must contain a public and private key'); + } + }); + + it('throws an error if an Identity Key is not included in the given verification methods', async () => { + // Change the ID of the verification method to something other than 0. + keySet.verificationMethods![0].id = 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#1'; + + try { + await DidDht.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing an Identity Key'); + } + }); + }); + + describe('resolve', () => { + it('resolves a published DID with a single verification method', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchOkResponse( + Convert.hex('5f011403ca8a3dbf0935a4f598b47c965b66bc67c86c7b665fbbfa6a31013075f512bbf68ca5' + + 'c1b6f6ddde45b6645366a7234e204ae6f7c2d0bf4b9b99efae050000000065b0123100008400' + + '0000000200000000035f6b30045f64696434706a6969773769626e3674396b316d6b6b6e6b6f' + + '776a6b6574613863686b7367777a6b7435756b3837393865707578313338366f000010000100' + + '001c2000373669643d303b743d303b6b3d616d7461647145586f5f564a616c4356436956496a' + + '67374f4b73616c3152334e522d5f4f68733379796630045f64696434706a6969773769626e36' + + '74396b316d6b6b6e6b6f776a6b6574613863686b7367777a6b7435756b383739386570757831' + + '3338366f000010000100001c20002726763d303b766d3d6b303b617574683d6b303b61736d3d' + + '6b303b64656c3d6b303b696e763d6b30').toArrayBuffer() + )); + + const did = 'did:dht:pjiiw7ibn6t9k1mkknkowjketa8chksgwzkt5uk8798epux1386o'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult).to.have.property('didDocument'); + expect(didResolutionResult).to.have.property('didDocumentMetadata'); + expect(didResolutionResult).to.have.property('didResolutionMetadata'); + + expect(didResolutionResult.didDocument).to.have.property('id', did); + expect(didResolutionResult.didDocument?.verificationMethod).to.have.length(1); + }); + + it('resolves a published DID with services', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchOkResponse( + Convert.hex('19c356a57605e7be8d101e211137dec2bbb875f076a60866529eff68372380c63e435c852bf3' + + 'dbc6fa4bbda014c561af361cace90c91350477c010769a9910060000000065b035ce00008400' + + '0000000300000000035f6b30045f646964343177696161616f61677a63656767736e77667a6d' + + '78356377656f67356d736734753533366d627938737179336d6b703377796b6f000010000100' + + '001c2000373669643d303b743d303b6b3d6c53754d5968673132494d6177714675742d325552' + + '413231324e7165382d574542374f426c616d356f4255035f7330045f64696434317769616161' + + '6f61677a63656767736e77667a6d78356377656f67356d736734753533366d62793873717933' + + '6d6b703377796b6f000010000100001c2000393869643d64776e3b743d446563656e7472616c' + + '697a65645765624e6f64653b73653d68747470733a2f2f6578616d706c652e636f6d2f64776e' + + '045f646964343177696161616f61677a63656767736e77667a6d78356377656f67356d736734' + + '753533366d627938737179336d6b703377796b6f000010000100001c20002e2d763d303b766d' + + '3d6b303b617574683d6b303b61736d3d6b303b64656c3d6b303b696e763d6b303b7376633d73' + + '30').toArrayBuffer() + )); + + const did = 'did:dht:1wiaaaoagzceggsnwfzmx5cweog5msg4u536mby8sqy3mkp3wyko'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didDocument?.service).to.have.length(1); + expect(didResolutionResult.didDocument?.service?.[0]).to.have.property('id', `${did}#dwn`); + }); + + it('resolves a published DID with a DID Controller identifier', async () => { + fetchStub.resolves(fetchOkResponse( + Convert.hex('980110156ea686d159d62952c43a151e9fc8f69d9edf0ed38ae78505a3a340f4508de2adad29' + + '342e4acf9f3149b976234c6157272b28937e9b217a03e5a66e0f0000000065b0f2db00008400' + + '0000000300000000045f636e740364696434663464366267336331676a7368716f31656b3364' + + '3935347a336d79316f65686f6e31746b6a6863366a3466356d3666646839346f000010000100' + + '001c200011106469643a6578616d706c653a31323334035f6b30045f64696434663464366267' + + '336331676a7368716f31656b33643935347a336d79316f65686f6e31746b6a6863366a346635' + + '6d3666646839346f000010000100001c2000373669643d303b743d303b6b3d4c6f66676d7979' + + '526b323436456b4b79502d39587973456f493541556f7154786e6b364c7466696a355f55045f' + + '64696434663464366267336331676a7368716f31656b33643935347a336d79316f65686f6e31' + + '746b6a6863366a3466356d3666646839346f000010000100001c20002726763d303b766d3d6b' + + '303b617574683d6b303b61736d3d6b303b64656c3d6b303b696e763d6b30').toArrayBuffer() + )); + + const did = 'did:dht:f4d6bg3c1gjshqo1ek3d954z3my1oehon1tkjhc6j4f5m6fdh94o'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didDocument).to.have.property('controller'); + }); + + it('resolves a published DID with an Also Known As identifier', async () => { + fetchStub.resolves(fetchOkResponse( + Convert.hex('802d44499e456cdee25fef5ffe6f6fbc56201be836d8d44bcb1332a6414529a5503e514230e0' + + 'd0ec63a33d12a79aa06c3b8212160f514e40c9ac1b0f479128040000000065b0f37c00008400' + + '0000000300000000045f616b6103646964346b6e66356e37713568666e657a356b636d6d3439' + + '67346b6e716a356d727261393737337266756e73776f3578747269656f716d6f000010000100' + + '001c200011106469643a6578616d706c653a31323334035f6b30045f646964346b6e66356e37' + + '713568666e657a356b636d6d343967346b6e716a356d727261393737337266756e73776f3578' + + '747269656f716d6f000010000100001c2000373669643d303b743d303b6b3d55497578646476' + + '68524976745446723138326c43636e617945785f76636b4c4d567151322d4a4b6f673563045f' + + '646964346b6e66356e37713568666e657a356b636d6d343967346b6e716a356d727261393737' + + '337266756e73776f3578747269656f716d6f000010000100001c20002726763d303b766d3d6b' + + '303b617574683d6b303b61736d3d6b303b64656c3d6b303b696e763d6b30').toArrayBuffer() + )); + + const did = 'did:dht:knf5n7q5hfnez5kcmm49g4knqj5mrra9773rfunswo5xtrieoqmo'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didDocument).to.have.property('alsoKnownAs'); + }); + + it('resolves a published DID with types', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchOkResponse( + Convert.hex('ea33e704f3a48a3392f54b28744cdfb4e24780699f92ba7df62fd486d2a2cda3f263e1c6bcbd' + + '75d438be7316e5d6e94b13e98151f599cfecefad0b37432bd90a0000000065b0ed1600008400' + + '0000000300000000035f6b30045f6469643439746a6f6f773435656631686b736f6f3936626d' + + '7a6b777779336d686d653935643766736933657a6a796a67686d70373571796f000010000100' + + '001c2000373669643d303b743d303b6b3d5f464d49553174425a63566145502d437536715542' + + '6c66466f5f73665332726c4630675362693239323445045f747970045f6469643439746a6f6f' + + '773435656631686b736f6f3936626d7a6b777779336d686d653935643766736933657a6a796a' + + '67686d70373571796f000010000100001c2000070669643d372c36045f6469643439746a6f6f' + + '773435656631686b736f6f3936626d7a6b777779336d686d653935643766736933657a6a796a' + + '67686d70373571796f000010000100001c20002726763d303b766d3d6b303b617574683d6b30' + + '3b61736d3d6b303b64656c3d6b303b696e763d6b30').toArrayBuffer() + )); + + const did = 'did:dht:9tjoow45ef1hksoo96bmzkwwy3mhme95d7fsi3ezjyjghmp75qyo'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didDocumentMetadata).to.have.property('types'); + expect(didResolutionResult.didDocumentMetadata.types).to.have.length(2); + expect(didResolutionResult.didDocumentMetadata.types).to.include(DidDhtRegisteredDidType.FinancialInstitution); + expect(didResolutionResult.didDocumentMetadata.types).to.include(DidDhtRegisteredDidType.WebApp); + }); + + it('returns a notFound error if the DID is not published', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchNotFoundResponse()); + + const did = 'did:dht:5634graogy41ow91cc78up6i45a9mcscccruwer9o4ah5wcc1xmy'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'notFound'); + }); + + it('returns a invalidDidDocumentLength error if the Pkarr relay returns smaller than the 72 byte minimum', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchOkResponse( + new Uint8Array(71).buffer + )); + + const did = 'did:dht:pjiiw7ibn6t9k1mkknkowjketa8chksgwzkt5uk8798epux1386o'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'invalidDidDocumentLength'); + }); + + it('returns a invalidDidDocumentLength error if the Pkarr relay returns larger than the 1072 byte maximum', async () => { + // Mock the response from the Pkarr relay rather than calling over the network. + fetchStub.resolves(fetchOkResponse( + new Uint8Array(1073).buffer + )); + + const did = 'did:dht:pjiiw7ibn6t9k1mkknkowjketa8chksgwzkt5uk8798epux1386o'; + const didResolutionResult = await DidDht.resolve(did); + + expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'invalidDidDocumentLength'); + }); }); describe('toKeys()', () => { - it('returns a single verification method for a DID', async () => { + it('returns a single verification method for a DID, by default', async () => { // Create a DID to use for the test. const did = await DidDht.create(); diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/did-jwk.spec.ts index 712ad45f8..5f010a18a 100644 --- a/packages/dids/tests/did-jwk.spec.ts +++ b/packages/dids/tests/did-jwk.spec.ts @@ -8,6 +8,7 @@ import { LocalKmsCrypto } from '@web5/crypto'; import type { DidDocument } from '../src/types/did-core.js'; import type { DidKeySet, DidKeySetVerificationMethod } from '../src/methods/did-method.js'; +import { DidErrorCode } from '../src/did-error.js'; import { DidJwk } from '../src/methods/did-jwk.js'; import DidJwkResolveTestVector from '../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; @@ -129,181 +130,6 @@ describe('DidJwk', () => { }); }); - describe('fromKeys()', () => { - let didUri: string; - let keySet: DidKeySet; - - beforeEach(() => { - // Define a DID to use for the test. - didUri = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; - - // Define a key set to use for the test. - keySet = { - verificationMethods: [{ - publicKeyJwk: { - kty : 'OKP', - crv : 'Ed25519', - x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' - }, - privateKeyJwk: { - kty : 'OKP', - crv : 'Ed25519', - x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', - d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' - }, - purposes: ['authentication'] - }] - }; - }); - - it('returns a DID JWK from the given set of verification method keys', async () => { - const did = await DidJwk.fromKeys(keySet); - - expect(did).to.have.property('didDocument'); - expect(did).to.have.property('getSigner'); - expect(did).to.have.property('keyManager'); - expect(did).to.have.property('metadata'); - expect(did).to.have.property('uri', didUri); - }); - - it('returns a DID with a getSigner function that can sign and verify data', async () => { - const did = await DidJwk.fromKeys(keySet); - const signer = await did.getSigner(); - const data = new Uint8Array([1, 2, 3]); - const signature = await signer.sign({ data }); - const isValid = await signer.verify({ data, signature }); - - expect(signature).to.have.length(64); - expect(isValid).to.be.true; - }); - - it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { - const did = await DidJwk.fromKeys(keySet); - - // Retrieve the key URI of the verification method's public key. - const keyUri = await did.keyManager.getKeyUri({ key: keySet.verificationMethods![0].publicKeyJwk! }); - - const signer = await did.getSigner({ keyUri }); - const data = new Uint8Array([1, 2, 3]); - const signature = await signer.sign({ data }); - const isValid = await signer.verify({ data, signature }); - - expect(signature).to.have.length(64); - expect(isValid).to.be.true; - }); - - it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { - // Add the `sig` key use property. - keySet.verificationMethods![0].privateKeyJwk!.use = 'sig'; - keySet.verificationMethods![0].publicKeyJwk!.use = 'sig'; - - // Import the private key into a key manager. - const keyManager = new LocalKmsCrypto(); - await keyManager.importKey({ key: keySet.verificationMethods![0].privateKeyJwk! }); - - // Create the DID using the key set. - let did = await DidJwk.fromKeys(keySet); - - // Verify the DID document does not contain the `keyAgreement` relationship. - expect(did.didDocument).to.not.have.property('keyAgreement'); - }); - - it(`only specifies 'keyAgreement' relationship when JWK use is 'enc'`, async () => { - // Generate a random secp256k1 private key. - const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); - const publicKey = await keyManager.getPublicKey({ keyUri }); - const privateKey = await keyManager.exportKey({ keyUri }); - - // Add the `enc` key use property. - privateKey.use = 'enc'; - publicKey.use = 'enc'; - - // Swap the keys in the key set with the newly generated secp256k1 keys. - keySet.verificationMethods![0].privateKeyJwk = privateKey; - keySet.verificationMethods![0].publicKeyJwk = publicKey; - - // Create the DID using the key set. - let did = await DidJwk.fromKeys({ - keyManager, - verificationMethods: keySet.verificationMethods! - }); - - // Verrify the DID document does not contain any verification relationships other than - // `keyAgreement`. - expect(did.didDocument).to.have.property('keyAgreement'); - expect(did.didDocument).to.not.have.property('assertionMethod'); - expect(did.didDocument).to.not.have.property('authentication'); - expect(did.didDocument).to.not.have.property('capabilityDelegation'); - expect(did.didDocument).to.not.have.property('capabilityInvocation'); - }); - - it('throws an error if no verification methods are given', async () => { - try { - await DidJwk.fromKeys({}); - expect.fail('Expected an error to be thrown.'); - } catch (error: any) { - expect(error.message).to.include('one verification method'); - } - }); - - it('throws an error if the given key set is empty', async () => { - try { - await DidJwk.fromKeys({ verificationMethods: [] }); - expect.fail('Expected an error to be thrown.'); - } catch (error: any) { - expect(error.message).to.include('one verification method'); - } - }); - - it('throws an error if the given key set is missing a public key', async () => { - delete keySet.verificationMethods![0].publicKeyJwk; - - try { - await DidJwk.fromKeys(keySet); - expect.fail('Expected an error to be thrown.'); - } catch (error: any) { - expect(error.message).to.include('does not contain a public and private key'); - } - }); - - it('throws an error if the given key set is missing a private key', async () => { - delete keySet.verificationMethods![0].privateKeyJwk; - - try { - await DidJwk.fromKeys(keySet); - expect.fail('Expected an error to be thrown.'); - } catch (error: any) { - expect(error.message).to.include('does not contain a public and private key'); - } - }); - - it('throws an error if the key set contains two or more keys', async () => { - const verificationMethod: DidKeySetVerificationMethod = { - publicKeyJwk: { - kty : 'OKP', - crv : 'Ed25519', - x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' - }, - privateKeyJwk: { - kty : 'OKP', - crv : 'Ed25519', - x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', - d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' - }, - purposes: ['authentication'] - }; - - try { - await DidJwk.fromKeys({ - verificationMethods: [verificationMethod, verificationMethod] - }); - expect.fail('Expected an error to be thrown.'); - } catch (error: any) { - expect(error.message).to.include('one verification method'); - } - }); - }); - describe('fromKeyManager()', () => { let didUri: string; let keyManager: LocalKmsCrypto; @@ -429,6 +255,16 @@ describe('DidJwk', () => { } }); + it('throws an error if an unsupported DID method is given', async () => { + try { + await DidJwk.fromKeyManager({ didUri: 'did:example:e30', keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('Method not supported'); + expect(error.code).to.equal(DidErrorCode.MethodNotSupported); + } + }); + it('throws an error if the resolved DID document lacks any verification methods', async () => { // Stub the DID resolve method to return a DID document without a verificationMethod property. sinon.stub(DidJwk, 'resolve').returns(Promise.resolve({ @@ -491,6 +327,181 @@ describe('DidJwk', () => { }); }); + describe('fromKeys()', () => { + let didUri: string; + let keySet: DidKeySet; + + beforeEach(() => { + // Define a DID to use for the test. + didUri = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; + + // Define a key set to use for the test. + keySet = { + verificationMethods: [{ + publicKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' + }, + privateKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', + d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' + }, + purposes: ['authentication'] + }] + }; + }); + + it('returns a DID JWK from the given set of verification method keys', async () => { + const did = await DidJwk.fromKeys(keySet); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', didUri); + }); + + it('returns a DID with a getSigner function that can sign and verify data', async () => { + const did = await DidJwk.fromKeys(keySet); + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { + const did = await DidJwk.fromKeys(keySet); + + // Retrieve the key URI of the verification method's public key. + const keyUri = await did.keyManager.getKeyUri({ key: keySet.verificationMethods![0].publicKeyJwk! }); + + const signer = await did.getSigner({ keyUri }); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { + // Add the `sig` key use property. + keySet.verificationMethods![0].privateKeyJwk!.use = 'sig'; + keySet.verificationMethods![0].publicKeyJwk!.use = 'sig'; + + // Import the private key into a key manager. + const keyManager = new LocalKmsCrypto(); + await keyManager.importKey({ key: keySet.verificationMethods![0].privateKeyJwk! }); + + // Create the DID using the key set. + let did = await DidJwk.fromKeys(keySet); + + // Verify the DID document does not contain the `keyAgreement` relationship. + expect(did.didDocument).to.not.have.property('keyAgreement'); + }); + + it(`only specifies 'keyAgreement' relationship when JWK use is 'enc'`, async () => { + // Generate a random secp256k1 private key. + const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + const privateKey = await keyManager.exportKey({ keyUri }); + + // Add the `enc` key use property. + privateKey.use = 'enc'; + publicKey.use = 'enc'; + + // Swap the keys in the key set with the newly generated secp256k1 keys. + keySet.verificationMethods![0].privateKeyJwk = privateKey; + keySet.verificationMethods![0].publicKeyJwk = publicKey; + + // Create the DID using the key set. + let did = await DidJwk.fromKeys({ + keyManager, + verificationMethods: keySet.verificationMethods! + }); + + // Verrify the DID document does not contain any verification relationships other than + // `keyAgreement`. + expect(did.didDocument).to.have.property('keyAgreement'); + expect(did.didDocument).to.not.have.property('assertionMethod'); + expect(did.didDocument).to.not.have.property('authentication'); + expect(did.didDocument).to.not.have.property('capabilityDelegation'); + expect(did.didDocument).to.not.have.property('capabilityInvocation'); + }); + + it('throws an error if no verification methods are given', async () => { + try { + await DidJwk.fromKeys({}); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is empty', async () => { + try { + await DidJwk.fromKeys({ verificationMethods: [] }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is missing a public key', async () => { + delete keySet.verificationMethods![0].publicKeyJwk; + + try { + await DidJwk.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public and private key'); + } + }); + + it('throws an error if the given key set is missing a private key', async () => { + delete keySet.verificationMethods![0].privateKeyJwk; + + try { + await DidJwk.fromKeys(keySet); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public and private key'); + } + }); + + it('throws an error if the key set contains two or more keys', async () => { + const verificationMethod: DidKeySetVerificationMethod = { + publicKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' + }, + privateKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', + d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' + }, + purposes: ['authentication'] + }; + + try { + await DidJwk.fromKeys({ + verificationMethods: [verificationMethod, verificationMethod] + }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + }); + describe('getSigningMethod()', () => { it('handles didDocuments missing verification methods', async function () { const result = await DidJwk.getSigningMethod({ @@ -519,7 +530,7 @@ describe('DidJwk', () => { await DidJwk.getSigningMethod({ didDocument }); expect.fail('Error should have been thrown'); } catch (error: any) { - expect(error.message).to.equal('DidJwk: Method not supported: example'); + expect(error.message).to.equal('Method not supported: example'); } }); }); diff --git a/packages/dids/tests/did-web.spec.ts b/packages/dids/tests/did-web.spec.ts index a208a3b61..a35f72c10 100644 --- a/packages/dids/tests/did-web.spec.ts +++ b/packages/dids/tests/did-web.spec.ts @@ -6,9 +6,8 @@ import { expect } from 'chai'; import { DidWeb } from '../src/methods/did-web.js'; import DidWebResolveTestVector from '../../../test-vectors/did_web/resolve.json' assert { type: 'json' }; -// Helper function to create a mocked fetch response that is successful and returns the given -// response. -const fetchFailedResponse = () => ({ +// Helper function to create a mocked fetch response that fails and returns a 404 Not Found. +const fetchNotFoundResponse = () => ({ status : 404, statusText : 'Not Found', ok : false @@ -28,7 +27,7 @@ describe('DidWeb', () => { it(`returns a 'notFound' error if the HTTP GET response is not status code 200`, async () => { // Setup stub so that a mocked response is returned rather than calling over the network. let fetchStub = sinon.stub(globalThis as any, 'fetch'); - fetchStub.callsFake(() => Promise.resolve(fetchFailedResponse())); + fetchStub.callsFake(() => Promise.resolve(fetchNotFoundResponse())); const resolutionResult = await DidWeb.resolve('did:web:non-existent-domain.com'); diff --git a/packages/proxy-agent/package.json b/packages/proxy-agent/package.json index 240d2cc50..9c26ae3f6 100644 --- a/packages/proxy-agent/package.json +++ b/packages/proxy-agent/package.json @@ -77,6 +77,7 @@ "@playwright/test": "1.40.1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", + "@types/dns-packet": "5.6.4", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@typescript-eslint/eslint-plugin": "6.4.0", diff --git a/packages/user-agent/package.json b/packages/user-agent/package.json index 07a3f168c..912466042 100644 --- a/packages/user-agent/package.json +++ b/packages/user-agent/package.json @@ -77,6 +77,7 @@ "@playwright/test": "1.40.1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", + "@types/dns-packet": "5.6.4", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@typescript-eslint/eslint-plugin": "6.4.0", From 0b0693f095c244440ef6d6edd33cef66d4648175 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 25 Jan 2024 08:21:30 -0500 Subject: [PATCH 17/39] Rename DidKeySet to PortableDid and add uri Signed-off-by: Frank Hinek --- packages/dids/old/src/dht.ts | 356 ---------------- packages/dids/old/src/did-dht.ts | 314 --------------- packages/dids/old/tests/dht.spec.ts | 87 ---- packages/dids/old/tests/did-dht.spec.ts | 512 ------------------------ packages/dids/src/methods/did-dht.ts | 63 +-- packages/dids/src/methods/did-ion.ts | 4 +- packages/dids/src/methods/did-jwk.ts | 6 +- packages/dids/src/methods/did-key.ts | 4 +- packages/dids/src/methods/did-method.ts | 96 ++--- packages/dids/src/types.ts | 23 +- packages/dids/tests/did-dht.spec.ts | 353 ++++++++++++++-- packages/dids/tests/did-jwk.spec.ts | 48 ++- 12 files changed, 442 insertions(+), 1424 deletions(-) delete mode 100644 packages/dids/old/src/dht.ts delete mode 100644 packages/dids/old/src/did-dht.ts delete mode 100644 packages/dids/old/tests/dht.spec.ts delete mode 100644 packages/dids/old/tests/did-dht.spec.ts diff --git a/packages/dids/old/src/dht.ts b/packages/dids/old/src/dht.ts deleted file mode 100644 index 39185a8ad..000000000 --- a/packages/dids/old/src/dht.ts +++ /dev/null @@ -1,356 +0,0 @@ -import type { Packet, TxtAnswer } from 'dns-packet'; -import type { PublicKeyJwk, Web5Crypto} from '@web5/crypto'; - -import { Jose } from '@web5/crypto'; -import { Convert } from '@web5/common'; -import { Pkarr, SignedPacket, z32 } from 'pkarr'; -import dns, { AUTHORITATIVE_ANSWER } from 'dns-packet'; - -import type { DidDocument } from './types.js'; - -const PKARR_RELAY = 'https://diddht.tbddev.org'; -const TTL = 7200; - -/** - * A class to handle operations related to DHT-based Decentralized Identifiers (DIDs). - * It provides methods to: - * - Parse a DNS packet into a DID Document. - * - Retrieve a DID Document from the DHT. - * - Publish a DID Document to the DHT. - * - Convert a DID Document to a DNS packet. - * - * The class assumes that DIDs and DID Documents are compliant with the did:dht specification. - */ -export class DidDht { - - /** - * Parses a DNS packet into a DID Document. - * @param did The DID of the document. - * @param packet A DNS packet to parse into a DID Document. - * @returns A Promise that resolves to the parsed DidDocument. - */ - public static async fromDnsPacket({ did, packet }: { - did: string, - packet: Packet - }): Promise { - const document: Partial = { - id: did, - }; - - const keyLookup = new Map(); - - for (const answer of packet.answers) { - if (answer.type !== 'TXT') continue; - - const dataStr = answer.data?.toString(); - // Extracts 'k' or 's' from "_k0._did" or "_s0._did" - const recordType = answer.name?.split('.')[0].substring(1, 2); - - /*eslint-disable no-case-declarations*/ - switch (recordType) { - case 'k': { - const { id, t, k } = DidDht.parseTxtData({ data: dataStr }); - const keyConfigurations: { [keyType: string]: Partial } = { - '0': { - crv : 'Ed25519', - kty : 'OKP', - alg : 'EdDSA' - }, - '1': { - crv : 'secp256k1', - kty : 'EC', - alg : 'ES256K' - } - }; - const keyConfig = keyConfigurations[t]; - if (!keyConfig) { - throw new Error('Unsupported key type'); - } - - const publicKeyJwk = await Jose.keyToJwk({ - ...keyConfig, - kid : id, - keyMaterial : Convert.base64Url(k).toUint8Array(), - keyType : 'public' - }) as PublicKeyJwk; - - if (!document.verificationMethod) { - document.verificationMethod = []; - } - document.verificationMethod.push({ - id : `${did}#${id}`, - type : 'JsonWebKey2020', - controller : did, - publicKeyJwk : publicKeyJwk, - }); - keyLookup.set(answer.name, id); - - break; - } - - case 's': { - const {id: sId, t: sType, uri} = DidDht.parseTxtData({ data: dataStr }); - - if (!document.service) { - document.service = []; - } - document.service.push({ - id : `${did}#${sId}`, - type : sType, - serviceEndpoint : uri - }); - - break; - } - } - } - - // Extract relationships from root record - const didSuffix = did.split('did:dht:')[1]; - const potentialRootNames = ['_did', `_did.${didSuffix}`]; - - let actualRootName = null; - const root = packet.answers - .filter(answer => { - if (potentialRootNames.includes(answer.name)) { - actualRootName = answer.name; - return true; - } - return false; - }) as dns.TxtAnswer[]; - - if (root.length === 0) { - throw new Error('No root record found'); - } - - if (root.length > 1) { - throw new Error('Multiple root records found'); - } - const singleRoot = root[0] as dns.TxtAnswer; - const rootRecord = singleRoot.data?.toString().split(';'); - rootRecord?.forEach(record => { - const [type, ids] = record.split('='); - let idList = ids?.split(',').map(id => `#${keyLookup.get(`_${id}.${actualRootName}`)}`); - switch (type) { - case 'auth': - document.authentication = idList; - break; - case 'asm': - document.assertionMethod = idList; - break; - case 'agm': - document.keyAgreement = idList; - break; - case 'inv': - document.capabilityInvocation = idList; - break; - case 'del': - document.capabilityDelegation = idList; - break; - } - }); - - return document as DidDocument; - } - - /** - * Retrieves a DID Document from the DHT. - * - * @param did The DID of the document to retrieve. - * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`. - * @returns A Promise that resolves to the retrieved DidDocument. - */ - public static async getDidDocument({ did, relay = PKARR_RELAY }: { - did: string, - relay?: string - }): Promise { - const didFragment = did.replace('did:dht:', ''); - const publicKeyBytes = new Uint8Array(z32.decode(didFragment)); - const resolved = await Pkarr.relayGet(relay, publicKeyBytes); - if (resolved) { - return await DidDht.fromDnsPacket({ did, packet: resolved.packet() }); - } - throw new Error('No packet found'); - } - - /** - * Publishes a DID Document to the DHT. - * - * @param keyPair The key pair to sign the document with. - * @param didDocument The DID Document to publish. - * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`. - * @returns A boolean indicating the success of the publishing operation. - */ - public static async publishDidDocument({ keyPair, didDocument, relay = PKARR_RELAY }: { - didDocument: DidDocument, - keyPair: Web5Crypto.CryptoKeyPair, - relay?: string - }): Promise { - const packet = await DidDht.toDnsPacket({ didDocument }); - const pkarrKeypair = { - publicKey : keyPair.publicKey.material, - secretKey : new Uint8Array([...keyPair.privateKey.material, ...keyPair.publicKey.material]) - }; - const signedPacket = SignedPacket.fromPacket(pkarrKeypair, packet); - const results = await Pkarr.relayPut(relay, signedPacket); - - return results.ok; - } - - /** - * Converts a DID Document to a DNS packet according to the did:dht spec. - * - * @param didDocument The DID Document to convert. - * @returns A DNS packet converted from the DID Document. - */ - public static async toDnsPacket({ didDocument }: { didDocument: DidDocument }): Promise { - const packet: Partial = { - id : 0, - type : 'response', - flags : AUTHORITATIVE_ANSWER, - answers : [] - }; - - const vmIds: string[] = []; - const svcIds: string[] = []; - const rootRecord: string[] = []; - const keyLookup = new Map(); - - // Add key records for each verification method - for (const vm of didDocument.verificationMethod) { - const index = didDocument.verificationMethod.indexOf(vm); - const recordIdentifier = `k${index}`; - let vmId = DidDht.identifierFragment({ identifier: vm.id }); - keyLookup.set(vmId, recordIdentifier); - - let keyType: number; - switch (vm.publicKeyJwk.alg) { - case 'EdDSA': - keyType = 0; - break; - case 'ES256K': - keyType = 1; - break; - default: - keyType = 0; // Default value or throw an error if needed - } - - const cryptoKey = await Jose.jwkToCryptoKey({ key: vm.publicKeyJwk }); - const keyBase64Url = Convert.uint8Array(cryptoKey.material).toBase64Url(); - - const keyRecord: TxtAnswer = { - type : 'TXT', - name : `_${recordIdentifier}._did`, - ttl : TTL, - data : `id=${vmId},t=${keyType},k=${keyBase64Url}` - }; - - packet.answers.push(keyRecord); - vmIds.push(recordIdentifier); - } - - // Add service records - didDocument.service?.forEach((service, index) => { - const recordIdentifier = `s${index}`; - let sId = DidDht.identifierFragment({ identifier: service.id }); - const serviceRecord: TxtAnswer = { - type : 'TXT', - name : `_${recordIdentifier}._did`, - ttl : TTL, - data : `id=${sId},t=${service.type},uri=${service.serviceEndpoint}` - }; - - packet.answers.push(serviceRecord); - svcIds.push(recordIdentifier); - }); - - // add root record for vms and svcs - if (vmIds.length) { - rootRecord.push(`vm=${vmIds.join(',')}`); - } - if (svcIds.length) { - rootRecord.push(`svc=${svcIds.join(',')}`); - } - - // add verification relationships - if (didDocument.authentication) { - const authIds: string[] = didDocument.authentication - .map(id => DidDht.identifierFragment({ identifier: id })) - .filter(id => keyLookup.has(id)) - .map(id => keyLookup.get(id) as string); - if (authIds.length) { - rootRecord.push(`auth=${authIds.join(',')}`); - } - } - if (didDocument.assertionMethod) { - const authIds: string[] = didDocument.assertionMethod - .map(id => DidDht.identifierFragment({ identifier: id })) - .filter(id => keyLookup.has(id)) - .map(id => keyLookup.get(id) as string); - if (authIds.length) { - rootRecord.push(`asm=${authIds.join(',')}`); - } - } - if (didDocument.keyAgreement) { - const authIds: string[] = didDocument.keyAgreement - .map(id => DidDht.identifierFragment({ identifier: id })) - .filter(id => keyLookup.has(id)) - .map(id => keyLookup.get(id) as string); - if (authIds.length) { - rootRecord.push(`agm=${authIds.join(',')}`); - } - } - if (didDocument.capabilityInvocation) { - const authIds: string[] = didDocument.capabilityInvocation - .map(id => DidDht.identifierFragment({ identifier: id })) - .filter(id => keyLookup.has(id)) - .map(id => keyLookup.get(id) as string); - if (authIds.length) { - rootRecord.push(`inv=${authIds.join(',')}`); - } - } - if (didDocument.capabilityDelegation) { - const authIds: string[] = didDocument.capabilityDelegation - .map(id => DidDht.identifierFragment({ identifier: id })) - .filter(id => keyLookup.has(id)) - .map(id => keyLookup.get(id) as string); - if (authIds.length) { - rootRecord.push(`del=${authIds.join(',')}`); - } - } - - // Add root record - packet.answers.push({ - type : 'TXT', - name : '_did', - ttl : TTL, - data : rootRecord.join(';') - }); - - return packet as Packet; - } - - /** - * Extracts the fragment from a DID. - * - * @param identifier The DID to extract the fragment from. - * @returns The fragment from the DID or the complete DID if no fragment exists. - */ - private static identifierFragment({ identifier }: { identifier: string }): string { - return identifier.includes('#') ? identifier.substring(identifier.indexOf('#') + 1) : identifier; - } - - /** - * Parses TXT data from a DNS answer to extract key or service information. - * - * @param data The TXT record string data containing key-value pairs separated by commas. - * @returns An object containing parsed attributes such as 'id', 't', 'k', and 'uri'. - */ - private static parseTxtData({ data }: { data: string }): { [key: string]: string } { - return data.split(',').reduce((acc, pair) => { - const [key, value] = pair.split('='); - acc[key] = value; - return acc; - }, {} as { [key: string]: string }); - } -} \ No newline at end of file diff --git a/packages/dids/old/src/did-dht.ts b/packages/dids/old/src/did-dht.ts deleted file mode 100644 index b0973c926..000000000 --- a/packages/dids/old/src/did-dht.ts +++ /dev/null @@ -1,314 +0,0 @@ -import type { JwkKeyPair, PublicKeyJwk, Web5Crypto } from '@web5/crypto'; - -import z32 from 'z32'; -import { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto'; - -import type { - DidMethod, - DidService, - DidDocument, - PortableDid, - DidResolutionResult, - DidResolutionOptions, - VerificationRelationship, - DidKeySetVerificationMethodKey, -} from './types.js'; - -import { DidDht } from './dht.js'; -import { parseDid } from './utils.js'; - -const SupportedCryptoKeyTypes = [ - 'Ed25519', - 'secp256k1' -] as const; - -export type DidDhtCreateOptions = { - publish?: boolean; - keySet?: DidDhtKeySet; - services?: DidService[]; -} - -export type DidDhtKeySet = { - verificationMethodKeys?: DidKeySetVerificationMethodKey[]; -} - -export class DidDhtMethod implements DidMethod { - - public static methodName = 'dht'; - - /** - * Creates a new DID Document according to the did:dht spec. - * @param options The options to use when creating the DID Document, including whether to publish it. - * @returns A promise that resolves to a PortableDid object. - */ - public static async create(options?: DidDhtCreateOptions): Promise { - const { publish = false, keySet: initialKeySet, services } = options ?? {}; - - // Generate missing keys, if not provided in the options. - const keySet = await this.generateKeySet({ keySet: initialKeySet }); - - // Get the identifier and set it. - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - const id = await this.getDidIdentifier({ key: identityKey.publicKeyJwk }); - - // Add all other keys to the verificationMethod and relationship arrays. - const relationshipsMap: Partial> = {}; - const verificationMethods = keySet.verificationMethodKeys.map(key => { - for (const relationship of key.relationships) { - if (relationshipsMap[relationship]) { - relationshipsMap[relationship].push(`#${key.publicKeyJwk.kid}`); - } else { - relationshipsMap[relationship] = [`#${key.publicKeyJwk.kid}`]; - } - } - - return { - id : `${id}#${key.publicKeyJwk.kid}`, - type : 'JsonWebKey2020', - controller : id, - publicKeyJwk : key.publicKeyJwk - }; - }); - - // Add DID identifier to the service IDs. - services?.map(service => { - service.id = `${id}#${service.id}`; - }); - - // Assemble the DID Document. - const document: DidDocument = { - id, - verificationMethod: [...verificationMethods], - ...relationshipsMap, - ...services && { service: services } - }; - - // If the publish flag is set, publish the DID Document to the DHT. - if (publish) { - await this.publish({ identityKey, didDocument: document }); - } - - return { - did : document.id, - document : document, - keySet : keySet - }; - } - - - /** - * Generates a JWK key pair. - * @param options The key algorithm and key ID to use. - * @returns A promise that resolves to a JwkKeyPair object. - */ - public static async generateJwkKeyPair(options: { - keyAlgorithm: typeof SupportedCryptoKeyTypes[number], - keyId?: string - }): Promise { - const {keyAlgorithm, keyId} = options; - - let cryptoKeyPair: Web5Crypto.CryptoKeyPair; - - switch (keyAlgorithm) { - case 'Ed25519': { - cryptoKeyPair = await new EdDsaAlgorithm().generateKey({ - algorithm : {name: 'EdDSA', namedCurve: 'Ed25519'}, - extractable : true, - keyUsages : ['sign', 'verify'] - }); - break; - } - - case 'secp256k1': { - cryptoKeyPair = await new EcdsaAlgorithm().generateKey({ - algorithm : {name: 'ECDSA', namedCurve: 'secp256k1'}, - extractable : true, - keyUsages : ['sign', 'verify'] - }); - break; - } - - default: { - throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`); - } - } - - // Convert the CryptoKeyPair to JwkKeyPair. - const jwkKeyPair = await Jose.cryptoKeyToJwkPair({keyPair: cryptoKeyPair}); - - // Set kid values. - if (keyId) { - jwkKeyPair.privateKeyJwk.kid = keyId; - jwkKeyPair.publicKeyJwk.kid = keyId; - } else { - // If a key ID is not specified, generate RFC 7638 JWK thumbprint. - const jwkThumbprint = await Jose.jwkThumbprint({key: jwkKeyPair.publicKeyJwk}); - jwkKeyPair.privateKeyJwk.kid = jwkThumbprint; - jwkKeyPair.publicKeyJwk.kid = jwkThumbprint; - } - - return jwkKeyPair; - } - - /** - * Generates a key set for a DID Document. - * @param options The key set to use when generating the key set. - * @returns A promise that resolves to a DidDhtKeySet object. - */ - public static async generateKeySet(options?: { - keySet?: DidDhtKeySet - }): Promise { - let { keySet = {} } = options ?? {}; - - // If the key set is missing a `verificationMethodKeys` array, create one. - if (!keySet.verificationMethodKeys) keySet.verificationMethodKeys = []; - - // If the key set lacks an identity key (`kid: 0`), generate one. - if (!keySet.verificationMethodKeys.some(key => key.publicKeyJwk.kid === '0')) { - const identityKey = await this.generateJwkKeyPair({ - keyAlgorithm : 'Ed25519', - keyId : '0' - }); - keySet.verificationMethodKeys.push({ - ...identityKey, - relationships: ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }); - } - - // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key. - for (const key of keySet.verificationMethodKeys) { - if (key.publicKeyJwk) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.publicKeyJwk}); - if (key.privateKeyJwk) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.privateKeyJwk}); - } - - return keySet; - } - - /** - * Gets the identifier fragment from a DID. - * @param options The key to get the identifier fragment from. - * @returns A promise that resolves to a string containing the identifier. - */ - public static async getDidIdentifier(options: { - key: PublicKeyJwk - }): Promise { - const { key } = options; - - const cryptoKey = await Jose.jwkToCryptoKey({ key }); - const identifier = z32.encode(cryptoKey.material); - return 'did:dht:' + identifier; - } - - /** - * Gets the identifier fragment from a DID. - * @param options The key to get the identifier fragment from. - * @returns A promise that resolves to a string containing the identifier fragment. - */ - public static async getDidIdentifierFragment(options: { - key: PublicKeyJwk - }): Promise { - const { key } = options; - const cryptoKey = await Jose.jwkToCryptoKey({ key }); - return z32.encode(cryptoKey.material); - } - - /** - * Publishes a DID Document to the DHT. - * @param keySet The key set to use to sign the DHT payload. - * @param didDocument The DID Document to publish. - * @returns A boolean indicating the success of the publishing operation. - */ - public static async publish({ didDocument, identityKey }: { - didDocument: DidDocument, - identityKey: DidKeySetVerificationMethodKey - }): Promise { - const publicCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.publicKeyJwk}); - const privateCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.privateKeyJwk}); - - const isPublished = await DidDht.publishDidDocument({ - keyPair: { - publicKey : publicCryptoKey, - privateKey : privateCryptoKey - }, - didDocument - }); - - return isPublished; - } - - /** - * Resolves a DID Document based on the specified options. - * - * @param options - Configuration for resolving a DID Document. - * @param options.didUrl - The DID URL to resolve. - * @param options.resolutionOptions - Optional settings for the DID resolution process as defined in the DID Core specification. - * @returns A Promise that resolves to a `DidResolutionResult`, containing the resolved DID Document and associated metadata. - */ - public static async resolve(options: { - didUrl: string, - resolutionOptions?: DidResolutionOptions - }): Promise { - const { didUrl, resolutionOptions: _ } = options; - // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution - - const parsedDid = parseDid({ didUrl }); - if (!parsedDid) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : null, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'invalidDid', - errorMessage : `Cannot parse DID: ${didUrl}` - } - }; - } - - if (parsedDid.method !== 'dht') { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : null, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'methodNotSupported', - errorMessage : `Method not supported: ${parsedDid.method}` - } - }; - } - - let didDocument: DidDocument; - - /** - * TODO: This is a temporary workaround for the following issue: https://github.com/TBD54566975/web5-js/issues/331 - * As of 5 Dec 2023, the `pkarr` library throws an error if the DID is not found. Until a - * better solution is found, catch the error and return a DID Resolution Result with an - * error message. - */ - try { - didDocument = await DidDht.getDidDocument({ did: parsedDid.did }); - } catch (error: any) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : null, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'internalError', - errorMessage : `An unexpected error occurred while resolving DID: ${parsedDid.did}` - } - }; - } - - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : parsedDid.did, - methodSpecificId : parsedDid.id, - method : parsedDid.method - } - } - }; - } -} \ No newline at end of file diff --git a/packages/dids/old/tests/dht.spec.ts b/packages/dids/old/tests/dht.spec.ts deleted file mode 100644 index ea2f5cd7e..000000000 --- a/packages/dids/old/tests/dht.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import sinon from 'sinon'; -import { expect } from 'chai'; -import { Jose } from '@web5/crypto'; - -import type { DidKeySetVerificationMethodKey, DidService } from '../src/types.js'; - -import { DidDht } from '../src/dht.js'; -import { DidDhtMethod } from '../src/did-dht.js'; - -describe('DidDht', () => { - it('should create a put and parse a get request', async () => { - - const { document, keySet } = await DidDhtMethod.create(); - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - const publicCryptoKey = await Jose.jwkToCryptoKey({ key: identityKey.publicKeyJwk }); - const privateCryptoKey = await Jose.jwkToCryptoKey({ key: identityKey.privateKeyJwk }); - - const dhtPublishStub = sinon.stub(DidDht, 'publishDidDocument').resolves(true); - const dhtGetStub = sinon.stub(DidDht, 'getDidDocument').resolves(document); - - const published = await DidDht.publishDidDocument({ - keyPair: { - publicKey : publicCryptoKey, - privateKey : privateCryptoKey - }, - didDocument: document - }); - - expect(published).to.be.true; - - const gotDid = await DidDht.getDidDocument({ did: document.id }); - expect(gotDid.id).to.deep.equal(document.id); - expect(gotDid.capabilityDelegation).to.deep.equal(document.capabilityDelegation); - expect(gotDid.capabilityInvocation).to.deep.equal(document.capabilityInvocation); - expect(gotDid.keyAgreement).to.deep.equal(document.keyAgreement); - expect(gotDid.service).to.deep.equal(document.service); - expect(gotDid.verificationMethod.length).to.deep.equal(document.verificationMethod.length); - expect(gotDid.verificationMethod[0].id).to.deep.equal(document.verificationMethod[0].id); - expect(gotDid.verificationMethod[0].type).to.deep.equal(document.verificationMethod[0].type); - expect(gotDid.verificationMethod[0].controller).to.deep.equal(document.verificationMethod[0].controller); - expect(gotDid.verificationMethod[0].publicKeyJwk.kid).to.deep.equal(document.verificationMethod[0].publicKeyJwk.kid); - expect(gotDid.verificationMethod[0].publicKeyJwk.kty).to.deep.equal(document.verificationMethod[0].publicKeyJwk.kty); - - expect(dhtPublishStub.calledOnce).to.be.true; - expect(dhtGetStub.calledOnce).to.be.true; - sinon.restore(); - }); - - describe('Codec', async () => { - it('encodes and decodes a DID Document as a DNS Packet', async () => { - const services: DidService[] = [{ - id : 'dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : 'https://example.com/dwn' - }]; - const secp = await DidDhtMethod.generateJwkKeyPair({keyAlgorithm: 'secp256k1'}); - const vm: DidKeySetVerificationMethodKey = { - publicKeyJwk : secp.publicKeyJwk, - privateKeyJwk : secp.privateKeyJwk, - relationships : ['authentication', 'assertionMethod'] - }; - const keySet = { - verificationMethodKeys: [vm], - }; - const { did, document } = await DidDhtMethod.create({ services: services, keySet: keySet }); - const encoded = await DidDht.toDnsPacket({ didDocument: document }); - const decoded = await DidDht.fromDnsPacket({ did, packet: encoded }); - - expect(document.id).to.deep.equal(decoded.id); - expect(document.capabilityDelegation).to.deep.equal(decoded.capabilityDelegation); - expect(document.capabilityInvocation).to.deep.equal(decoded.capabilityInvocation); - expect(document.keyAgreement).to.deep.equal(decoded.keyAgreement); - expect(document.service).to.deep.equal(decoded.service); - expect(document.verificationMethod.length).to.deep.equal(decoded.verificationMethod.length); - expect(document.verificationMethod[0].id).to.deep.equal(decoded.verificationMethod[0].id); - expect(document.verificationMethod[0].type).to.deep.equal(decoded.verificationMethod[0].type); - expect(document.verificationMethod[0].controller).to.deep.equal(decoded.verificationMethod[0].controller); - expect(document.verificationMethod[0].publicKeyJwk.kid).to.deep.equal(decoded.verificationMethod[0].publicKeyJwk.kid); - expect(document.verificationMethod[0].publicKeyJwk.kty).to.deep.equal(decoded.verificationMethod[0].publicKeyJwk.kty); - expect(document.verificationMethod[1].id).to.deep.equal(decoded.verificationMethod[1].id); - expect(document.verificationMethod[1].type).to.deep.equal(decoded.verificationMethod[1].type); - expect(document.verificationMethod[1].controller).to.deep.equal(decoded.verificationMethod[1].controller); - expect(document.verificationMethod[1].publicKeyJwk.kid).to.deep.equal(decoded.verificationMethod[1].publicKeyJwk.kid); - expect(document.verificationMethod[1].publicKeyJwk.kty).to.deep.equal(decoded.verificationMethod[1].publicKeyJwk.kty); - }); - }); -}); \ No newline at end of file diff --git a/packages/dids/old/tests/did-dht.spec.ts b/packages/dids/old/tests/did-dht.spec.ts deleted file mode 100644 index 040f0be90..000000000 --- a/packages/dids/old/tests/did-dht.spec.ts +++ /dev/null @@ -1,512 +0,0 @@ -import type { PublicKeyJwk } from '@web5/crypto'; - -import sinon from 'sinon'; -import chai, { expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; - -import type { DidDhtKeySet } from '../src/did-dht.js'; -import type { DidDocument, DidKeySetVerificationMethodKey, DidService, PortableDid } from '../src/types.js'; - -import { DidDht } from '../src/dht.js'; -import { parseDid } from '../src/utils.js'; -import { DidDhtMethod } from '../src/did-dht.js'; -import { DidResolver } from '../src/did-resolver.js'; - -chai.use(chaiAsPromised); - -describe('DidDhtMethod', () => { - describe('generateJwkKeyPair()', () => { - it('generates Ed25519 JWK key pairs', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - - expect(ed25519KeyPair).to.exist; - expect(ed25519KeyPair).to.have.property('privateKeyJwk'); - expect(ed25519KeyPair).to.have.property('publicKeyJwk'); - expect(ed25519KeyPair.publicKeyJwk.kid).to.exist; - expect(ed25519KeyPair.publicKeyJwk.alg).to.equal('EdDSA'); - expect(ed25519KeyPair.publicKeyJwk.kty).to.equal('OKP'); - }); - - it('generates secp256k1 JWK key pairs', async () => { - const secp256k1KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'secp256k1' }); - - expect(secp256k1KeyPair).to.exist; - expect(secp256k1KeyPair).to.have.property('privateKeyJwk'); - expect(secp256k1KeyPair).to.have.property('publicKeyJwk'); - expect(secp256k1KeyPair.publicKeyJwk.kid).to.exist; - expect(secp256k1KeyPair.publicKeyJwk.alg).to.equal('ES256K'); - expect(secp256k1KeyPair.publicKeyJwk.kty).to.equal('EC'); - }); - - it('throws an error if an unsupported key algorithm is passed in', async () => { - await expect( - DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'unsupported' as any }) - ).to.be.rejectedWith(Error, 'unsupported'); - }); - }); - - describe('getDidIdentifierFragment()', () => { - it('should return the encoded identifier fragment for a given public key', async () => { - const testPublicKey: PublicKeyJwk = { - kty : 'OKP', - crv : 'Ed25519', - x : '9ZOlXQ7pZw7voYfQsrPPzvd1dA4ktXB5VbD1PWvl_jg', - ext : 'true', - 'key_ops' : ['verify'] - }; - - const result = await DidDhtMethod.getDidIdentifierFragment({ key: testPublicKey }); - - expect(result).to.equal('6sj4kzeq7fuo757bo9emfc6x355zk7yqr14zy6kisd4u449f9ahy'); - }); - }); - - describe('resolve()', () => { - it(`should return 'internalError' if DHT request throws error`, async () => { - const dhtDidResolutionStub = sinon.stub(DidDht, 'getDidDocument').rejects(new Error('Invalid SignedPacket bytes length, expected at least 72 bytes but got: 25')); - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o' }); - const didResolutionMetadata = didResolutionResult.didResolutionMetadata; - expect(didResolutionMetadata.error).to.equal('internalError'); - - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - }); - - describe('key sets', () => { - it('should generate a key set with the identity key if no keys are passed in', async () => { - const keySet = await DidDhtMethod.generateKeySet(); - - expect(keySet).to.exist; - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet).to.not.have.property('recoveryKey'); - expect(keySet).to.not.have.property('updateKey'); - expect(keySet).to.not.have.property('signingKey'); - expect(keySet.verificationMethodKeys).to.have.lengthOf(1); - expect(keySet.verificationMethodKeys[0].publicKeyJwk.kid).to.equal('0'); - }); - - it('should return the key set unmodified if only the identity key is passed in', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyId: '0', keyAlgorithm: 'Ed25519' }); - const identityKey: DidKeySetVerificationMethodKey = { - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }; - - const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [identityKey] } }); - - expect(keySet).to.exist; - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet).to.not.have.property('recoveryKey'); - expect(keySet).to.not.have.property('updateKey'); - expect(keySet).to.not.have.property('signingKey'); - expect(keySet.verificationMethodKeys).to.have.lengthOf(1); - expect(keySet.verificationMethodKeys[0]).to.deep.equal(identityKey); - }); - - it('should generate the identity key if non-identity keys are passed in', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - const vm: DidKeySetVerificationMethodKey = { - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }; - - const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [vm] } }); - - expect(keySet).to.exist; - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet).to.not.have.property('recoveryKey'); - expect(keySet).to.not.have.property('updateKey'); - expect(keySet).to.not.have.property('signingKey'); - expect(keySet.verificationMethodKeys).to.have.lengthOf(2); - - if (keySet.verificationMethodKeys[0].publicKeyJwk.kid === '0') { - expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.not.equal('0'); - } else { - expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.equal('0'); - } - }); - - it('should generate key ID values for provided keys, if missing', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - - // Remove the kid values from the key pair. - delete ed25519KeyPair.publicKeyJwk.kid; - delete ed25519KeyPair.privateKeyJwk.kid; - - const vm: DidKeySetVerificationMethodKey = { - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }; - - const keySet = await DidDhtMethod.generateKeySet({ keySet: { verificationMethodKeys: [vm] } }); - - // Verify that the key ID values were generated. - expect(keySet.verificationMethodKeys[0].publicKeyJwk.kid).to.exist; - expect(keySet.verificationMethodKeys[0].privateKeyJwk.kid).to.exist; - expect(keySet.verificationMethodKeys[1].publicKeyJwk.kid).to.exist; - expect(keySet.verificationMethodKeys[1].privateKeyJwk.kid).to.exist; - }); - }); - - describe('DIDs', () => { - it('should generate a DID identifier given a public key jwk', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - const did = await DidDhtMethod.getDidIdentifier({ key: ed25519KeyPair.publicKeyJwk }); - - expect(did).to.exist; - expect(did).to.contain('did:dht:'); - }); - - it('should create a DID document without options', async () => { - const { document, keySet } = await DidDhtMethod.create(); - - expect(document).to.exist; - expect(document.id).to.contain('did:dht:'); - expect(document.verificationMethod).to.exist; - expect(document.verificationMethod).to.have.lengthOf(1); - expect(document.verificationMethod[0].id).to.equal(`${document.id}#0`); - expect(document.verificationMethod[0].publicKeyJwk).to.exist; - expect(document.verificationMethod[0].publicKeyJwk.kid).to.equal('0'); - - expect(document.service).to.not.exist; - expect(document.assertionMethod.length).to.equal(1); - expect(document.assertionMethod[0]).to.equal(`#0`); - expect(document.authentication.length).to.equal(1); - expect(document.authentication[0]).to.equal(`#0`); - expect(document.capabilityDelegation.length).to.equal(1); - expect(document.capabilityDelegation[0]).to.equal(`#0`); - expect(document.capabilityInvocation.length).to.equal(1); - expect(document.capabilityInvocation[0]).to.equal(`#0`); - - const ks = keySet as DidDhtKeySet; - expect(ks).to.exist; - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - expect(identityKey).to.exist; - expect(identityKey.publicKeyJwk).to.exist; - expect(identityKey.privateKeyJwk).to.exist; - expect(identityKey.publicKeyJwk.kid).to.equal('0'); - }); - - it('should create a DID document with a non identity key option', async () => { - const ed25519KeyPair = await DidDhtMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - const keySet: DidDhtKeySet = { - verificationMethodKeys: [{ - publicKeyJwk : ed25519KeyPair.publicKeyJwk, - privateKeyJwk : ed25519KeyPair.privateKeyJwk, - relationships : ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation'] - }] - }; - - const { document } = await DidDhtMethod.create({ keySet }); - - expect(document).to.exist; - expect(document.id).to.contain('did:dht:'); - expect(document.verificationMethod).to.exist; - expect(document.verificationMethod).to.have.lengthOf(2); - expect(document.verificationMethod[1].id).to.equal(`${document.id}#0`); - expect(document.verificationMethod[1].publicKeyJwk).to.exist; - expect(document.verificationMethod[1].publicKeyJwk.kid).to.equal('0'); - - expect(document.service).to.not.exist; - expect(document.assertionMethod.length).to.equal(2); - expect(document.assertionMethod[1]).to.equal(`#0`); - expect(document.authentication.length).to.equal(2); - expect(document.authentication[1]).to.equal(`#0`); - expect(document.capabilityDelegation.length).to.equal(2); - expect(document.capabilityDelegation[1]).to.equal(`#0`); - expect(document.capabilityInvocation.length).to.equal(2); - expect(document.capabilityInvocation[1]).to.equal(`#0`); - - expect(keySet).to.exist; - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - expect(identityKey).to.exist; - expect(identityKey.publicKeyJwk).to.exist; - expect(identityKey.privateKeyJwk).to.exist; - expect(identityKey.publicKeyJwk.kid).to.equal('0'); - }); - - it('should create a DID document with services', async () => { - const services: DidService[] = [{ - id : 'agentId', - type : 'agent', - serviceEndpoint : 'https://example.com/agent' - }]; - const { document } = await DidDhtMethod.create({ services }); - - expect(document).to.exist; - expect(document.id).to.contain('did:dht:'); - expect(document.verificationMethod).to.exist; - expect(document.verificationMethod).to.have.lengthOf(1); - expect(document.verificationMethod[0].id).to.equal(`${document.id}#0`); - expect(document.verificationMethod[0].publicKeyJwk).to.exist; - expect(document.verificationMethod[0].publicKeyJwk.kid).to.equal('0'); - - expect(document.service).to.exist; - expect(document.service).to.have.lengthOf(1); - expect(document.service[0].id).to.equal(`${document.id}#agentId`); - expect(document.assertionMethod.length).to.equal(1); - expect(document.assertionMethod[0]).to.equal(`#0`); - expect(document.authentication.length).to.equal(1); - expect(document.authentication[0]).to.equal(`#0`); - expect(document.capabilityDelegation.length).to.equal(1); - expect(document.capabilityDelegation[0]).to.equal(`#0`); - expect(document.capabilityInvocation.length).to.equal(1); - expect(document.capabilityInvocation[0]).to.equal(`#0`); - }); - }); - - describe('DID publishing and resolving', function () { - it('should publish and DID should be resolvable', async () => { - const { document, keySet } = await DidDhtMethod.create(); - const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0'); - - const dhtDidPublishStub = sinon.stub(DidDht, 'publishDidDocument').resolves(true); - const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : document, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : document.id, - methodSpecificId : parseDid({ didUrl: document.id }).id, - method : 'dht' - } - } - }); - - const isPublished = await DidDhtMethod.publish({ identityKey, didDocument: document }); - expect(isPublished).to.be.true; - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: document.id }); - const didDocument = didResolutionResult.didDocument; - expect(didDocument.id).to.deep.equal(document.id); - - expect(dhtDidPublishStub.calledOnce).to.be.true; - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - - it('should create with publish and return a DID document', async () => { - const mockDocument: PortableDid = { - keySet : 'any' as any, - did : 'did:dht:123456789abcdefghi', - document : { - id : 'did:dht:123456789abcdefghi', - verificationMethod : [{ - id : 'did:dht:123456789abcdefghi#0', - type : 'JsonWebKey2020', - controller : 'did:dht:123456789abcdefghi', - publicKeyJwk : { - kty : 'OKP', - crv : 'Ed25519', - kid : '0', - x : 'O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik' - } - }], - assertionMethod : ['did:dht:123456789abcdefghi#0'], - authentication : ['did:dht:123456789abcdefghi#0'], - capabilityDelegation : ['did:dht:123456789abcdefghi#0'], - capabilityInvocation : ['did:dht:123456789abcdefghi#0'] - } - }; - const didDhtCreateStub = sinon.stub(DidDhtMethod, 'create').resolves(mockDocument); - - const { document } = await DidDhtMethod.create({ publish: true }); - const did = document.id; - - const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : document, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : 'did:dht:123456789abcdefgh', - methodSpecificId : '123456789abcdefgh', - method : 'dht' - } - } - }); - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: did }); - const resolvedDocument = didResolutionResult.didDocument; - expect(resolvedDocument.id).to.deep.equal(document.id); - expect(resolvedDocument.service).to.deep.equal(document.service); - expect(resolvedDocument.verificationMethod[0].id).to.deep.equal(document.verificationMethod[0].id); - expect(resolvedDocument.verificationMethod[0].type).to.deep.equal(document.verificationMethod[0].type); - expect(resolvedDocument.verificationMethod[0].controller).to.deep.equal(document.verificationMethod[0].controller); - expect(resolvedDocument.verificationMethod[0].publicKeyJwk.kid).to.deep.equal(document.verificationMethod[0].publicKeyJwk.kid); - - expect(didDhtCreateStub.calledOnce).to.be.true; - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - - it('should create with publish and DID should be resolvable', async () => { - const keySet: DidDhtKeySet = { - verificationMethodKeys: [{ - 'privateKeyJwk': { - 'd' : '2dPyiFL-vd21lxLKoyylz1nEK5EMByABqB2Fqio76sU', - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'sign' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - }, - 'publicKeyJwk': { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'verify' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - }, - 'relationships': [ - 'authentication', - 'assertionMethod', - 'capabilityInvocation', - 'capabilityDelegation' - ] - }] - }; - - const didDocument: DidDocument = { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'verificationMethod' : [ - { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o#0', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'verify' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - } - } - ], - 'authentication': [ - '#0' - ], - 'assertionMethod': [ - '#0' - ], - 'capabilityInvocation': [ - '#0' - ], - 'capabilityDelegation': [ - '#0' - ] - }; - - const dhtDidPublishStub = sinon.stub(DidDhtMethod, 'publish').resolves(true); - const dhtDidResolutionStub = sinon.stub(DidDhtMethod, 'resolve').resolves({ - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - methodSpecificId : 'h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - method : 'dht' - } - } - }); - - const portableDid = await DidDhtMethod.create({ publish: true, keySet: keySet }); - expect(portableDid).to.exist; - expect(portableDid.did).to.exist; - expect(portableDid.document).to.exist; - expect(portableDid.keySet).to.exist; - expect(portableDid.document.id).to.deep.equal(didDocument.id); - - const didResolutionResult = await DidDhtMethod.resolve({ didUrl: didDocument.id }); - expect(didDocument.id).to.deep.equal(didResolutionResult.didDocument.id); - - expect(dhtDidPublishStub.calledOnce).to.be.true; - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - }); - - describe('Integration with DidResolver', () => { - it('DidResolver resolves a did:dht DID', async () => { - // Previously published DID. - const did = 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o'; - const didDocument: DidDocument = { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'verificationMethod' : [ - { - 'id' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o#0', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'ext' : 'true', - 'key_ops' : [ - 'verify' - ], - 'x' : '5oeavVSPnbxre4zZTqZaStwDcHEJPMbW_oC3B6dhaTM', - 'kid' : '0' - } - } - ], - 'authentication': [ - '#0' - ], - 'assertionMethod': [ - '#0' - ], - 'capabilityInvocation': [ - '#0' - ], - 'capabilityDelegation': [ - '#0' - ] - }; - - const dhtDidResolutionStub = sinon.stub(DidDht, 'getDidDocument').resolves(didDocument); - - // Instantiate a DidResolver with the DidJwkMethod. - const didResolver = new DidResolver({ didResolvers: [DidDhtMethod] }); - - // Resolve the DID using the DidResolver. - const { didDocument: resolvedDocument } = await didResolver.resolve(did); - - // Verify that the resolved document matches the created document. - expect(resolvedDocument).to.deep.equal(didDocument); - - expect(dhtDidResolutionStub.calledOnce).to.be.true; - sinon.restore(); - }); - - it('returns an error for invalid didUrl', async () => { - const result = await DidDhtMethod.resolve({ didUrl: 'invalid' }); - expect(result).to.have.property('didResolutionMetadata').which.has.property('error', 'invalidDid'); - }); - - it('returns an error for unsupported method', async () => { - const result = await DidDhtMethod.resolve({ didUrl: 'did:unsupported:xyz' }); - expect(result).to.have.property('didResolutionMetadata').which.has.property('error', 'methodNotSupported'); - }); - }); - -}); \ No newline at end of file diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 12305cebe..dbc6f69d8 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -14,7 +14,7 @@ import { Convert } from '@web5/common'; import { CryptoApi, Ed25519, LocalKmsCrypto, P256, Secp256k1, computeJwkThumbprint } from '@web5/crypto'; import { AUTHORITATIVE_ANSWER, decode as dnsPacketDecode, encode as dnsPacketEncode } from '@dnsquery/dns-packet'; -import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; +import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidMetadata, PortableDid } from './did-method.js'; import type { DidService, DidDocument, @@ -319,8 +319,8 @@ export class DidDht extends DidMethod { didUri: string; keyManager: CryptoApi; }): Promise { - // Resolve the DID URI to a DID Document. - const { didDocument, didResolutionMetadata } = await DidDht.resolve(didUri); + // Resolve the DID URI to a DID document and document metadata. + const { didDocument, didDocumentMetadata, didResolutionMetadata } = await DidDht.resolve(didUri); // If the given DID isn't "did:dht", throw an error. if (didResolutionMetadata.error === DidErrorCode.MethodNotSupported) { @@ -346,8 +346,11 @@ export class DidDht extends DidMethod { await keyManager.getPublicKey({ keyUri }); } - // DID Metadata is initially empty for this DID method. - const metadata: DidMetadata = {}; + // Define DID Metadata, including the registered DID types and published state. + const metadata: DidMetadata = { + ...didDocumentMetadata?.published && { published: didDocumentMetadata.published }, + ...didDocumentMetadata?.types && { types: didDocumentMetadata.types } + }; // Define a function that returns a signer for the DID. const getSigner = async (params?: { keyUri?: string }) => await DidDht.getSigner({ @@ -361,12 +364,13 @@ export class DidDht extends DidMethod { public static async fromKeys({ keyManager = new LocalKmsCrypto(), + uri, verificationMethods, options = {} }: { keyManager?: CryptoApi & KeyImporterExporter; options?: DidDhtCreateOptions; - } & DidKeySet): Promise { + } & PortableDid): Promise { if (!(verificationMethods && Array.isArray(verificationMethods) && verificationMethods.length > 0)) { throw new Error(`At least one verification method is required but 0 were given`); } @@ -384,17 +388,19 @@ export class DidDht extends DidMethod { await keyManager.importKey({ key: vm.privateKeyJwk! }); } - // Create the DID object from the given key material, including DID document, metadata, - // signer convenience function, and URI. - const did = await DidDht.fromPublicKeys({ keyManager, verificationMethods, options }); + // If the DID URI is provided, resolve the DID document and metadata from the DHT network and + // use it to construct the DID object. + if (uri) { + return await DidDht.fromKeyManager({ didUri: uri, keyManager }); + } else { + // Otherwise, use the given key material and options to construct the DID object. + const did = await DidDht.fromPublicKeys({ keyManager, verificationMethods, options }); - // By default, the DID document will NOT be published unless explicitly enabled. - if (options.publish) { - const isPublished = await this.publish({ did }); - did.metadata.published = isPublished; - } + // By default, the DID document will NOT be published unless explicitly enabled. + did.metadata.published = options.publish ? await this.publish({ did }) : false; - return did; + return did; + } } public static async getSigningMethod({ didDocument, methodId = '#0' }: { @@ -407,7 +413,7 @@ export class DidDht extends DidMethod { throw new Error(`Method not supported: ${parsedDid.method}`); } - const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id.includes(methodId)); + const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id.endsWith(methodId)); return verificationMethod; } @@ -436,7 +442,7 @@ export class DidDht extends DidMethod { return { ...EMPTY_DID_RESOLUTION_RESULT, didDocument, - ...didMetadata && { didDocumentMetadata: didMetadata } + didDocumentMetadata: { published: true, ...didMetadata } }; } catch (error: any) { @@ -461,7 +467,7 @@ export class DidDht extends DidMethod { }: { keyManager: CryptoApi; options: DidDhtCreateOptions; - } & DidKeySet): Promise { + } & PortableDid): Promise { // Validate that the given verification methods contain an Identity Key. const identityKey = verificationMethods?.find(vm => vm.id?.split('#').pop() === '0')?.publicKeyJwk; if (!identityKey) { @@ -515,7 +521,7 @@ export class DidDht extends DidMethod { didDocument.service.push(service); }); - // Define DID Metadata. + // Define DID Metadata, including the registered DID types (if any). const metadata: DidMetadata = { ...options.types && { types: options.types } }; @@ -536,8 +542,11 @@ export class DidDht extends DidMethod { }: { keyManager: CryptoApi; verificationMethods?: DidCreateVerificationMethod[]; - }): Promise { - let keySet: DidKeySet = {}; + }): Promise { + let portableDid: PortableDid = { + verificationMethods: [] + }; + // If `verificationMethodKeys` was not provided, initialize it as an empty array. verificationMethods ??= []; @@ -557,11 +566,8 @@ export class DidDht extends DidMethod { const keyUri = await keyManager.generateKey({ algorithm: vm.algorithm }); const publicKey = await keyManager.getPublicKey({ keyUri }); - // Initialize the verification methods array if it does not already exist. - keySet.verificationMethods ??= []; - - // Add the verification method to the key set. - keySet.verificationMethods.push({ + // Add the verification method to the `PortableDid`. + portableDid.verificationMethods.push({ id : vm.id, type : 'JsonWebKey', controller : vm.controller, @@ -570,7 +576,7 @@ export class DidDht extends DidMethod { }); } - return keySet; + return portableDid; } } @@ -817,9 +823,6 @@ class DidDhtDocument { // Decode the DNS TXT record data value to an object. const { id: types } = DidDhtUtils.parseTxtDataToObject(answer.data); - // ! TODO: Figure out which one of these to support and delete the other. - // Map the DID DHT Registered DID Types from integers to names and add to DID metadata. - // didMetadata.types = types.split(VALUE_SEPARATOR).map(typeInteger => DidDhtRegisteredDidType[Number(typeInteger)]); // Add the DID DHT Registered DID Types represented as numbers to DID metadata. didMetadata.types = types.split(VALUE_SEPARATOR).map(typeInteger => Number(typeInteger)); diff --git a/packages/dids/src/methods/did-ion.ts b/packages/dids/src/methods/did-ion.ts index 7a80686b1..1403d0aa8 100644 --- a/packages/dids/src/methods/did-ion.ts +++ b/packages/dids/src/methods/did-ion.ts @@ -1,8 +1,8 @@ import type { KeyIdentifier } from '@web5/crypto'; -import type { DidKeySet } from '../methods/did-method.js'; +import type { PortableDid } from '../methods/did-method.js'; -export interface DidIonKeySet extends DidKeySet { +export interface DidIonKeySet extends PortableDid { recoveryKeyUri?: KeyIdentifier; updateKeyUri?: KeyIdentifier; } \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index b67fcac13..a3e93967f 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -11,7 +11,7 @@ import type { import { Convert } from '@web5/common'; import { LocalKmsCrypto } from '@web5/crypto'; -import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidKeySet, DidMetadata } from './did-method.js'; +import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidMetadata, PortableDid } from './did-method.js'; import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; import { DidUri } from '../did-uri.js'; @@ -185,7 +185,7 @@ export class DidJwk extends DidMethod { * Instantiates a `Did` object for the `did:jwk` method from a given key set. * * This method allows for the creation of a `Did` object using pre-existing key material, - * encapsulated within the `verificationMethods` array of the `DidKeySet`. This is particularly + * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly * useful when the key material is already available and you want to construct a `Did` object * based on these keys, instead of generating new keys. * @@ -220,7 +220,7 @@ export class DidJwk extends DidMethod { verificationMethods }: { keyManager?: CryptoApi & KeyImporterExporter; - } & DidKeySet): Promise { + } & PortableDid): Promise { if (!verificationMethods || verificationMethods.length !== 1) { throw new Error(`Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); } diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index 8907feab2..7673cd666 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -8,7 +8,7 @@ import { LocalKmsCrypto, } from '@web5/crypto'; -import type { Did, DidCreateOptions, DidKeySet } from './did-method.js'; +import type { Did, DidCreateOptions, PortableDid } from './did-method.js'; import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; import { DidMethod } from './did-method.js'; @@ -67,7 +67,7 @@ export interface DidKeyCreateOptions extends DidCreateOptions { /** * Optionally specify an existing set of keys to be used for DID creation. */ - keySet?: DidKeySet; + keySet?: PortableDid; /** * Optionally specify the format of the public key to be used for DID creation. diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index ca81a9af2..5ce04ce0e 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -188,41 +188,42 @@ export interface DidMethodResolver { } /** - * A set of keys associated with the verification methods of a Decentralized Identifier (DID). + * Format to document a DID identifier, along with its associated data, + * which can be exported, saved to a file, or imported. The intent is + * bundle all of the necessary metadata to enable usage of the DID in + * different contexts. + */ +/** + * Format that documents the metadata of a Decentralized Identifier (DID) to enable usage of the DID + * in different contexts. + * + * @remarks + * This format is useful for exporting, saving to a file, or importing a DID. * - * The keys in this set can be used to instantiate a new {@link Did} object typically using the - * `fromKeys()` method of a {@link DidMethod} implementation. + * @example + * ```ts + * // Generate a new DID. + * const did = await DidExample.create(); + * + * // Export the DID to a PortableDid. + * const portableDid = await DidExample.toKeys({ did }); + * + * // Instantiate a `Did` object from the PortableDid metadata. + * const didFromKeys = await DidExample.fromKeys({ ...portableDid }); + * // The `didFromKeys` object should be equivalent to the original `did` object. + * ``` */ -export interface DidKeySet { +export interface PortableDid { + /** {@inheritDoc DidUri#uri} */ + uri?: string; + /** - * An optional array of verification methods to be included in the DID document. + * An array of verification methods, including the key material and key purpose, which are + * included in the DID document. * * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} - * - * @example - * ```ts - * const did = await DidExample.fromKeys({ - * verificationMethods: [ - * { - * publicKeyJwk: { - * kty: "OKP", - * crv: "X25519", - * x: "7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY", - * kid: "xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I" - * }, - * privateKeyJwk: { - * kty: "OKP", - * crv: "X25519", - * d: "qM1E646TMZwFcLwRAFwOAYnTT_AvbBd3NBGtGRKTyU8", - * x: "7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY", - * kid: "xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I" - * }, - * purposes: ['authentication', 'assertionMethod'] - * } - * ] - * ``` */ - verificationMethods?: DidKeySetVerificationMethod[]; + verificationMethods: PortableDidVerificationMethod[]; } /** @@ -234,7 +235,7 @@ export interface DidKeySet { * Decentralized Identifiers (DIDs) where key pairs are associated with specific verification * relationships. */ -export interface DidKeySetVerificationMethod extends Partial { +export interface PortableDidVerificationMethod extends Partial { /** * Express the private key in JWK format. * @@ -255,7 +256,7 @@ export interface DidKeySetVerificationMethod extends Partial { + public static async toKeys({ did }: { did: Did }): Promise { // First, confirm that the DID's key manager supports exporting keys. if (!('exportKey' in did.keyManager && typeof did.keyManager.exportKey === 'function')) { throw new Error(`The key manager of the given DID does not support exporting keys`); @@ -408,7 +411,10 @@ export class DidMethod { throw new Error(`DID document for '${did.uri}' is missing verification methods`); } - let keySet: DidKeySet = { verificationMethods: [] }; + let portableDid: PortableDid = { + uri : did.uri, + verificationMethods : [] + }; // Retrieve the key material for every verification method in the DID document from the key // manager. @@ -429,13 +435,13 @@ export class DidMethod { .filter((purpose) => (did.didDocument[purpose as keyof DidDocument] as any[])?.includes(vm.id)) as DidVerificationRelationship[]; // Add the verification method to the key set. - keySet.verificationMethods!.push({ + portableDid.verificationMethods.push({ ...vm, privateKeyJwk: privateKey, purposes }); } - return keySet; + return portableDid; } } \ No newline at end of file diff --git a/packages/dids/src/types.ts b/packages/dids/src/types.ts index a4867568e..df1aa466b 100644 --- a/packages/dids/src/types.ts +++ b/packages/dids/src/types.ts @@ -1,26 +1,7 @@ import type { KeyValueStore } from '@web5/common'; -import type { DidKeySet } from './methods/did-method.js'; import type { DidDocument, DidResolutionResult } from './types/did-core.js'; - -// export interface DidMethodOperator { -// new (): DidMethod; -// methodName: string; - -// create(options: any): Promise; - -// generateKeySet(): Promise; - -// getDefaultSigningKey(options: { didDocument: DidDocument }): Promise; -// } - - - - - - - /** * implement this interface to provide your own cache for did resolution results. can be plugged in through Web5 API */ @@ -75,4 +56,6 @@ interface PortableDid { * each managed DID and additional properties of any type. */ metadata?: DidMetadata; -} \ No newline at end of file +} + +interface DidKeySet {} \ No newline at end of file diff --git a/packages/dids/tests/did-dht.spec.ts b/packages/dids/tests/did-dht.spec.ts index 73c4285aa..e3e7ee3f7 100644 --- a/packages/dids/tests/did-dht.spec.ts +++ b/packages/dids/tests/did-dht.spec.ts @@ -1,12 +1,15 @@ +import type { Jwk } from '@web5/crypto'; + import sinon from 'sinon'; import { expect } from 'chai'; import { Convert } from '@web5/common'; +import { LocalKmsCrypto } from '@web5/crypto'; -import type { DidKeySet } from '../src/methods/did-method.js'; +import type { DidResolutionResult } from '../src/index.js'; +import type { PortableDid } from '../src/methods/did-method.js'; import { DidErrorCode } from '../src/did-error.js'; import { DidDht, DidDhtRegisteredDidType } from '../src/methods/did-dht.js'; -import { Jwk, LocalKmsCrypto } from '@web5/crypto'; // Helper function to create a mocked fetch response that fails and returns a 404 Not Found. const fetchNotFoundResponse = () => ({ @@ -412,6 +415,148 @@ describe('DidDht', () => { expect(did).to.have.property('uri', 'did:dht:cf69rrqpanddbhkqecuwia314hfawfua9yr6zx433jmgm39ez57y'); }); + it('returns a DID from existing keys present in a key manager, with types', async () => { + const portableDid: PortableDid = { + uri : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + verificationMethods : [ + { + id : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0', + type : 'JsonWebKey', + controller : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0', + kid : 'cyvOypa6k-4ffsRWcza37s5XVOh1kO9ICUeo1ZxHVM8', + alg : 'EdDSA', + }, + privateKeyJwk: { + crv : 'Ed25519', + d : 'hdSIwbQwVD-fNOVEgt-k3mMl44Ip1iPi58Ex6VDGxqY', + kty : 'OKP', + x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0', + kid : 'cyvOypa6k-4ffsRWcza37s5XVOh1kO9ICUeo1ZxHVM8', + alg : 'EdDSA', + }, + purposes: [ + 'authentication', + 'assertionMethod', + 'capabilityDelegation', + 'capabilityInvocation', + ], + }, + ], + }; + + const mockDidResolutionResult: DidResolutionResult = { + didDocument: { + id : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + verificationMethod : [ + { + id : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0', + type : 'JsonWebKey', + controller : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0', + kid : 'cyvOypa6k-4ffsRWcza37s5XVOh1kO9ICUeo1ZxHVM8', + alg : 'EdDSA' + }, + }, + ], + authentication: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + assertionMethod: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + capabilityDelegation: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + capabilityInvocation: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + }, + didDocumentMetadata: { + types: [6, 7] + }, + didResolutionMetadata: {} + }; + + // Stub the DID resolve method to return the expected DID document and metadata. + const resolveStub = sinon.stub(DidDht, 'resolve').returns(Promise.resolve(mockDidResolutionResult)); + + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: portableDid.verificationMethods![0].privateKeyJwk! }); + + const did = await DidDht.fromKeyManager({ didUri: portableDid.uri!, keyManager }); + + expect(did.uri).to.equal(portableDid.uri); + expect(did.didDocument).to.deep.equal(mockDidResolutionResult.didDocument); + expect(did.metadata).to.have.property('types'); + expect(did.metadata.types).to.deep.equal([6, 7]); + + resolveStub.restore(); + }); + + it('returns a DID with a getSigner function that can sign and verify data', async () => { + const keyManager = new LocalKmsCrypto(); + + // Create a DID to use for the test. + const testDid = await DidDht.create({ keyManager }); + + // Stub the DID resolve method to return the expected DID document and metadata. + const resolveStub = sinon.stub(DidDht, 'resolve').returns(Promise.resolve({ + didDocument : testDid.didDocument, + didDocumentMetadata : testDid.metadata, + didResolutionMetadata : {} + })); + + const did = await DidDht.fromKeyManager({ didUri: testDid.uri, keyManager }); + + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + + resolveStub.restore(); + }); + + it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { + const keyManager = new LocalKmsCrypto(); + + // Create a DID to use for the test. + const testDid = await DidDht.create({ keyManager }); + + // Stub the DID resolve method to return the expected DID document and metadata. + const resolveStub = sinon.stub(DidDht, 'resolve').returns(Promise.resolve({ + didDocument : testDid.didDocument, + didDocumentMetadata : testDid.metadata, + didResolutionMetadata : {} + })); + + const did = await DidDht.fromKeyManager({ didUri: testDid.uri, keyManager }); + + // Retrieve the key URI of the verification method's public key. + const keyUri = await did.keyManager.getKeyUri({ + key: testDid.didDocument.verificationMethod![0].publicKeyJwk! + }); + + const signer = await did.getSigner({ keyUri }); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + + resolveStub.restore(); + }); + it('throws an error if an unsupported DID method is given', async () => { try { await DidDht.fromKeyManager({ didUri: 'did:example:1234', keyManager }); @@ -485,17 +630,13 @@ describe('DidDht', () => { }); describe('fromKeys', () => { - - let didUri: string; - let keySet: DidKeySet; + let portableDid: PortableDid; beforeEach(() => { // Define a DID to use for the test. - didUri = 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo'; - - // Define a key set to use for the test. - keySet = { - verificationMethods: [ + portableDid = { + uri : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo', + verificationMethods : [ { id : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', type : 'JsonWebKey', @@ -526,18 +667,151 @@ describe('DidDht', () => { }; }); - it('returns a DID given keys for a single verification method', async () => { - const did = await DidDht.fromKeys(keySet); + it('returns a previously created DID from the URI and imported key material', async () => { + const mockDidResolutionResult: DidResolutionResult = { + didDocument: { + id : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo', + verificationMethod : [ + { + id : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', + type : 'JsonWebKey', + controller : 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'mRDzqCLKKBGRLs-gEuSNMdMILu2cjB0wquJygGgfK40', + kid : 'FuIkkMgnsq-XRX8gWp3HJpqwoIbyNNsx4Uk-tdDSqbE', + alg : 'EdDSA', + }, + }, + ], + authentication: [ + 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', + ], + assertionMethod: [ + 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', + ], + capabilityDelegation: [ + 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', + ], + capabilityInvocation: [ + 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#0', + ], + }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + }; + + // Stub the DID resolve method to return the expected DID document and metadata. + const resolveStub = sinon.stub(DidDht, 'resolve').returns(Promise.resolve(mockDidResolutionResult)); + + const did = await DidDht.fromKeys(portableDid); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', portableDid.uri); + + resolveStub.restore(); + }); + + it('returns a previously created DID from the URI and imported key material, with types', async () => { + portableDid = { + uri : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + verificationMethods : [ + { + id : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0', + type : 'JsonWebKey', + controller : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0', + kid : 'cyvOypa6k-4ffsRWcza37s5XVOh1kO9ICUeo1ZxHVM8', + alg : 'EdDSA', + }, + privateKeyJwk: { + crv : 'Ed25519', + d : 'hdSIwbQwVD-fNOVEgt-k3mMl44Ip1iPi58Ex6VDGxqY', + kty : 'OKP', + x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0', + kid : 'cyvOypa6k-4ffsRWcza37s5XVOh1kO9ICUeo1ZxHVM8', + alg : 'EdDSA', + }, + purposes: [ + 'authentication', + 'assertionMethod', + 'capabilityDelegation', + 'capabilityInvocation', + ], + }, + ], + }; + + const mockDidResolutionResult: DidResolutionResult = { + didDocument: { + id : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + verificationMethod : [ + { + id : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0', + type : 'JsonWebKey', + controller : 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0', + kid : 'cyvOypa6k-4ffsRWcza37s5XVOh1kO9ICUeo1ZxHVM8', + alg : 'EdDSA' + }, + }, + ], + authentication: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + assertionMethod: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + capabilityDelegation: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + capabilityInvocation: [ + 'did:dht:ksbkpsjytbm7kh6hnt3xi91t6to98zndtrrxzsqz9y87m5qztyqo#0' + ], + }, + didDocumentMetadata: { + types: [6, 7] + }, + didResolutionMetadata: {} + }; + + // Stub the DID resolve method to return the expected DID document and metadata. + const resolveStub = sinon.stub(DidDht, 'resolve').returns(Promise.resolve(mockDidResolutionResult)); + + const did = await DidDht.fromKeys(portableDid); + + expect(did.metadata).to.deep.equal({ types: [6, 7] }); + + resolveStub.restore(); + }); + + it('returns a new DID created from the given verification material', async () => { + // Remove the URI from the test portable DID so that fromKeys() creates the DID object + // using only the key material. + const { uri, ...didWithOnlyKeys } = portableDid; + + const did = await DidDht.fromKeys(didWithOnlyKeys); expect(did).to.have.property('didDocument'); expect(did).to.have.property('getSigner'); expect(did).to.have.property('keyManager'); expect(did).to.have.property('metadata'); - expect(did).to.have.property('uri', didUri); + expect(did).to.have.property('uri', uri); }); it('throws an error if no verification methods are given', async () => { try { + // @ts-expect-error - Testing invalid argument. await DidDht.fromKeys({}); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -555,10 +829,10 @@ describe('DidDht', () => { }); it('throws an error if the given key set is missing a public key', async () => { - delete keySet.verificationMethods![0].publicKeyJwk; + delete portableDid.verificationMethods![0].publicKeyJwk; try { - await DidDht.fromKeys(keySet); + await DidDht.fromKeys(portableDid); expect.fail('Expected an error to be thrown.'); } catch (error: any) { expect(error.message).to.include('must contain a public and private key'); @@ -566,10 +840,10 @@ describe('DidDht', () => { }); it('throws an error if the given key set is missing a private key', async () => { - delete keySet.verificationMethods![0].privateKeyJwk; + delete portableDid.verificationMethods![0].privateKeyJwk; try { - await DidDht.fromKeys(keySet); + await DidDht.fromKeys(portableDid); expect.fail('Expected an error to be thrown.'); } catch (error: any) { expect(error.message).to.include('must contain a public and private key'); @@ -578,10 +852,10 @@ describe('DidDht', () => { it('throws an error if an Identity Key is not included in the given verification methods', async () => { // Change the ID of the verification method to something other than 0. - keySet.verificationMethods![0].id = 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#1'; + portableDid.verificationMethods![0].id = 'did:dht:urex8kbn3ewbdrjq36obf3rpg8joomzpu1gb4cfkhj3ey4y9fqgo#1'; try { - await DidDht.fromKeys(keySet); + await DidDht.fromKeys(portableDid); expect.fail('Expected an error to be thrown.'); } catch (error: any) { expect(error.message).to.include('missing an Identity Key'); @@ -747,16 +1021,39 @@ describe('DidDht', () => { // Create a DID to use for the test. const did = await DidDht.create(); - const keySet = await DidDht.toKeys({ did }); + const portableDid = await DidDht.toKeys({ did }); + + expect(portableDid).to.have.property('verificationMethods'); + expect(portableDid.verificationMethods).to.have.length(1); + expect(portableDid.verificationMethods[0]).to.have.property('publicKeyJwk'); + expect(portableDid.verificationMethods[0]).to.have.property('privateKeyJwk'); + expect(portableDid.verificationMethods[0]).to.have.property('purposes'); + expect(portableDid.verificationMethods[0]).to.have.property('type'); + expect(portableDid.verificationMethods[0]).to.have.property('id'); + expect(portableDid.verificationMethods[0]).to.have.property('controller'); + }); + + it('output can be used to instantiate a DID object', async () => { + // Create a DID to use for the test. + const did = await DidDht.create(); + + // Convert the DID to a portable format. + const portableDid = await DidDht.toKeys({ did }); + + // Stub the DID resolve method to return the expected DID document and metadata. + const resolveStub = sinon.stub(DidDht, 'resolve').returns(Promise.resolve({ + didDocument : did.didDocument, + didDocumentMetadata : did.metadata, + didResolutionMetadata : {} + })); + + // Create a DID object from the portable format. + const didFromPortable = await DidDht.fromKeys(portableDid); + + expect(didFromPortable.didDocument).to.deep.equal(did.didDocument); + expect(didFromPortable.metadata).to.deep.equal(did.metadata); - expect(keySet).to.have.property('verificationMethods'); - expect(keySet.verificationMethods).to.have.length(1); - expect(keySet.verificationMethods![0]).to.have.property('publicKeyJwk'); - expect(keySet.verificationMethods![0]).to.have.property('privateKeyJwk'); - expect(keySet.verificationMethods![0]).to.have.property('purposes'); - expect(keySet.verificationMethods![0]).to.have.property('type'); - expect(keySet.verificationMethods![0]).to.have.property('id'); - expect(keySet.verificationMethods![0]).to.have.property('controller'); + resolveStub.restore(); }); }); }); \ No newline at end of file diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/did-jwk.spec.ts index 5f010a18a..414da4613 100644 --- a/packages/dids/tests/did-jwk.spec.ts +++ b/packages/dids/tests/did-jwk.spec.ts @@ -6,7 +6,7 @@ import { expect } from 'chai'; import { LocalKmsCrypto } from '@web5/crypto'; import type { DidDocument } from '../src/types/did-core.js'; -import type { DidKeySet, DidKeySetVerificationMethod } from '../src/methods/did-method.js'; +import type { PortableDid, PortableDidVerificationMethod } from '../src/methods/did-method.js'; import { DidErrorCode } from '../src/did-error.js'; import { DidJwk } from '../src/methods/did-jwk.js'; @@ -328,16 +328,13 @@ describe('DidJwk', () => { }); describe('fromKeys()', () => { - let didUri: string; - let keySet: DidKeySet; + let portableDid: PortableDid; beforeEach(() => { // Define a DID to use for the test. - didUri = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; - - // Define a key set to use for the test. - keySet = { - verificationMethods: [{ + portableDid = { + uri : 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ', + verificationMethods : [{ publicKeyJwk: { kty : 'OKP', crv : 'Ed25519', @@ -355,17 +352,17 @@ describe('DidJwk', () => { }); it('returns a DID JWK from the given set of verification method keys', async () => { - const did = await DidJwk.fromKeys(keySet); + const did = await DidJwk.fromKeys(portableDid); expect(did).to.have.property('didDocument'); expect(did).to.have.property('getSigner'); expect(did).to.have.property('keyManager'); expect(did).to.have.property('metadata'); - expect(did).to.have.property('uri', didUri); + expect(did).to.have.property('uri', portableDid.uri); }); it('returns a DID with a getSigner function that can sign and verify data', async () => { - const did = await DidJwk.fromKeys(keySet); + const did = await DidJwk.fromKeys(portableDid); const signer = await did.getSigner(); const data = new Uint8Array([1, 2, 3]); const signature = await signer.sign({ data }); @@ -376,10 +373,10 @@ describe('DidJwk', () => { }); it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { - const did = await DidJwk.fromKeys(keySet); + const did = await DidJwk.fromKeys(portableDid); // Retrieve the key URI of the verification method's public key. - const keyUri = await did.keyManager.getKeyUri({ key: keySet.verificationMethods![0].publicKeyJwk! }); + const keyUri = await did.keyManager.getKeyUri({ key: portableDid.verificationMethods![0].publicKeyJwk! }); const signer = await did.getSigner({ keyUri }); const data = new Uint8Array([1, 2, 3]); @@ -392,15 +389,15 @@ describe('DidJwk', () => { it(`does not include the 'keyAgreement' relationship when JWK use is 'sig'`, async () => { // Add the `sig` key use property. - keySet.verificationMethods![0].privateKeyJwk!.use = 'sig'; - keySet.verificationMethods![0].publicKeyJwk!.use = 'sig'; + portableDid.verificationMethods[0].privateKeyJwk!.use = 'sig'; + portableDid.verificationMethods[0].publicKeyJwk!.use = 'sig'; // Import the private key into a key manager. const keyManager = new LocalKmsCrypto(); - await keyManager.importKey({ key: keySet.verificationMethods![0].privateKeyJwk! }); + await keyManager.importKey({ key: portableDid.verificationMethods![0].privateKeyJwk! }); // Create the DID using the key set. - let did = await DidJwk.fromKeys(keySet); + let did = await DidJwk.fromKeys(portableDid); // Verify the DID document does not contain the `keyAgreement` relationship. expect(did.didDocument).to.not.have.property('keyAgreement'); @@ -417,13 +414,13 @@ describe('DidJwk', () => { publicKey.use = 'enc'; // Swap the keys in the key set with the newly generated secp256k1 keys. - keySet.verificationMethods![0].privateKeyJwk = privateKey; - keySet.verificationMethods![0].publicKeyJwk = publicKey; + portableDid.verificationMethods[0].privateKeyJwk = privateKey; + portableDid.verificationMethods[0].publicKeyJwk = publicKey; // Create the DID using the key set. let did = await DidJwk.fromKeys({ keyManager, - verificationMethods: keySet.verificationMethods! + verificationMethods: portableDid.verificationMethods! }); // Verrify the DID document does not contain any verification relationships other than @@ -437,6 +434,7 @@ describe('DidJwk', () => { it('throws an error if no verification methods are given', async () => { try { + // @ts-expect-error - Test case where verificationMethods is undefined. await DidJwk.fromKeys({}); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -454,10 +452,10 @@ describe('DidJwk', () => { }); it('throws an error if the given key set is missing a public key', async () => { - delete keySet.verificationMethods![0].publicKeyJwk; + delete portableDid.verificationMethods[0].publicKeyJwk; try { - await DidJwk.fromKeys(keySet); + await DidJwk.fromKeys(portableDid); expect.fail('Expected an error to be thrown.'); } catch (error: any) { expect(error.message).to.include('does not contain a public and private key'); @@ -465,10 +463,10 @@ describe('DidJwk', () => { }); it('throws an error if the given key set is missing a private key', async () => { - delete keySet.verificationMethods![0].privateKeyJwk; + delete portableDid.verificationMethods[0].privateKeyJwk; try { - await DidJwk.fromKeys(keySet); + await DidJwk.fromKeys(portableDid); expect.fail('Expected an error to be thrown.'); } catch (error: any) { expect(error.message).to.include('does not contain a public and private key'); @@ -476,7 +474,7 @@ describe('DidJwk', () => { }); it('throws an error if the key set contains two or more keys', async () => { - const verificationMethod: DidKeySetVerificationMethod = { + const verificationMethod: PortableDidVerificationMethod = { publicKeyJwk: { kty : 'OKP', crv : 'Ed25519', From be13b7136d9b329dcec96dfa384b7c2947fa420c Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 25 Jan 2024 13:21:41 -0500 Subject: [PATCH 18/39] Reorganize tests and reintroduce DidResolver Signed-off-by: Frank Hinek --- packages/dids/old/src/did-ion.ts | 4 +- packages/dids/old/src/did-key.ts | 4 +- packages/dids/old/tests/did-ion.spec.ts | 6 +- packages/dids/src/did-resolver.ts | 8 - packages/dids/src/methods/did-dht.ts | 2 +- packages/dids/src/methods/did-jwk.ts | 2 +- packages/dids/src/methods/did-method.ts | 25 +- packages/dids/src/methods/did-web.ts | 2 +- packages/dids/src/resolver/did-resolver.ts | 231 ++++++++++++++++++ .../dids/src/resolver/resolver-cache-noop.ts | 26 ++ packages/dids/src/types.ts | 9 +- packages/dids/src/types/did-core.ts | 63 +---- .../test-vectors/did-resolver/resolve.json | 0 .../dids/tests/{ => methods}/did-dht.spec.ts | 8 +- .../dids/tests/{ => methods}/did-jwk.spec.ts | 10 +- .../tests/{ => methods}/did-method.spec.ts | 8 +- .../dids/tests/{ => methods}/did-web.spec.ts | 4 +- .../dids/tests/resolver/did-resolver.spec.ts | 201 +++++++++++++++ 18 files changed, 506 insertions(+), 107 deletions(-) delete mode 100644 packages/dids/src/did-resolver.ts create mode 100644 packages/dids/src/resolver/did-resolver.ts create mode 100644 packages/dids/src/resolver/resolver-cache-noop.ts create mode 100644 packages/dids/tests/fixtures/test-vectors/did-resolver/resolve.json rename packages/dids/tests/{ => methods}/did-dht.spec.ts (99%) rename packages/dids/tests/{ => methods}/did-jwk.spec.ts (98%) rename packages/dids/tests/{ => methods}/did-method.spec.ts (97%) rename packages/dids/tests/{ => methods}/did-web.spec.ts (94%) create mode 100644 packages/dids/tests/resolver/did-resolver.spec.ts diff --git a/packages/dids/old/src/did-ion.ts b/packages/dids/old/src/did-ion.ts index 7c832aa9f..5c865280c 100644 --- a/packages/dids/old/src/did-ion.ts +++ b/packages/dids/old/src/did-ion.ts @@ -7,7 +7,7 @@ import IonProofOfWork from '@decentralized-identity/ion-pow-sdk'; import { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto'; import { IonDid, IonPublicKeyPurpose, IonRequest } from '@decentralized-identity/ion-sdk'; -import type { DidDocument, DidKeySetVerificationMethodKey, DidMethod, DidResolutionOptions, DidResolutionResult, DidService, DwnServiceEndpoint, PortableDid } from './types.js'; +import type { DidDocument, PortableDidVerificationMethod, DidMethod, DidResolutionOptions, DidResolutionResult, DidService, DwnServiceEndpoint, PortableDid } from './types.js'; import { getServices, isDwnServiceEndpoint, parseDid } from './utils.js'; @@ -29,7 +29,7 @@ export type DidIonCreateOptions = { export type DidIonKeySet = { recoveryKey?: JwkKeyPair; updateKey?: JwkKeyPair; - verificationMethodKeys?: DidKeySetVerificationMethodKey[]; + verificationMethodKeys?: PortableDidVerificationMethod[]; } enum OperationType { diff --git a/packages/dids/old/src/did-key.ts b/packages/dids/old/src/did-key.ts index aafba5df0..3dccc0a94 100644 --- a/packages/dids/old/src/did-key.ts +++ b/packages/dids/old/src/did-key.ts @@ -17,7 +17,7 @@ import type { VerificationMethod, DidResolutionResult, DidResolutionOptions, - DidKeySetVerificationMethodKey, + PortableDidVerificationMethod, } from './types.js'; import { getVerificationMethodTypes, parseDid } from './utils.js'; @@ -81,7 +81,7 @@ export type DidKeyIdentifier = { } export type DidKeyKeySet = { - verificationMethodKeys?: DidKeySetVerificationMethodKey[]; + verificationMethodKeys?: PortableDidVerificationMethod[]; } export class DidKeyMethod implements DidMethod { diff --git a/packages/dids/old/tests/did-ion.spec.ts b/packages/dids/old/tests/did-ion.spec.ts index 17b45de12..e6efaf3b7 100644 --- a/packages/dids/old/tests/did-ion.spec.ts +++ b/packages/dids/old/tests/did-ion.spec.ts @@ -10,7 +10,7 @@ import type { DidService, DidDocument, DwnServiceEndpoint, - DidKeySetVerificationMethodKey, + PortableDidVerificationMethod, } from '../src/types.js'; import { didIonCreateTestVectors } from './fixtures/test-vectors/did-ion.js'; @@ -19,7 +19,7 @@ import { DidIonCreateOptions, DidIonKeySet, DidIonMethod } from '../src/did-ion. describe('DidIonMethod', () => { let testRecoveryKey: JwkKeyPair; let testUpdateKey: JwkKeyPair; - let testVerificationMethodKeys: DidKeySetVerificationMethodKey[]; + let testVerificationMethodKeys: PortableDidVerificationMethod[]; let testKeySet: DidIonKeySet; beforeEach(() => { @@ -31,7 +31,7 @@ describe('DidIonMethod', () => { testUpdateKey.privateKeyJwk.kid = 'test-update-1'; testUpdateKey.publicKeyJwk.kid = 'test-update-1'; - testVerificationMethodKeys = structuredClone(didIonCreateTestVectors[0].input.keySet.verificationMethodKeys) as DidKeySetVerificationMethodKey[]; + testVerificationMethodKeys = structuredClone(didIonCreateTestVectors[0].input.keySet.verificationMethodKeys) as PortableDidVerificationMethod[]; testVerificationMethodKeys[0].publicKeyJwk!.kid = 'test-kid'; testKeySet = { diff --git a/packages/dids/src/did-resolver.ts b/packages/dids/src/did-resolver.ts deleted file mode 100644 index d5cd5c6b6..000000000 --- a/packages/dids/src/did-resolver.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { DidResolutionResult } from './types/did-core.js'; - -export const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = { - '@context' : 'https://w3id.org/did-resolution/v1', - didResolutionMetadata : {}, - didDocument : null, - didDocumentMetadata : {}, -}; \ No newline at end of file diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index dbc6f69d8..263e483e1 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -26,8 +26,8 @@ import type { import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; import { DidError, DidErrorCode } from '../did-error.js'; -import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; import { DidVerificationRelationship } from '../types/did-core.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../resolver/did-resolver.js'; interface Bep44Message { k: Uint8Array; diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index a3e93967f..fb5b372d2 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -17,7 +17,7 @@ import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerific import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; import { DidError, DidErrorCode } from '../did-error.js'; -import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../resolver/did-resolver.js'; /** * Defines the set of options available when creating a new Decentralized Identifier (DID) with the diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index 5ce04ce0e..c3d213888 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -188,17 +188,16 @@ export interface DidMethodResolver { } /** - * Format to document a DID identifier, along with its associated data, - * which can be exported, saved to a file, or imported. The intent is - * bundle all of the necessary metadata to enable usage of the DID in - * different contexts. + * Format to document a DID identifier, along with its associated data, which can be exported, + * saved to a file, or imported. The intent is bundle all of the necessary metadata to enable usage + * of the DID in different contexts. */ /** - * Format that documents the metadata of a Decentralized Identifier (DID) to enable usage of the DID - * in different contexts. + * Format that documents the key material and metadata of a Decentralized Identifier (DID) to enable + * usage of the DID in different contexts. * - * @remarks - * This format is useful for exporting, saving to a file, or importing a DID. + * This format is useful for exporting, saving to a file, or importing a DID across process + * boundaries or between different DID method implementations. * * @example * ```ts @@ -227,13 +226,11 @@ export interface PortableDid { } /** - * Represents a verification method within a DID Key Set, including both public and private key - * components, and specifies the purposes for which the verification method can be used. + * Represents a verification method within a {@link PortableDid}, including the private key and + * the purposes for which the verification method can be used. * - * This interface extends {@link DidVerificationMethod}, providing a structure for a cryptographic - * key pair (public and private keys) with optional purposes. It is used in the context of - * Decentralized Identifiers (DIDs) where key pairs are associated with specific verification - * relationships. + * This interface extends {@link DidVerificationMethod}, providing a structure to document the key + * material and metadata associated with a DID's verification methods. */ export interface PortableDidVerificationMethod extends Partial { /** diff --git a/packages/dids/src/methods/did-web.ts b/packages/dids/src/methods/did-web.ts index 8ed80d29e..4a2b2c2a6 100644 --- a/packages/dids/src/methods/did-web.ts +++ b/packages/dids/src/methods/did-web.ts @@ -2,7 +2,7 @@ import type { DidDocument, DidResolutionOptions, DidResolutionResult } from '../ import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; -import { EMPTY_DID_RESOLUTION_RESULT } from '../did-resolver.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../resolver/did-resolver.js'; /** * The `DidWeb` class provides an implementation of the `did:web` DID method. diff --git a/packages/dids/src/resolver/did-resolver.ts b/packages/dids/src/resolver/did-resolver.ts new file mode 100644 index 000000000..c670f8dfa --- /dev/null +++ b/packages/dids/src/resolver/did-resolver.ts @@ -0,0 +1,231 @@ +import type { KeyValueStore } from '@web5/common'; + +import type { DidMethodResolver } from '../methods/did-method.js'; +import type { DidDereferencingOptions, DidDereferencingResult, DidResolutionOptions, DidResolutionResult, DidResource } from '../types/did-core.js'; + +import { DidUri } from '../did-uri.js'; +import { DidErrorCode } from '../did-error.js'; +import { DidResolverCacheNoop } from './resolver-cache-noop.js'; + +/** + * Interface for cache implementations used by {@link DidResolver} to store resolved DID documents. + */ +export interface DidResolverCache extends KeyValueStore {} + +export type DidResolverOptions = { + didResolvers: DidMethodResolver[]; + cache?: DidResolverCache; +} + +export const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = { + '@context' : 'https://w3id.org/did-resolution/v1', + didResolutionMetadata : {}, + didDocument : null, + didDocumentMetadata : {}, +}; + +/** + * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to + * their corresponding DID documents. + * + * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver` + * instances, each responsible for a specific DID method. It also employs a caching mechanism to + * store and retrieve previously resolved DID documents for efficiency. + * + * Usage: + * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache. + * - Use `resolve` to resolve a DID to its DID Resolution Result. + * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods. + * + * @example + * ```ts + * const resolver = new DidResolver({ + * didResolvers: [], + * cache: new DidResolverCacheNoop() + * }); + * + * const resolutionResult = await resolver.resolve('did:example:123456'); + * const dereferenceResult = await resolver.dereference({ didUri: 'did:example:123456#key-1' }); + * ``` + */ +export class DidResolver { + /** + * A cache for storing resolved DID documents. + */ + private cache: DidResolverCache; + + /** + * A map to store method resolvers against method names. + */ + private didResolvers: Map = new Map(); + + /** + * Constructs a new `DidResolver`. + * + * @param options - The options for constructing the `DidResolver`. + * @param options.didResolvers - An array of `DidMethodResolver` instances. + * @param options.cache - Optional. A cache for storing resolved DID documents. If not provided, a no-operation cache is used. + */ + constructor(options: DidResolverOptions) { + this.cache = options.cache || DidResolverCacheNoop; + + for (const resolver of options.didResolvers) { + this.didResolvers.set(resolver.methodName, resolver); + } + } + + /** + * Resolves a DID to a DID Resolution Result. + * If the DID Resolution Result is present in the cache, it returns the cached + * result. Otherwise, it uses the appropriate method resolver to resolve + * the DID, stores the resolution result in the cache, and returns the + * resolultion result. + * + * Note: The method signature for resolve() in this implementation must match + * the `DidResolver` implementation in + * {@link https://github.com/TBD54566975/dwn-sdk-js | dwn-sdk-js} so that + * Web5 apps and the underlying DWN instance can share the same DID + * resolution cache. + * + * @param didUri - The DID or DID URL to resolve. + * @returns A promise that resolves to the DID Resolution Result. + */ + public async resolve(didUri: string, options?: DidResolutionOptions): Promise { + + const parsedDid = DidUri.parse(didUri); + if (!parsedDid) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { + error : DidErrorCode.InvalidDid, + errorMessage : `Invalid DID URI: ${didUri}` + } + }; + } + + const resolver = this.didResolvers.get(parsedDid.method); + if (!resolver) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { + error : DidErrorCode.MethodNotSupported, + errorMessage : `Method not supported: ${parsedDid.method}` + } + }; + } + + const cachedResolutionResult = await this.cache.get(parsedDid.uri); + + if (cachedResolutionResult) { + return cachedResolutionResult; + } else { + const resolutionResult = await resolver.resolve(parsedDid.uri, options); + + await this.cache.set(parsedDid.uri, resolutionResult); + + return resolutionResult; + } + } + + /** + * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource. + * + * + * This method interprets the DID URL's components, which include the DID method, method-specific + * identifier, path, query, and fragment, and retrieves the related resource as per the DID Core + * specifications. + * + * The dereferencing process involves resolving the DID contained in the DID URL to a DID document, + * and then extracting the specific part of the document identified by the fragment in the DID URL. + * If no fragment is specified, the entire DID document is returned. + * + * This method supports resolution of different components within a DID document such as service + * endpoints and verification methods, based on their IDs. It accommodates both full and + * DID URLs as specified in the DID Core specification. + * + * More information on DID URL dereferencing can be found in the + * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}. + * + * TODO: This is a partial implementation and does not fully implement DID URL dereferencing. (https://github.com/TBD54566975/web5-js/issues/387) + * + * @param didUrl - The DID URL string to dereference. + * @param [dereferenceOptions] - Input options to the dereference function. Optional. + * @returns a {@link DidDereferencingResult} + */ + async dereference( + didUrl: string, + _options?: DidDereferencingOptions + ): Promise { + + // Validate the given `didUrl` confirms to the DID URL syntax. + const parsedDidUrl = DidUri.parse(didUrl); + + if (!parsedDidUrl) { + return { + dereferencingMetadata : { error: DidErrorCode.InvalidDidUrl }, + contentStream : null, + contentMetadata : {} + }; + } + + // Obtain the DID document for the input DID by executing DID resolution. + const { didDocument, didResolutionMetadata, didDocumentMetadata } = await this.resolve(parsedDidUrl.uri); + + if (!didDocument) { + return { + dereferencingMetadata : { error: didResolutionMetadata.error }, + contentStream : null, + contentMetadata : {} + }; + } + + // Return the entire DID Document if no query or fragment is present on the DID URL. + if (!parsedDidUrl.fragment || parsedDidUrl.query) { + return { + dereferencingMetadata : { contentType: 'application/did+json' }, + contentStream : didDocument, + contentMetadata : didDocumentMetadata + }; + } + + const { service = [], verificationMethod = [] } = didDocument; + + // Create a set of possible id matches. The DID spec allows for an id to be the entire + // did#fragment or just #fragment. + // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}. + // Using a Set for fast string comparison since some DID methods have long identifiers. + const idSet = new Set([didUrl, parsedDidUrl.fragment, `#${parsedDidUrl.fragment}`]); + + let didResource: DidResource | undefined; + + // Find the first matching verification method in the DID document. + for (let vm of verificationMethod) { + if (idSet.has(vm.id)) { + didResource = vm; + break; + } + } + + // Find the first matching service in the DID document. + for (let svc of service) { + if (idSet.has(svc.id)) { + didResource = svc; + break; + } + } + + if (didResource) { + return { + dereferencingMetadata : { contentType: 'application/did+json' }, + contentStream : didResource, + contentMetadata : didResolutionMetadata + }; + } else { + return { + dereferencingMetadata : { error: DidErrorCode.NotFound }, + contentStream : null, + contentMetadata : {}, + }; + } + } +} \ No newline at end of file diff --git a/packages/dids/src/resolver/resolver-cache-noop.ts b/packages/dids/src/resolver/resolver-cache-noop.ts new file mode 100644 index 000000000..dcbadf732 --- /dev/null +++ b/packages/dids/src/resolver/resolver-cache-noop.ts @@ -0,0 +1,26 @@ +import type { DidResolverCache } from './did-resolver.js'; +import type { DidResolutionResult } from '../types/did-core.js'; + +/** + * No-op cache that is used as the default cache for did-resolver. + * + * The motivation behind using a no-op cache as the default stems from the desire to maximize the + * potential for this library to be used in as many JS runtimes as possible. + */ +export const DidResolverCacheNoop: DidResolverCache = { + get: function (_key: string): Promise { + return null as any; + }, + set: function (_key: string, _value: DidResolutionResult): Promise { + return null as any; + }, + delete: function (_key: string): Promise { + return null as any; + }, + clear: function (): Promise { + return null as any; + }, + close: function (): Promise { + return null as any; + } +}; \ No newline at end of file diff --git a/packages/dids/src/types.ts b/packages/dids/src/types.ts index df1aa466b..59cfff599 100644 --- a/packages/dids/src/types.ts +++ b/packages/dids/src/types.ts @@ -1,11 +1,4 @@ -import type { KeyValueStore } from '@web5/common'; - -import type { DidDocument, DidResolutionResult } from './types/did-core.js'; - -/** - * implement this interface to provide your own cache for did resolution results. can be plugged in through Web5 API - */ -export type DidResolverCache = KeyValueStore; +import type { DidDocument } from './types/did-core.js'; type DidMetadata = { /** diff --git a/packages/dids/src/types/did-core.ts b/packages/dids/src/types/did-core.ts index dd28ef322..5e68965ed 100644 --- a/packages/dids/src/types/did-core.ts +++ b/packages/dids/src/types/did-core.ts @@ -527,48 +527,8 @@ export interface DidVerificationMethod { } /** - * !TODO: Rewrite this to use the enum below * Represents the various verification relationships defined in a DID document. * - * These relationships indicate the intended use of verification methods associated with a DID. Each - * type specifies a particular way in which a verification method (such as a public key) can be used - * by the DID subject. - * - * The DID Core Specification defines the following verification relationships: - * - `assertionMethod`: Specifies how the DID subject is expected to express claims, such as for - * issuing Verifiable Credentials. This relationship is typically used when the - * DID subject is the issuer of a credential. - * - * - `authentication`: Specifies how the DID subject is expected to be authenticated. This is - * commonly used for purposes like logging into a website or participating in - * challenge-response protocols. - * - * - `keyAgreement`: Specifies how an entity can generate encryption material to communicate - * confidentially with the DID subject. Often used in scenarios requiring secure - * communication channels. - * - * - `capabilityDelegation`: Specifies a mechanism used by the DID subject to delegate a - * cryptographic capability to another party. This can include delegating - * access to a specific resource or API. - * - * - `capabilityInvocation`: Specifies a verification method used by the DID subject to invoke a - * cryptographic capability. This is frequently associated with - * authorization actions, like updating the DID Document. - * - * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, § Verification Relationships} - */ - -// export type DidVerificationRelationship = -// | 'assertionMethod' -// | 'authentication' -// | 'keyAgreement' -// | 'capabilityDelegation' -// | 'capabilityInvocation'; - -/** - * An array of constant strings representing the standard verification relationships defined - * in the DID Core Specification. - * * These verification relationships indicate the intended usage of verification methods within a DID * document. Each relationship signifies a different purpose or context in which a verification * method can be used, such as authentication, assertionMethod, keyAgreement, capabilityDelegation, @@ -576,45 +536,44 @@ export interface DidVerificationMethod { * consistent referencing and implementation across different DID methods. * * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, § Verification Relationships} - * @example - * ```ts - * // Example usage of DID_VERIFICATION_RELATIONSHIPS in a DID method implementation - * if (didDocument.authentication.includes(someVerificationMethod)) { - * // Handle authentication verification method - * } - * ``` */ export enum DidVerificationRelationship { /** - * Indicates that the verification method is intended to be used for authentication purposes. + * Specifies how the DID subject is expected to be authenticated. This is commonly used for + * purposes like logging into a website or participating in challenge-response protocols. * * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, § Authentication} */ authentication = 'authentication', /** - * Indicates that the verification method is intended to be used for assertion purposes. + * Specifies how the DID subject is expected to express claims, such as for issuing Verifiable + * Credentials. This relationship is typically used when the DID subject is the issuer of a + * credential. * * @see {@link hthttps://www.w3.org/TR/did-core/#assertion | DID Core Specification, § Assertion} */ assertionMethod = 'assertionMethod', /** - * Indicates that the verification method is intended to be used for key agreement purposes. + * Specifies how an entity can generate encryption material to communicate confidentially with the + * DID subject. Often used in scenarios requiring secure communication channels. * * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, § Key Agreement} */ keyAgreement = 'keyAgreement', /** - * Indicates that the verification method is intended to be used for capability delegation purposes. + * Specifies a mechanism used by the DID subject to delegate a cryptographic capability to another + * party. This can include delegating access to a specific resource or API. * * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, § Capability Delegation} */ capabilityDelegation = 'capabilityDelegation', /** - * Indicates that the verification method is intended to be used for capability invocation purposes. + * Specifies a verification method used by the DID subject to invoke a cryptographic capability. + * This is frequently associated with authorization actions, like updating the DID Document. * * @see {@link https://www.w3.org/TR/did-core/#capability-invocation | DID Core Specification, § Capability Invocation} */ diff --git a/packages/dids/tests/fixtures/test-vectors/did-resolver/resolve.json b/packages/dids/tests/fixtures/test-vectors/did-resolver/resolve.json new file mode 100644 index 000000000..e69de29bb diff --git a/packages/dids/tests/did-dht.spec.ts b/packages/dids/tests/methods/did-dht.spec.ts similarity index 99% rename from packages/dids/tests/did-dht.spec.ts rename to packages/dids/tests/methods/did-dht.spec.ts index e3e7ee3f7..2c3069af8 100644 --- a/packages/dids/tests/did-dht.spec.ts +++ b/packages/dids/tests/methods/did-dht.spec.ts @@ -5,11 +5,11 @@ import { expect } from 'chai'; import { Convert } from '@web5/common'; import { LocalKmsCrypto } from '@web5/crypto'; -import type { DidResolutionResult } from '../src/index.js'; -import type { PortableDid } from '../src/methods/did-method.js'; +import type { DidResolutionResult } from '../../src/index.js'; +import type { PortableDid } from '../../src/methods/did-method.js'; -import { DidErrorCode } from '../src/did-error.js'; -import { DidDht, DidDhtRegisteredDidType } from '../src/methods/did-dht.js'; +import { DidErrorCode } from '../../src/did-error.js'; +import { DidDht, DidDhtRegisteredDidType } from '../../src/methods/did-dht.js'; // Helper function to create a mocked fetch response that fails and returns a 404 Not Found. const fetchNotFoundResponse = () => ({ diff --git a/packages/dids/tests/did-jwk.spec.ts b/packages/dids/tests/methods/did-jwk.spec.ts similarity index 98% rename from packages/dids/tests/did-jwk.spec.ts rename to packages/dids/tests/methods/did-jwk.spec.ts index 414da4613..d9d24de43 100644 --- a/packages/dids/tests/did-jwk.spec.ts +++ b/packages/dids/tests/methods/did-jwk.spec.ts @@ -5,12 +5,12 @@ import sinon from 'sinon'; import { expect } from 'chai'; import { LocalKmsCrypto } from '@web5/crypto'; -import type { DidDocument } from '../src/types/did-core.js'; -import type { PortableDid, PortableDidVerificationMethod } from '../src/methods/did-method.js'; +import type { DidDocument } from '../../src/types/did-core.js'; +import type { PortableDid, PortableDidVerificationMethod } from '../../src/methods/did-method.js'; -import { DidErrorCode } from '../src/did-error.js'; -import { DidJwk } from '../src/methods/did-jwk.js'; -import DidJwkResolveTestVector from '../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; +import { DidErrorCode } from '../../src/did-error.js'; +import { DidJwk } from '../../src/methods/did-jwk.js'; +import DidJwkResolveTestVector from '../../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; describe('DidJwk', () => { let keyManager: LocalKmsCrypto; diff --git a/packages/dids/tests/did-method.spec.ts b/packages/dids/tests/methods/did-method.spec.ts similarity index 97% rename from packages/dids/tests/did-method.spec.ts rename to packages/dids/tests/methods/did-method.spec.ts index f3adff6fc..3733db1b0 100644 --- a/packages/dids/tests/did-method.spec.ts +++ b/packages/dids/tests/methods/did-method.spec.ts @@ -4,11 +4,11 @@ import sinon from 'sinon'; import { expect } from 'chai'; import { LocalKmsCrypto } from '@web5/crypto'; -import type { Did } from '../src/methods/did-method.js'; -import type { DidDocument, DidVerificationMethod } from '../src/types/did-core.js'; +import type { Did } from '../../src/methods/did-method.js'; +import type { DidDocument, DidVerificationMethod } from '../../src/types/did-core.js'; -import { DidMethod } from '../src/methods/did-method.js'; -import { DidJwk } from '../src/methods/did-jwk.js'; +import { DidMethod } from '../../src/methods/did-method.js'; +import { DidJwk } from '../../src/methods/did-jwk.js'; class DidTest extends DidMethod { public static async getSigningMethod({ didDocument, methodId = '#0' }: { diff --git a/packages/dids/tests/did-web.spec.ts b/packages/dids/tests/methods/did-web.spec.ts similarity index 94% rename from packages/dids/tests/did-web.spec.ts rename to packages/dids/tests/methods/did-web.spec.ts index a35f72c10..c26ce637a 100644 --- a/packages/dids/tests/did-web.spec.ts +++ b/packages/dids/tests/methods/did-web.spec.ts @@ -3,8 +3,8 @@ import type { UnwrapPromise } from '@web5/common'; import sinon from 'sinon'; import { expect } from 'chai'; -import { DidWeb } from '../src/methods/did-web.js'; -import DidWebResolveTestVector from '../../../test-vectors/did_web/resolve.json' assert { type: 'json' }; +import { DidWeb } from '../../src/methods/did-web.js'; +import DidWebResolveTestVector from '../../../../test-vectors/did_web/resolve.json' assert { type: 'json' }; // Helper function to create a mocked fetch response that fails and returns a 404 Not Found. const fetchNotFoundResponse = () => ({ diff --git a/packages/dids/tests/resolver/did-resolver.spec.ts b/packages/dids/tests/resolver/did-resolver.spec.ts new file mode 100644 index 000000000..050131b47 --- /dev/null +++ b/packages/dids/tests/resolver/did-resolver.spec.ts @@ -0,0 +1,201 @@ +import * as sinon from 'sinon'; +import { expect } from 'chai'; + +// import type { DidResolverCache } from '../../src/resolver/did-resolver.js'; + +import { DidJwk } from '../../src/methods/did-jwk.js'; +import { DidResource } from '../../src/types/did-core.js'; +import { isDidVerificationMethod } from '../../src/utils.js'; +import { DidResolver } from '../../src/resolver/did-resolver.js'; +// import { didResolverTestVectors } from './fixtures/test-vectors/did-resolver.js'; + +describe('DidResolver', () => { + describe('resolve()', () => { + let didResolver: DidResolver; + + beforeEach(() => { + const didMethodApis = [DidJwk]; + didResolver = new DidResolver({ didResolvers: didMethodApis }); + }); + + // it('passes test vectors', async () => { + // for (const vector of didResolverTestVectors) { + // const didResolutionResult = await didResolver.resolve(vector.input); + // expect(didResolutionResult.didDocument).to.deep.equal(vector.output); + // } + // }); + + it('returns an invalidDid error if the DID cannot be parsed', async () => { + const didResolutionResult = await didResolver.resolve('unparseable:did'); + expect(didResolutionResult).to.exist; + expect(didResolutionResult).to.have.property('@context'); + expect(didResolutionResult).to.have.property('didDocument'); + expect(didResolutionResult).to.have.property('didDocumentMetadata'); + expect(didResolutionResult).to.have.property('didResolutionMetadata'); + expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'invalidDid'); + }); + + it('returns a methodNotSupported error if the DID method is not supported', async () => { + const didResolutionResult = await didResolver.resolve('did:unknown:abc123'); + expect(didResolutionResult).to.exist; + expect(didResolutionResult).to.have.property('@context'); + expect(didResolutionResult).to.have.property('didDocument'); + expect(didResolutionResult).to.have.property('didDocumentMetadata'); + expect(didResolutionResult).to.have.property('didResolutionMetadata'); + expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'methodNotSupported'); + }); + + // describe('with LevelDB cache', () => { + // let cache: DidResolverCache; + + // before(() => { + // cache = new DidResolverCacheLevel(); + // }); + + // beforeEach(async () => { + // await cache.clear(); + // const didMethodApis = [DidKeyMethod]; + // didResolver = new DidResolver({ cache, didResolvers: didMethodApis }); + // }); + + // after(async () => { + // await cache.clear(); + // }); + + // it('should cache miss for the first resolution attempt', async () => { + // const did = 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D'; + // // Create a Sinon spy on the get method of the cache + // const cacheGetSpy = sinon.spy(cache, 'get'); + + // await didResolver.resolve(did); + + // // Verify that cache.get() was called. + // expect(cacheGetSpy.called).to.be.true; + + // // Verify the cache returned undefined. + // const getCacheResult = await cacheGetSpy.returnValues[0]; + // expect(getCacheResult).to.be.undefined; + + // cacheGetSpy.restore(); + // }); + + // it('should cache hit for the second resolution attempt', async () => { + // const did = 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D'; + // // Create a Sinon spy on the get method of the cache + // const cacheGetSpy = sinon.spy(cache, 'get'); + // const cacheSetSpy = sinon.spy(cache, 'set'); + + // await didResolver.resolve(did); + + // // Verify there was a cache miss. + // expect(cacheGetSpy.calledOnce).to.be.true; + // expect(cacheSetSpy.calledOnce).to.be.true; + + // // Verify the cache returned undefined. + // let getCacheResult = await cacheGetSpy.returnValues[0]; + // expect(getCacheResult).to.be.undefined; + + // // Resolve the same DID again. + // await didResolver.resolve(did); + + // // Verify that cache.get() was called. + // expect(cacheGetSpy.called).to.be.true; + // expect(cacheGetSpy.calledTwice).to.be.true; + + // // Verify there was a cache hit this time. + // getCacheResult = await cacheGetSpy.returnValues[1]; + // expect(getCacheResult).to.not.be.undefined; + // expect(getCacheResult).to.have.property('@context'); + // expect(getCacheResult).to.have.property('didDocument'); + // expect(getCacheResult).to.have.property('didDocumentMetadata'); + // expect(getCacheResult).to.have.property('didResolutionMetadata'); + + // cacheGetSpy.restore(); + // }); + // }); + }); + + describe('dereference()', () => { + let didResolver: DidResolver; + + beforeEach(() => { + const didMethodApis = [DidJwk]; + didResolver = new DidResolver({ didResolvers: didMethodApis }); + }); + + it('returns a result with contentStream set to null and dereferenceMetadata.error set if resolution fails', async () => { + const result = await didResolver.dereference('abcd123;;;'); + expect(result.contentStream).to.be.null; + expect(result.dereferencingMetadata.error).to.exist; + expect(result.dereferencingMetadata.error).to.equal('invalidDidUrl'); + }); + + it('returns a DID verification method resource as the value of contentStream if found', async () => { + const did = await DidJwk.create(); + + const result = await didResolver.dereference(did.didDocument!.verificationMethod![0].id); + expect(result.contentStream).to.be.not.be.null; + expect(result.dereferencingMetadata.error).to.not.exist; + + const didResource = result.contentStream; + expect(isDidVerificationMethod(didResource)).to.be.true; + }); + + it('returns a DID service resource as the value of contentStream if found', async () => { + // Create an instance of DidResolver + const resolver = new DidResolver({ didResolvers: [] }); + + // Stub the resolve method + const mockDidResolutionResult = { + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument : { + id : 'did:example:123456789abcdefghi', + service : [ + { + id : '#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : { + nodes: [ 'https://dwn.tbddev.test/dwn0' ] + } + } + ], + }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + }; + + const resolveStub = sinon.stub(resolver, 'resolve').resolves(mockDidResolutionResult); + + const testDidUrl = 'did:example:123456789abcdefghi#dwn'; + const result = await resolver.dereference(testDidUrl); + + expect(resolveStub.calledOnce).to.be.true; + expect(result.contentStream).to.deep.equal(mockDidResolutionResult.didDocument.service[0]); + + // Restore the original resolve method + resolveStub.restore(); + }); + + it('returns the entire DID document as the value of contentStream if the DID URL contains no fragment', async () => { + const did = await DidJwk.create(); + + const result = await didResolver.dereference(did.uri); + expect(result.contentStream).to.be.not.be.null; + expect(result.dereferencingMetadata.error).to.not.exist; + + const didResource = result.contentStream as DidResource; + if (!(!isDidVerificationMethod(didResource) && !isDidVerificationMethod(didResource))) throw new Error('Expected DidResource to be a DidDocument'); + expect(didResource['@context']).to.exist; + expect(didResource['@context']).to.include('https://www.w3.org/ns/did/v1'); + }); + + it('returns contentStream set to null and dereferenceMetadata.error set to notFound if resource is not found', async () => { + const did = await DidJwk.create(); + + const result = await didResolver.dereference(`${did.uri}#1`); + expect(result.contentStream).to.be.null; + expect(result.dereferencingMetadata.error).to.exist; + expect(result.dereferencingMetadata.error).to.equal('notFound'); + }); + }); +}); \ No newline at end of file From d14076a94c66ed87b5deb3e688fbc3fca68c8cbe Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 25 Jan 2024 13:34:26 -0500 Subject: [PATCH 19/39] Update package-lock.json Signed-off-by: Frank Hinek --- package-lock.json | 54 +++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8b8e8112..d7b34e8c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1180,8 +1180,6 @@ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" @@ -2488,9 +2486,9 @@ } }, "node_modules/@tbd54566975/dwn-sdk-js": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sdk-js/-/dwn-sdk-js-0.2.8.tgz", - "integrity": "sha512-oiKk+ekAQO94bUkt6yk+xkDY8uCGmNC+rKaYQLhAoTrhYrczeRSuDT04F5/vPBT5K6NfAoRcQsIyBmvgRCUvgA==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sdk-js/-/dwn-sdk-js-0.2.10.tgz", + "integrity": "sha512-CoKO8+NciwWNzD4xRoAAgeElqQCXKM4Fc+zEHsUWD0M3E9v67hRWiTHI6AenUfQv1RSEB2H4GHUeUOHuEV72uw==", "dependencies": { "@ipld/dag-cbor": "9.0.3", "@js-temporal/polyfill": "0.4.4", @@ -2575,9 +2573,9 @@ } }, "node_modules/@tbd54566975/dwn-sql-store": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sql-store/-/dwn-sql-store-0.2.4.tgz", - "integrity": "sha512-LwSpQMcKtNEAj8ffn/UGrYwiENjN4S7rIDX5FDJ4+qjnMbF7I051i1bpw3INKnrtnVWAuynD5033EHSKLml0Zw==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sql-store/-/dwn-sql-store-0.2.6.tgz", + "integrity": "sha512-N5SSyKGgHoW7ttWW6xrPq4xK7aYfxDvrmXdYEi+eA3qlT+Wzi5HZfrlcSnFIHee9+s56V6WpJw1AQ6XmjZH2QQ==", "dev": true, "dependencies": { "@ipld/dag-cbor": "^9.0.5", @@ -3649,9 +3647,9 @@ "link": true }, "node_modules/@web5/dwn-server": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@web5/dwn-server/-/dwn-server-0.1.7.tgz", - "integrity": "sha512-SlOL3Fzq/O43c7v+cJS+cMassuHyKQxmoPJQ7U/OjZNw51yHAveQJ3nKbxkUuiHIc+ERMKGE7tW4ignhxieSgQ==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@web5/dwn-server/-/dwn-server-0.1.9.tgz", + "integrity": "sha512-t1xpWGQ+hbIglu0OjZS3DG6Q8pmrxK2TmPo53YaxNpceKNT9tkqJqgssiIJzVWiQS90BmR/JULchKR/aQX1sOg==", "dev": true, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -4858,9 +4856,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "version": "1.0.30001580", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz", + "integrity": "sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==", "dev": true, "funding": [ { @@ -6021,9 +6019,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.643", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.643.tgz", - "integrity": "sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==", + "version": "1.4.645", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.645.tgz", + "integrity": "sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==", "dev": true, "peer": true }, @@ -7000,6 +6998,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } @@ -9173,9 +9172,9 @@ } }, "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.0.tgz", + "integrity": "sha512-R2gzz0NRm1QSQLu7IiNVXzvudxLbzF9G3EmwWbg5kYiCPyLVo7mGrvilTxDq/zisq9thJ1c6lb9ImMF/xPstcA==", "dev": true, "engines": { "node": ">= 0.6.0" @@ -9976,11 +9975,6 @@ "@sinonjs/text-encoding": "^0.7.2", "just-extend": "^6.2.0", "path-to-regexp": "^6.2.1" - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { @@ -9990,7 +9984,6 @@ "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" - "@sinonjs/commons": "^3.0.0" } }, "node_modules/nise/node_modules/path-to-regexp": { @@ -11836,8 +11829,6 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" @@ -11845,9 +11836,6 @@ "engines": { "node": ">= 0.4" }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16576,7 +16564,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "@web5/api": "0.8.3", + "@web5/api": "0.8.4", "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", @@ -16944,6 +16932,7 @@ "@playwright/test": "1.40.1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", + "@types/dns-packet": "5.6.4", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@typescript-eslint/eslint-plugin": "6.4.0", @@ -17317,6 +17306,7 @@ "@playwright/test": "1.40.1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.5", + "@types/dns-packet": "5.6.4", "@types/eslint": "8.44.2", "@types/mocha": "10.0.1", "@typescript-eslint/eslint-plugin": "6.4.0", From 41487427d06a0f0fca94b090110a643379852201 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 25 Jan 2024 14:17:12 -0500 Subject: [PATCH 20/39] Rename P256 to Secp256r1 and add minimal tests Signed-off-by: Frank Hinek --- packages/crypto/src/index.ts | 2 +- .../src/primitives/{p256.ts => secp256r1.ts} | 176 ++--- .../crypto/tests/primitives/secp256r1.spec.ts | 652 ++++++++++++++++++ 3 files changed, 741 insertions(+), 89 deletions(-) rename packages/crypto/src/primitives/{p256.ts => secp256r1.ts} (84%) create mode 100644 packages/crypto/tests/primitives/secp256r1.spec.ts diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts index dfeab4a4c..0c1a5f81f 100644 --- a/packages/crypto/src/index.ts +++ b/packages/crypto/src/index.ts @@ -19,7 +19,7 @@ export * from './primitives/aes-ctr.js'; export * from './primitives/aes-gcm.js'; export * from './primitives/concat-kdf.js'; export * from './primitives/ed25519.js'; -export * from './primitives/p256.js'; +export * from './primitives/secp256r1.js'; export * from './primitives/pbkdf2.js'; export * from './primitives/secp256k1.js'; export * from './primitives/sha256.js'; diff --git a/packages/crypto/src/primitives/p256.ts b/packages/crypto/src/primitives/secp256r1.ts similarity index 84% rename from packages/crypto/src/primitives/p256.ts rename to packages/crypto/src/primitives/secp256r1.ts index 65f4c2eff..ccb958167 100644 --- a/packages/crypto/src/primitives/p256.ts +++ b/packages/crypto/src/primitives/secp256r1.ts @@ -1,6 +1,6 @@ import { Convert } from '@web5/common'; import { sha256 } from '@noble/hashes/sha256'; -import { p256 } from '@noble/curves/p256'; +import { secp256r1 } from '@noble/curves/p256'; import { numberToBytesBE } from '@noble/curves/abstract/utils'; import type { Jwk } from '../jose/jwk.js'; @@ -9,8 +9,8 @@ import type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyPara import { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js'; /** - * The `P256` class provides a comprehensive suite of utilities for working with - * the P-256 (aka secp256r1) elliptic curve, commonly used in blockchain and cryptographic + * The `Secp256r1` class provides a comprehensive suite of utilities for working with + * the secp256r1 (aka P-256) elliptic curve, commonly used in blockchain and cryptographic * applications. This class includes methods for key generation, conversion, signing, verification, * and Elliptic Curve Diffie-Hellman (ECDH) key agreement. * @@ -18,12 +18,12 @@ import { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH. * * Key Features: - * - Key Generation: Generate P-256 private keys in JWK format. + * - Key Generation: Generate secp256r1 private keys in JWK format. * - Key Conversion: Transform keys between raw byte arrays and JWK formats. * - Public Key Derivation: Derive public keys from private keys. * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys. - * - ECDSA Signing and Verification: Sign data and verify signatures with P-256 keys. - * - Key Validation: Validate the mathematical correctness of P-256 keys. + * - ECDSA Signing and Verification: Sign data and verify signatures with secp256r1 keys. + * - Key Validation: Validate the mathematical correctness of secp256r1 keys. * * The methods in this class are asynchronous, returning Promises to accommodate various * JavaScript environments, and use `Uint8Array` for binary data handling. @@ -31,43 +31,43 @@ import { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk * @example * ```ts * // Key Generation - * const privateKey = await P256.generateKey(); + * const privateKey = await Secp256r1.generateKey(); * * // Public Key Derivation - * const publicKey = await P256.computePublicKey({ key: privateKey }); - * console.log(publicKey === await P256.getPublicKey({ key: privateKey })); // Output: true + * const publicKey = await Secp256r1.computePublicKey({ key: privateKey }); + * console.log(publicKey === await Secp256r1.getPublicKey({ key: privateKey })); // Output: true * * // ECDH Shared Secret Computation - * const sharedSecret = await P256.sharedSecret({ + * const sharedSecret = await Secp256r1.sharedSecret({ * privateKeyA: privateKey, * publicKeyB: anotherPublicKey * }); * * // ECDSA Signing - * const signature = await P256.sign({ + * const signature = await Secp256r1.sign({ * key: privateKey, * data: new TextEncoder().encode('Message') * }); * * // ECDSA Signature Verification - * const isValid = await P256.verify({ + * const isValid = await Secp256r1.verify({ * key: publicKey, * signature: signature, * data: new TextEncoder().encode('Message') * }); * * // Key Conversion - * const publicKeyBytes = await P256.publicKeyToBytes({ publicKey }); - * const privateKeyBytes = await P256.privateKeyToBytes({ privateKey }); - * const compressedPublicKey = await P256.compressPublicKey({ publicKeyBytes }); - * const uncompressedPublicKey = await P256.decompressPublicKey({ publicKeyBytes }); + * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey }); + * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey }); + * const compressedPublicKey = await Secp256r1.compressPublicKey({ publicKeyBytes }); + * const uncompressedPublicKey = await Secp256r1.decompressPublicKey({ publicKeyBytes }); * * // Key Validation - * const isPrivateKeyValid = await P256.validatePrivateKey({ privateKeyBytes }); - * const isPublicKeyValid = await P256.validatePublicKey({ publicKeyBytes }); + * const isPrivateKeyValid = await Secp256r1.validatePrivateKey({ privateKeyBytes }); + * const isPublicKeyValid = await Secp256r1.validatePublicKey({ publicKeyBytes }); * ``` */ -export class P256 { +export class Secp256r1 { /** * Adjusts an ECDSA signature to a normalized, low-S form. * @@ -108,7 +108,7 @@ export class P256 { * @example * ```ts * const signature = new Uint8Array([...]); // Your ECDSA signature - * const adjustedSignature = await P256.adjustSignatureToLowS({ signature }); + * const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature }); * // Now 'adjustedSignature' is in the low-S form. * ``` * @@ -120,8 +120,8 @@ export class P256 { public static async adjustSignatureToLowS({ signature }: { signature: Uint8Array; }): Promise { - // Convert the signature to a `p256.Signature` object. - const signatureObject = p256.Signature.fromCompact(signature); + // Convert the signature to a `Secp256r1.Signature` object. + const signatureObject = secp256r1.Signature.fromCompact(signature); if (signatureObject.hasHighS()) { // Adjust the signature to low-S format if it's high-S. @@ -161,7 +161,7 @@ export class P256 { * @example * ```ts * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes - * const privateKey = await P256.bytesToPrivateKey({ privateKeyBytes }); + * const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes }); * ``` * * @param params - The parameters for the private key conversion. @@ -173,7 +173,7 @@ export class P256 { privateKeyBytes: Uint8Array; }): Promise { // Get the elliptic curve points (x and y coordinates) for the provided private key. - const points = await P256.getCurvePoints({ keyBytes: privateKeyBytes }); + const points = await Secp256r1.getCurvePoints({ keyBytes: privateKeyBytes }); // Construct the private key in JWK format. const privateKey: Jwk = { @@ -212,7 +212,7 @@ export class P256 { * @example * ```ts * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes - * const publicKey = await P256.bytesToPublicKey({ publicKeyBytes }); + * const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes }); * ``` * * @param params - The parameters for the public key conversion. @@ -224,7 +224,7 @@ export class P256 { publicKeyBytes: Uint8Array; }): Promise { // Get the elliptic curve points (x and y coordinates) for the provided public key. - const points = await P256.getCurvePoints({ keyBytes: publicKeyBytes }); + const points = await Secp256r1.getCurvePoints({ keyBytes: publicKeyBytes }); // Construct the public key in JWK format. const publicKey: Jwk = { @@ -252,7 +252,7 @@ export class P256 { * @example * ```ts * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes - * const compressedPublicKey = await P256.compressPublicKey({ + * const compressedPublicKey = await Secp256r1.compressPublicKey({ * publicKeyBytes: uncompressedPublicKeyBytes * }); * ``` @@ -266,7 +266,7 @@ export class P256 { publicKeyBytes: Uint8Array; }): Promise { // Decode Weierstrass points from the public key byte array. - const point = p256.ProjectivePoint.fromHex(publicKeyBytes); + const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes); // Return the compressed form of the public key. return point.toRawBytes(true); @@ -283,14 +283,14 @@ export class P256 { * JWK format. * * The process ensures that the derived public key correctly corresponds to the given private key, - * adhering to the P-256 elliptic curve standards. This method is useful in cryptographic + * adhering to the secp256r1 elliptic curve standards. This method is useful in cryptographic * operations where a public key is needed for operations like signature verification, but only * the private key is available. * * @example * ```ts - * const privateKey = { ... }; // A Jwk object representing a P-256 private key - * const publicKey = await P256.computePublicKey({ key: privateKey }); + * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key + * const publicKey = await Secp256r1.computePublicKey({ key: privateKey }); * ``` * * @param params - The parameters for the public key derivation. @@ -302,10 +302,10 @@ export class P256 { ComputePublicKeyParams ): Promise { // Convert the provided private key to a byte array. - const privateKeyBytes = await P256.privateKeyToBytes({ privateKey: key }); + const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey: key }); // Get the elliptic curve points (x and y coordinates) for the provided private key. - const points = await P256.getCurvePoints({ keyBytes: privateKeyBytes }); + const points = await Secp256r1.getCurvePoints({ keyBytes: privateKeyBytes }); // Construct the public key in JWK format. const publicKey: Jwk = { @@ -336,7 +336,7 @@ export class P256 { * @example * ```ts * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature - * const signature = await P256.convertDerToCompactSignature({ derSignature }); + * const signature = await Secp256r1.convertDerToCompactSignature({ derSignature }); * ``` * * @param params - The parameters for the signature conversion. @@ -347,9 +347,9 @@ export class P256 { public static async convertDerToCompactSignature({ derSignature }: { derSignature: Uint8Array; }): Promise { - // Convert the DER-encoded signature into a `p256.Signature` object. + // Convert the DER-encoded signature into a `Secp256r1.Signature` object. // This involves parsing the ASN.1 DER structure to extract the R and S components. - const signatureObject = p256.Signature.fromDER(derSignature); + const signatureObject = secp256r1.Signature.fromDER(derSignature); // Convert the signature object into compact R+S format, which concatenates the R and S values // into a single byte array. @@ -370,7 +370,7 @@ export class P256 { * @example * ```ts * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes - * const decompressedPublicKey = await P256.decompressPublicKey({ + * const decompressedPublicKey = await Secp256r1.decompressPublicKey({ * publicKeyBytes: compressedPublicKeyBytes * }); * ``` @@ -384,20 +384,20 @@ export class P256 { publicKeyBytes: Uint8Array; }): Promise { // Decode Weierstrass points from the public key byte array. - const point = p256.ProjectivePoint.fromHex(publicKeyBytes); + const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes); // Return the uncompressed form of the public key. return point.toRawBytes(false); } /** - * Generates a P-256 private key in JSON Web Key (JWK) format. + * Generates a secp256r1 private key in JSON Web Key (JWK) format. * * @remarks - * This method creates a new private key suitable for use with the P-256 + * This method creates a new private key suitable for use with the secp256r1 * elliptic curve. The key is generated using cryptographically secure random * number generation to ensure its uniqueness and security. The resulting - * private key adheres to the JWK format, specifically tailored for P-256, + * private key adheres to the JWK format, specifically tailored for secp256r1, * making it compatible with common cryptographic standards and easy to use in * various cryptographic processes. * @@ -412,17 +412,17 @@ export class P256 { * * @example * ```ts - * const privateKey = await P256.generateKey(); + * const privateKey = await Secp256r1.generateKey(); * ``` * * @returns A Promise that resolves to the generated private key in JWK format. */ public static async generateKey(): Promise { // Generate a random private key. - const privateKeyBytes = p256.utils.randomPrivateKey(); + const privateKeyBytes = secp256r1.utils.randomPrivateKey(); // Convert private key from bytes to JWK format. - const privateKey = await P256.bytesToPrivateKey({ privateKeyBytes }); + const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes }); // Compute the JWK thumbprint and set as the key ID. privateKey.kid = await computeJwkThumbprint({ jwk: privateKey }); @@ -434,7 +434,7 @@ export class P256 { * Retrieves the public key properties from a given private key in JWK format. * * @remarks - * This method extracts the public key portion from a P-256 private key in JWK format. It does + * This method extracts the public key portion from a secp256r1 private key in JWK format. It does * so by removing the private key property 'd' and making a shallow copy, effectively yielding the * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not * already defined. This approach is used under the assumption that a private key in JWK format @@ -448,8 +448,8 @@ export class P256 { * * @example * ```ts - * const privateKey = { ... }; // A Jwk object representing a P-256 private key - * const publicKey = await P256.getPublicKey({ key: privateKey }); + * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key + * const publicKey = await Secp256r1.getPublicKey({ key: privateKey }); * ``` * * @param params - The parameters for retrieving the public key properties. @@ -460,9 +460,9 @@ export class P256 { public static async getPublicKey({ key }: GetPublicKeyParams ): Promise { - // Verify the provided JWK represents an elliptic curve (EC) P-256 private key. + // Verify the provided JWK represents an elliptic curve (EC) secp256r1 private key. if (!(isEcPrivateJwk(key) && key.crv === 'P-256')) { - throw new Error(`P256: The provided key is not a P-256 private JWK.`); + throw new Error(`Secp256r1: The provided key is not a 'P-256' private JWK.`); } // Remove the private key property ('d') and make a shallow copy of the provided key. @@ -489,7 +489,7 @@ export class P256 { * @example * ```ts * const privateKey = { ... }; // An X25519 private key in JWK format - * const privateKeyBytes = await P256.privateKeyToBytes({ privateKey }); + * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey }); * ``` * * @param params - The parameters for the private key conversion. @@ -502,7 +502,7 @@ export class P256 { }): Promise { // Verify the provided JWK represents a valid EC P-256 private key. if (!isEcPrivateJwk(privateKey)) { - throw new Error(`P256: The provided key is not a valid EC private key.`); + throw new Error(`Secp256r1: The provided key is not a valid EC private key.`); } // Decode the provided private key to bytes. @@ -528,7 +528,7 @@ export class P256 { * @example * ```ts * const publicKey = { ... }; // A Jwk public key object - * const publicKeyBytes = await P256.publicKeyToBytes({ publicKey }); + * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey }); * ``` * * @param params - The parameters for the public key conversion. @@ -541,7 +541,7 @@ export class P256 { }): Promise { // Verify the provided JWK represents a valid EC P-256 public key, which must have a 'y' value. if (!(isEcPublicJwk(publicKey) && publicKey.y)) { - throw new Error(`P256: The provided key is not a valid EC public key.`); + throw new Error(`Secp256r1: The provided key is not a valid EC public key.`); } // Decode the provided public key to bytes. @@ -557,7 +557,7 @@ export class P256 { /** * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret - * using P-256 private and public keys in JSON Web Key (JWK) format. + * using secp256r1 private and public keys in JSON Web Key (JWK) format. * * @remarks * This method facilitates the ECDH key agreement protocol, which is a method of securely @@ -570,7 +570,7 @@ export class P256 { * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement, * the resulting shared secret is a point on the elliptic curve, which * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like - * P-256, each of these coordinates is 32 bytes (256 bits) long. However, + * secp256r1, each of these coordinates is 32 bytes (256 bits) long. However, * in the ECDH process, it's standard practice to use only the x-coordinate * of the shared secret point as the resulting shared key. This is because * the y-coordinate does not add to the entropy of the key, and both parties @@ -581,7 +581,7 @@ export class P256 { * ```ts * const privateKeyA = { ... }; // A Jwk private key object for party A * const publicKeyB = { ... }; // A Jwk public key object for party B - * const sharedSecret = await P256.sharedSecret({ + * const sharedSecret = await Secp256r1.sharedSecret({ * privateKeyA, * publicKeyB * }); @@ -599,15 +599,15 @@ export class P256 { }): Promise { // Ensure that keys from the same key pair are not specified. if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) { - throw new Error(`P256: ECDH shared secret cannot be computed from a single key pair's public and private keys.`); + throw new Error(`Secp256r1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`); } // Convert the provided private and public keys to bytes. - const privateKeyABytes = await P256.privateKeyToBytes({ privateKey: privateKeyA }); - const publicKeyBBytes = await P256.publicKeyToBytes({ publicKey: publicKeyB }); + const privateKeyABytes = await Secp256r1.privateKeyToBytes({ privateKey: privateKeyA }); + const publicKeyBBytes = await Secp256r1.publicKeyToBytes({ publicKey: publicKeyB }); // Compute the compact representation shared secret between the public and private keys. - const sharedSecret = p256.getSharedSecret(privateKeyABytes, publicKeyBBytes, true); + const sharedSecret = secp256r1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true); // Remove the leading byte that indicates the sign of the y-coordinate // of the point on the elliptic curve. See note above. @@ -615,7 +615,7 @@ export class P256 { } /** - * Generates an RFC6979-compliant ECDSA signature of given data using a P-256 private key. + * Generates an RFC6979-compliant ECDSA signature of given data using a secp256r1 private key. * * @remarks * This method signs the provided data with a specified private key using the ECDSA @@ -632,8 +632,8 @@ export class P256 { * @example * ```ts * const data = new TextEncoder().encode('Messsage'); // Data to be signed - * const privateKey = { ... }; // A Jwk object representing a P-256 private key - * const signature = await P256.sign({ + * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key + * const signature = await Secp256r1.sign({ * key: privateKey, * data * }); @@ -649,14 +649,14 @@ export class P256 { SignParams ): Promise { // Convert the private key from JWK format to bytes. - const privateKeyBytes = await P256.privateKeyToBytes({ privateKey: key }); + const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey: key }); // Generate a digest of the data using the SHA-256 hash function. const digest = sha256(data); // Sign the provided data using the ECDSA algorithm. - // The `p256.sign` operation returns a signature object with { r, s, recovery } properties. - const signatureObject = p256.sign(digest, privateKeyBytes); + // The `Secp256r1.sign` operation returns a signature object with { r, s, recovery } properties. + const signatureObject = secp256r1.sign(digest, privateKeyBytes); // Convert the signature object to Uint8Array. const signature = signatureObject.toCompactRawBytes(); @@ -665,12 +665,12 @@ export class P256 { } /** - * Validates a given private key to ensure its compliance with the P-256 curve standards. + * Validates a given private key to ensure its compliance with the secp256r1 curve standards. * * @remarks * This method checks whether a provided private key is a valid 32-byte number and falls within - * the range defined by the P-256 curve's order. It is essential for ensuring the private - * key's mathematical correctness in the context of P-256-based cryptographic operations. + * the range defined by the secp256r1 curve's order. It is essential for ensuring the private + * key's mathematical correctness in the context of secp256r1-based cryptographic operations. * * Note that this validation strictly pertains to the key's format and numerical validity; it does * not assess whether the key corresponds to a known entity or its security status (e.g., whether @@ -679,7 +679,7 @@ export class P256 { * @example * ```ts * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key - * const isValid = await P256.validatePrivateKey({ privateKeyBytes }); + * const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes }); * console.log(isValid); // true or false based on the key's validity * ``` * @@ -691,14 +691,14 @@ export class P256 { public static async validatePrivateKey({ privateKeyBytes }: { privateKeyBytes: Uint8Array; }): Promise { - return p256.utils.isValidPrivateKey(privateKeyBytes); + return secp256r1.utils.isValidPrivateKey(privateKeyBytes); } /** - * Validates a given public key to confirm its mathematical correctness on the P-256 curve. + * Validates a given public key to confirm its mathematical correctness on the secp256r1 curve. * * @remarks - * This method checks if the provided public key represents a valid point on the P-256 curve. + * This method checks if the provided public key represents a valid point on the secp256r1 curve. * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity * against the curve's parameters. A valid point must lie on the curve and meet specific * mathematical criteria defined by the curve's equation. @@ -710,22 +710,22 @@ export class P256 { * @example * ```ts * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format - * const isValid = await P256.validatePublicKey({ publicKeyBytes }); - * console.log(isValid); // true if the key is valid on the P-256 curve, false otherwise + * const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes }); + * console.log(isValid); // true if the key is valid on the secp256r1 curve, false otherwise * ``` * * @param params - The parameters for the key validation. * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array. * * @returns A Promise that resolves to a boolean indicating the public key's validity on - * the P-256 curve. + * the secp256r1 curve. */ public static async validatePublicKey({ publicKeyBytes }: { publicKeyBytes: Uint8Array; }): Promise { try { // Decode Weierstrass points from key bytes. - const point = p256.ProjectivePoint.fromHex(publicKeyBytes); + const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes); // Check if points are on the Short Weierstrass curve. point.assertValidity(); @@ -738,7 +738,7 @@ export class P256 { } /** - * Verifies an RFC6979-compliant ECDSA signature against given data and a P-256 public key. + * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256r1 public key. * * @remarks * This method validates a digital signature to ensure that it was generated by the holder of the @@ -759,7 +759,7 @@ export class P256 { * const data = new TextEncoder().encode('Messsage'); // Data that was signed * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data * const signature = new Uint8Array([...]); // Signature to verify - * const isSignatureValid = await P256.verify({ + * const isSignatureValid = await Secp256r1.verify({ * key: publicKey, * signature, * data @@ -778,7 +778,7 @@ export class P256 { VerifyParams ): Promise { // Convert the public key from JWK format to bytes. - const publicKeyBytes = await P256.publicKeyToBytes({ publicKey: key }); + const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey: key }); // Generate a digest of the data using the SHA-256 hash function. const digest = sha256(data); @@ -788,16 +788,16 @@ export class P256 { * for low-s signatures across languages is unlikely especially in the context * of SSI. Notable Cloud KMS providers do not natively support it either. It is * also worth noting that low-s signatures are a requirement for Bitcoin. */ - const isValid = p256.verify(signature, digest, publicKeyBytes, { lowS: false }); + const isValid = secp256r1.verify(signature, digest, publicKeyBytes, { lowS: false }); return isValid; } /** - * Returns the elliptic curve points (x and y coordinates) for a given P-256 key. + * Returns the elliptic curve points (x and y coordinates) for a given secp256r1 key. * * @remarks - * This method extracts the elliptic curve points from a given P-256 key, whether + * This method extracts the elliptic curve points from a given secp256r1 key, whether * it's a private or a public key. For a private key, the method first computes the * corresponding public key and then extracts the x and y coordinates. For a public key, * it directly returns these coordinates. The coordinates are represented as Uint8Array. @@ -810,11 +810,11 @@ export class P256 { * ```ts * // For a private key * const privateKey = new Uint8Array([...]); // A 32-byte private key - * const { x: xFromPrivateKey, y: yFromPrivateKey } = await P256.getCurvePoints({ keyBytes: privateKey }); + * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256r1.getCurvePoints({ keyBytes: privateKey }); * * // For a public key * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key - * const { x: xFromPublicKey, y: yFromPublicKey } = await P256.getCurvePoints({ keyBytes: publicKey }); + * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256r1.getCurvePoints({ keyBytes: publicKey }); * ``` * * @param params - The parameters for the curve point decoding operation. @@ -831,11 +831,11 @@ export class P256 { }): Promise<{ x: Uint8Array, y: Uint8Array }> { // If key is a private key, first compute the public key. if (keyBytes.byteLength === 32) { - keyBytes = p256.getPublicKey(keyBytes); + keyBytes = secp256r1.getPublicKey(keyBytes); } // Decode Weierstrass points from key bytes. - const point = p256.ProjectivePoint.fromHex(keyBytes); + const point = secp256r1.ProjectivePoint.fromHex(keyBytes); // Get x- and y-coordinate values and convert to Uint8Array. const x = numberToBytesBE(point.x, 32); @@ -845,4 +845,4 @@ export class P256 { } } -export { P256 as Secp256r1 }; \ No newline at end of file +export { Secp256r1 as P256 }; \ No newline at end of file diff --git a/packages/crypto/tests/primitives/secp256r1.spec.ts b/packages/crypto/tests/primitives/secp256r1.spec.ts new file mode 100644 index 000000000..ddb7746aa --- /dev/null +++ b/packages/crypto/tests/primitives/secp256r1.spec.ts @@ -0,0 +1,652 @@ +import chai, { expect } from 'chai'; +import { Convert } from '@web5/common'; +import chaiAsPromised from 'chai-as-promised'; + +import type { Jwk, JwkParamsEcPrivate } from '../../src/jose/jwk.js'; + +// import CryptoEs256kSignTestVector from '../../../../web5-spec/test-vectors/crypto_es256k/sign.json' assert { type: 'json' }; +// import CryptoEs256kVerifyTestVector from '../../../../web5-spec/test-vectors/crypto_es256k/verify.json' assert { type: 'json' }; +// import secp256k1GetCurvePoints from '../fixtures/test-vectors/secp256k1/get-curve-points.json' assert { type: 'json' }; +// import secp256k1BytesToPublicKey from '../fixtures/test-vectors/secp256k1/bytes-to-public-key.json' assert { type: 'json' }; +// import secp256k1PublicKeyToBytes from '../fixtures/test-vectors/secp256k1/public-key-to-bytes.json' assert { type: 'json' }; +// import secp256k1ValidatePublicKey from '../fixtures/test-vectors/secp256k1/validate-public-key.json' assert { type: 'json' }; +// import secp256k1BytesToPrivateKey from '../fixtures/test-vectors/secp256k1/bytes-to-private-key.json' assert { type: 'json' }; +// import secp256k1PrivateKeyToBytes from '../fixtures/test-vectors/secp256k1/private-key-to-bytes.json' assert { type: 'json' }; +// import secp256k1ValidatePrivateKey from '../fixtures/test-vectors/secp256k1/validate-private-key.json' assert { type: 'json' }; + +import { Secp256r1 } from '../../src/primitives/secp256r1.js'; + +chai.use(chaiAsPromised); + +describe('Secp256r1', () => { + let privateKey: Jwk; + let publicKey: Jwk; + + before(async () => { + privateKey = await Secp256r1.generateKey(); + publicKey = await Secp256r1.computePublicKey({ key: privateKey }); + }); + + describe('adjustSignatureToLowS()', () => { + it('returns a 64-byte signature of type Uint8Array', async () => { + const data = new Uint8Array([51, 52, 53]); + const signature = await Secp256r1.sign({ key: privateKey, data }); + + const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature }); + + expect(adjustedSignature).to.be.instanceOf(Uint8Array); + expect(adjustedSignature.byteLength).to.equal(64); + }); + + it.skip('returns the low-S form given a high-S signature', async () => { + const signatureHighS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b470f9f78c954682f4ce451e5f3d353b4c9fcfbb7d702fe9e28bdfe21be648fc618d').toUint8Array(); + + const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureHighS }); + + expect(adjustedSignature).to.not.deep.equal(signatureHighS); + }); + + it.skip('returns the signature unmodified if already in low-S form', async () => { + const signatureLowS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b4700608736ab97d0b31bae1a0c2cac4b35eeaf35f767f5ebdafdff042a68739dfb4').toUint8Array(); + + const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureLowS }); + + expect(adjustedSignature).to.deep.equal(signatureLowS); + }); + + it.skip('returns signatures that can be verified regardless of low- or high-S form', async () => { + const data = new Uint8Array([51, 52, 53]); + + const publicKey: Jwk = { + kty : 'EC', + crv : 'secp256k1', + x : 'A2ZbCLhod3ltBQ4Mw0zjkcQZ7h7B1FQ3s56ZtWavonQ', + y : 'JBerPwkut8tONfAfcXhNEBERj7jejohqMfbbs2aMMZA', + kid : '9l2x1L-iUvyCy4RuqJdoqe7h0IPnCVXPjTHhVYCuLAc' + }; + + const signatureLowS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b4700608736ab97d0b31bae1a0c2cac4b35eeaf35f767f5ebdafdff042a68739dfb4').toUint8Array(); + const signatureHighS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b470f9f78c954682f4ce451e5f3d353b4c9fcfbb7d702fe9e28bdfe21be648fc618d').toUint8Array(); + + // Verify that the returned signature is valid when input in low-S form. + let adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureLowS }); + let isValid = await Secp256r1.verify({ key: publicKey, signature: adjustedSignature, data }); + expect(isValid).to.be.true; + + // Verify that the returned signature is valid when input in high-S form. + adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureHighS }); + isValid = await Secp256r1.verify({ key: publicKey, signature: adjustedSignature, data }); + expect(isValid).to.be.true; + }); + }); + + describe('bytesToPrivateKey()', () => { + it.skip('returns a private key in JWK format', async () => { + const privateKeyBytes = Convert.hex('740ec69810de9ad1b8f298f1d2c0e6a52dd1e958dc2afc85764bec169c222e88').toUint8Array(); + const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes }); + + expect(privateKey).to.have.property('crv', 'secp256k1'); + expect(privateKey).to.have.property('d'); + expect(privateKey).to.have.property('kid'); + expect(privateKey).to.have.property('kty', 'EC'); + expect(privateKey).to.have.property('x'); + expect(privateKey).to.have.property('y'); + }); + + // for (const vector of secp256k1BytesToPrivateKey.vectors) { + // it(vector.description, async () => { + // const privateKey = await Secp256r1.bytesToPrivateKey({ + // privateKeyBytes: Convert.hex(vector.input.privateKeyBytes).toUint8Array() + // }); + + // expect(privateKey).to.deep.equal(vector.output); + // }); + // } + }); + + describe('bytesToPublicKey()', () => { + it.skip('returns a public key in JWK format', async () => { + const publicKeyBytes = Convert.hex('043752951274023296c8a74b0ffe42f82ff4b4d4bba4326477422703f761f59258c26a7465b9a77ac0c3f1cedb139c428b0b1fbb5516867b527636f3286f705553').toUint8Array(); + const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes }); + + expect(publicKey).to.have.property('crv', 'secp256k1'); + expect(publicKey).to.have.property('kid'); + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('x'); + expect(publicKey).to.have.property('y'); + expect(publicKey).to.not.have.property('d'); + }); + + // for (const vector of secp256k1BytesToPublicKey.vectors) { + // it(vector.description, async () => { + // const publicKey = await Secp256r1.bytesToPublicKey({ + // publicKeyBytes: Convert.hex(vector.input.publicKeyBytes).toUint8Array() + // }); + // expect(publicKey).to.deep.equal(vector.output); + // }); + // } + }); + + describe('compressPublicKey()', () => { + it.skip('converts an uncompressed public key to compressed format', async () => { + const compressedPublicKeyBytes = Convert.hex('026bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce214').toUint8Array(); + const uncompressedPublicKeyBytes = Convert.hex('046bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce21465062296011dd076ae4e8ce5163ccf69d01496d3147656dcc96645b95211f3c6').toUint8Array(); + + const output = await Secp256r1.compressPublicKey({ + publicKeyBytes: uncompressedPublicKeyBytes + }); + + // Confirm the length of the resulting public key is 33 bytes + expect(output.byteLength).to.equal(33); + + // Confirm the output matches the expected compressed public key. + expect(output).to.deep.equal(compressedPublicKeyBytes); + }); + + it.skip('throws an error for an invalid uncompressed public key', async () => { + // Invalid uncompressed public key. + const invalidPublicKey = Convert.hex('dfebc16793a5737ac51f606a43524df8373c063e41d5a99b2f1530afd987284bd1c7cde1658a9a756e71f44a97b4783ea9dee5ccb7f1447eb4836d8de9bd4f81fd').toUint8Array(); + + try { + await Secp256r1.compressPublicKey({ + publicKeyBytes: invalidPublicKey, + }); + expect.fail('Expected method to throw an error.'); + } catch (error) { + expect(error).to.be.instanceOf(Error); + expect((error as Error).message).to.include('Point of length 65 was invalid'); + } + }); + }); + + describe('computePublicKey()', () => { + it('returns a public key in JWK format', async () => { + publicKey = await Secp256r1.computePublicKey({ key: privateKey }); + + expect(publicKey).to.have.property('crv', 'P-256'); + expect(publicKey).to.not.have.property('d'); + expect(publicKey).to.have.property('kid'); + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('x'); + expect(publicKey).to.have.property('y'); + }); + + it('computes and adds a kid property, if missing', async () => { + const { kid, ...privateKeyWithoutKid } = privateKey; + const publicKey = await Secp256r1.computePublicKey({ key: privateKeyWithoutKid }); + + expect(publicKey).to.have.property('kid', kid); + }); + }); + + describe('convertDerToCompactSignature()', () => { + it.skip('returns compact R+S format signature as a Uint8Array', async () => { + const derSignature = Convert.hex('304402203d2f8c3d0f3f7b8b0a9f4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d02203d2f8c3d0f3f7b8b0a9f4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d').toUint8Array(); + + const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); + + expect(compactSignature).to.be.instanceOf(Uint8Array); + expect(compactSignature.byteLength).to.equal(64); + }); + + it.skip('converted ASN.1 DER encoded ECDSA signature matches the expected compact R+S signature', async () => { + const derSignature = Convert.hex('3046022100bd856f326c9d52c6ea6b0711831fe706ad4df6f1c2499de3aa2950d27fe89590022100be32e04c6d0d6fe1628b84eacff5bb871cea4138199521b37234da79b63586f8').toUint8Array(); + const expectedCompactSignature = Convert.hex('bd856f326c9d52c6ea6b0711831fe706ad4df6f1c2499de3aa2950d27fe89590be32e04c6d0d6fe1628b84eacff5bb871cea4138199521b37234da79b63586f8').toUint8Array(); + + const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); + + expect(compactSignature).to.deep.equal(expectedCompactSignature); + }); + + it.skip('converts AWS KMS signatures that can be verified with Secp256r1.verify()', async () => { + // Public key generated with AWS KMS. + const publicKey: Jwk = { + kty : 'EC', + x : 'RZibmDDBkHgq13BrUB7myVzZf_mvgXyesI2eyu4Mbto', + y : 'RGrSYhAEPg2Wl8dOnVWLWvp79A9ueqzhXNaVd-oR7Xo', + crv : 'secp256k1', + kid : 'm-M694699ruAkBudvKuhXvJ1e_nz7wdksjuPyVShVjo' + }; + + // Data payload that was used to generate the signature. + const message = new Uint8Array([0, 1, 2, 3, 4]); + + // ASN.1 DER encoded ECDSA signature generated with AWS KMS. + const derSignature = Convert.hex('3046022100bd856f326c9d52c6ea6b0711831fe706ad4df6f1c2499de3aa2950d27fe89590022100be32e04c6d0d6fe1628b84eacff5bb871cea4138199521b37234da79b63586f8').toUint8Array(); + + // Convert the AWS KMS signature to a compact R+S signature. + const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); + + // Verify the signature with the public key using Secp256r1.verify(). + const isValid = await Secp256r1.verify({ + key : publicKey, + signature : compactSignature, + data : message + }); + + expect(isValid).to.be.true; + }); + + it.skip('passes Wycheproof test vector', async () => { + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256k1_sha256_test.json#L189-L198 + const publicKeyBytes = Convert.hex('04b838ff44e5bc177bf21189d0766082fc9d843226887fc9760371100b7ee20a6ff0c9d75bfba7b31a6bca1974496eeb56de357071955d83c4b1badaa0b21832e9').toUint8Array(); + const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes }); + const message = Convert.hex('313233343030').toUint8Array(); + const derSignature = Convert.hex('3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022100900e75ad233fcc908509dbff5922647db37c21f4afd3203ae8dc4ae7794b0f87').toUint8Array(); + + const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); + + const isValid = await Secp256r1.verify({ + key : publicKey, + signature : compactSignature, + data : message + }); + + expect(isValid).to.be.true; + }); + + it.skip('throws an error for an invalid ASN.1 DER encoded ECDSA signature due to incorrect length', async () => { + // Invalid ASN.1 DER encoded ECDSA signature. + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256k1_sha256_test.json#L239-L248 + const invalidDerSignature = Convert.hex('3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba').toUint8Array(); + + try { + await Secp256r1.convertDerToCompactSignature({ derSignature: invalidDerSignature }); + expect.fail('Expected method to throw an error.'); + } catch (error) { + expect(error).to.be.instanceOf(Error); + expect((error as Error).message).to.include('Invalid signature: incorrect length'); + } + }); + + it.skip('throws an error for an invalid ASN.1 DER encoded ECDSA signature due to appending zeros to sequence', async () => { + // Invalid ASN.1 DER encoded ECDSA signature. + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256k1_sha256_test.json#L369-L378 + const invalidDerSignature = Convert.hex('3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000').toUint8Array(); + + try { + await Secp256r1.convertDerToCompactSignature({ derSignature: invalidDerSignature }); + expect.fail('Expected method to throw an error.'); + } catch (error) { + expect(error).to.be.instanceOf(Error); + expect((error as Error).message).to.include('Invalid signature: left bytes after parsing'); + } + }); + }); + + describe('decompressPublicKey()', () => { + it.skip('converts a compressed public key to an uncompressed format', async () => { + const compressedPublicKeyBytes = Convert.hex('026bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce214').toUint8Array(); + const uncompressedPublicKeyBytes = Convert.hex('046bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce21465062296011dd076ae4e8ce5163ccf69d01496d3147656dcc96645b95211f3c6').toUint8Array(); + + const output = await Secp256r1.decompressPublicKey({ + publicKeyBytes: compressedPublicKeyBytes + }); + + // Confirm the length of the resulting public key is 65 bytes + expect(output.byteLength).to.equal(65); + + // Confirm the output matches the expected uncompressed public key. + expect(output).to.deep.equal(uncompressedPublicKeyBytes); + }); + + it.skip('throws an error for an invalid compressed public key', async () => { + // Invalid compressed public key. + const invalidPublicKey = Convert.hex('fef0b998921eafb58f49efdeb0adc47123aa28a4042924236f08274d50c72fe7b0').toUint8Array(); + + try { + await Secp256r1.decompressPublicKey({ + publicKeyBytes: invalidPublicKey, + }); + expect.fail('Expected method to throw an error.'); + } catch (error) { + expect(error).to.be.instanceOf(Error); + expect((error as Error).message).to.include('Point of length 33 was invalid'); + } + }); + }); + + describe('generateKey()', () => { + it('returns a private key in JWK format', async () => { + const privateKey = await Secp256r1.generateKey(); + + expect(privateKey).to.have.property('crv', 'P-256'); + expect(privateKey).to.have.property('d'); + expect(privateKey).to.have.property('kid'); + expect(privateKey).to.have.property('kty', 'EC'); + expect(privateKey).to.have.property('x'); + expect(privateKey).to.have.property('y'); + }); + + it('returns a 32-byte private key', async () => { + const privateKey = await Secp256r1.generateKey() as JwkParamsEcPrivate; + + const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array(); + expect(privateKeyBytes.byteLength).to.equal(32); + }); + }); + + describe('getCurvePoints()', () => { + // for (const vector of secp256k1GetCurvePoints.vectors) { + // it(vector.description, async () => { + // const keyBytes = Convert.hex(vector.input.keyBytes).toUint8Array(); + // // @ts-expect-error because getCurvePoints() is a private method. + // const points = await Secp256r1.getCurvePoints({ keyBytes }); + // expect(points.x).to.deep.equal(Convert.hex(vector.output.x).toUint8Array()); + // expect(points.y).to.deep.equal(Convert.hex(vector.output.y).toUint8Array()); + // }); + // } + + it('throws error with invalid input key length', async () => { + await expect( + // @ts-expect-error because getCurvePoints() is a private method. + Secp256r1.getCurvePoints({ keyBytes: new Uint8Array(16) }) + ).to.eventually.be.rejectedWith(Error, 'Point of length 16 was invalid. Expected 33 compressed bytes or 65 uncompressed bytes'); + }); + }); + + describe('getPublicKey()', () => { + it('returns a public key in JWK format', async () => { + const publicKey = await Secp256r1.getPublicKey({ key: privateKey }); + + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('crv', 'P-256'); + expect(publicKey).to.have.property('kid'); + expect(publicKey).to.have.property('x'); + expect(publicKey).to.have.property('y'); + expect(publicKey).to.not.have.property('d'); + }); + + it('computes and adds a kid property, if missing', async () => { + const { kid, ...privateKeyWithoutKid } = privateKey; + const publicKey = await Secp256r1.getPublicKey({ key: privateKeyWithoutKid }); + + expect(publicKey).to.have.property('kid', kid); + }); + + it('returns the same output as computePublicKey()', async () => { + const publicKey = await Secp256r1.getPublicKey({ key: privateKey }); + expect(publicKey).to.deep.equal(await Secp256r1.computePublicKey({ key: privateKey })); + }); + + it('throws an error when provided a secp256r1 public key', async () => { + const secp256r1PublicKey: Jwk = { + kty : 'EC', + crv : 'P-256', + x : 'FRHEAeCMFUIWsDR4POZZ_MEaSePdq5UhcvKTHXOmAHQ', + y : 'XWaWp9dkMUqQ5ourD1421YJLHQmu4bhbr2QSMnTR35o' + }; + + await expect( + Secp256r1.getPublicKey({ key: secp256r1PublicKey }) + ).to.eventually.be.rejectedWith(Error, `key is not a 'P-256' private JWK`); + }); + + it('throws an error when provided an Ed25519 private key', async () => { + const ed25519PrivateKey: Jwk = { + crv : 'Ed25519', + d : 'TM0Imyj_ltqdtsNG7BFOD1uKMZ81q6Yk2oz27U-4pvs', + kty : 'OKP', + x : 'PUAXw-hDiVqStwqnTRt-vJyYLM8uxJaMwM1V8Sr0Zgw', + kid : 'FtIu-VbGrfe_KB6CH7GNwODB72MNxj_ml11dEvO-7kk' + }; + + await expect( + Secp256r1.getPublicKey({ key: ed25519PrivateKey }) + ).to.eventually.be.rejectedWith(Error, `key is not a 'P-256' private JWK`); + }); + + it('throws an error when provided a secp256k1 private key', async () => { + const secp256k1PrivateKey: Jwk = { + kty : 'EC', + crv : 'secp256k1', + x : 'oCdX60O5sBTvHjSHqp5Z2Ik-iKROm2TSNi9Z7SFNpRQ', + y : '31b9rwHHVyynXw632oTVW7f2xcczjxf6BRAF7UuzYsE', + d : 'ycNY9W7EY-0VmVMWPAgUMiXO0O7_OhzPjZKXzVi0xKY' + }; + await expect( + Secp256r1.getPublicKey({ key: secp256k1PrivateKey }) + ).to.eventually.be.rejectedWith(Error, `key is not a 'P-256' private JWK`); + }); + + it('throws an error when provided an Ed25519 private key', async () => { + const ed25519PrivateKey: Jwk = { + crv : 'Ed25519', + d : 'TM0Imyj_ltqdtsNG7BFOD1uKMZ81q6Yk2oz27U-4pvs', + kty : 'OKP', + x : 'PUAXw-hDiVqStwqnTRt-vJyYLM8uxJaMwM1V8Sr0Zgw', + kid : 'FtIu-VbGrfe_KB6CH7GNwODB72MNxj_ml11dEvO-7kk' + }; + + await expect( + Secp256r1.getPublicKey({ key: ed25519PrivateKey }) + ).to.eventually.be.rejectedWith(Error, `key is not a 'P-256' private JWK`); + }); + }); + + describe('privateKeyToBytes()', () => { + it.skip('returns a private key as a byte array', async () => { + const privateKey: Jwk = { + kty : 'EC', + crv : 'secp256k1', + d : 'dA7GmBDemtG48pjx0sDmpS3R6VjcKvyFdkvsFpwiLog', + x : 'N1KVEnQCMpbIp0sP_kL4L_S01LukMmR3QicD92H1klg', + y : 'wmp0ZbmnesDD8c7bE5xCiwsfu1UWhntSdjbzKG9wVVM', + kid : 'iwwOeCqgvREo5xGeBS-obWW9ZGjv0o1M65gUYN6SYh4' + }; + const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey }); + + expect(privateKeyBytes).to.be.an.instanceOf(Uint8Array); + const expectedOutput = Convert.hex('740ec69810de9ad1b8f298f1d2c0e6a52dd1e958dc2afc85764bec169c222e88').toUint8Array(); + expect(privateKeyBytes).to.deep.equal(expectedOutput); + }); + + it('throws an error when provided a secp256r1 public key', async () => { + const publicKey: Jwk = { + kty : 'EC', + crv : 'P-256', + x : 'yRtzkBQdSfYwZ7EH6d9UMN-PV-r4ZZzXF3hGy8D9yy4', + y : 'bQUbIZeqUIUKV-N5265jD7_l2-xybjpFsr3kN4GdA_k' + }; + + await expect( + Secp256r1.privateKeyToBytes({ privateKey: publicKey }) + ).to.eventually.be.rejectedWith(Error, 'provided key is not a valid EC private key'); + }); + + // for (const vector of secp256k1PrivateKeyToBytes.vectors) { + // it(vector.description, async () => { + // const privateKeyBytes = await Secp256r1.privateKeyToBytes({ + // privateKey: vector.input.privateKey as Jwk + // }); + // expect(privateKeyBytes).to.deep.equal(Convert.hex(vector.output).toUint8Array()); + // }); + // } + }); + + describe('publicKeyToBytes()', () => { + it('returns a public key in JWK format', async () => { + const publicKey: Jwk = { + kty : 'EC', + crv : 'P-256', + x : 'yRtzkBQdSfYwZ7EH6d9UMN-PV-r4ZZzXF3hGy8D9yy4', + y : 'bQUbIZeqUIUKV-N5265jD7_l2-xybjpFsr3kN4GdA_k' + }; + + const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey }); + + expect(publicKeyBytes).to.be.an.instanceOf(Uint8Array); + const expectedOutput = Convert.hex('04c91b7390141d49f63067b107e9df5430df8f57eaf8659cd7177846cbc0fdcb2e6d051b2197aa50850a57e379dbae630fbfe5dbec726e3a45b2bde437819d03f9').toUint8Array(); + expect(publicKeyBytes).to.deep.equal(expectedOutput); + }); + + it('throws an error when provided an Ed25519 private key', async () => { + const privateKey: Jwk = { + kty : 'EC', + crv : 'secp256k1', + d : 'dA7GmBDemtG48pjx0sDmpS3R6VjcKvyFdkvsFpwiLog', + x : 'N1KVEnQCMpbIp0sP_kL4L_S01LukMmR3QicD92H1klg', + y : 'wmp0ZbmnesDD8c7bE5xCiwsfu1UWhntSdjbzKG9wVVM', + kid : 'iwwOeCqgvREo5xGeBS-obWW9ZGjv0o1M65gUYN6SYh4' + }; + + await expect( + Secp256r1.publicKeyToBytes({ publicKey: privateKey }) + ).to.eventually.be.rejectedWith(Error, 'provided key is not a valid EC public key'); + }); + + // for (const vector of secp256k1PublicKeyToBytes.vectors) { + // it(vector.description, async () => { + // const publicKeyBytes = await Secp256r1.publicKeyToBytes({ + // publicKey: vector.input.publicKey as Jwk + // }); + // expect(publicKeyBytes).to.deep.equal(Convert.hex(vector.output).toUint8Array()); + // }); + // } + }); + + describe('sharedSecret()', () => { + let ownPrivateKey: Jwk; + let ownPublicKey: Jwk; + let otherPartyPrivateKey: Jwk; + let otherPartyPublicKey: Jwk; + + beforeEach(async () => { + ownPrivateKey = privateKey; + ownPublicKey = publicKey; + + otherPartyPrivateKey = await Secp256r1.generateKey(); + otherPartyPublicKey = await Secp256r1.computePublicKey({ key: otherPartyPrivateKey }); + }); + + it('generates a 32-byte shared secret', async () => { + const sharedSecret = await Secp256r1.sharedSecret({ + privateKeyA : ownPrivateKey, + publicKeyB : otherPartyPublicKey + }); + expect(sharedSecret).to.be.instanceOf(Uint8Array); + expect(sharedSecret.byteLength).to.equal(32); + }); + + it('is commutative', async () => { + const sharedSecretOwnOther = await Secp256r1.sharedSecret({ + privateKeyA : ownPrivateKey, + publicKeyB : otherPartyPublicKey + }); + + const sharedSecretOtherOwn = await Secp256r1.sharedSecret({ + privateKeyA : otherPartyPrivateKey, + publicKeyB : ownPublicKey + }); + + expect(sharedSecretOwnOther).to.deep.equal(sharedSecretOtherOwn); + }); + + it('throws an error if the public/private keys from the same key pair are specified', async () => { + await expect( + Secp256r1.sharedSecret({ + privateKeyA : ownPrivateKey, + publicKeyB : ownPublicKey + }) + ).to.eventually.be.rejectedWith(Error, 'shared secret cannot be computed from a single key pair'); + }); + }); + + describe('sign()', () => { + it('returns a 64-byte signature of type Uint8Array', async () => { + const data = new Uint8Array([51, 52, 53]); + const signature = await Secp256r1.sign({ key: privateKey, data }); + expect(signature).to.be.instanceOf(Uint8Array); + expect(signature.byteLength).to.equal(64); + }); + + it('accepts input data as Uint8Array', async () => { + const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + const key = privateKey; + let signature: Uint8Array; + + signature = await Secp256r1.sign({ key, data }); + expect(signature).to.be.instanceOf(Uint8Array); + }); + + describe.skip('Web5TestVectorsCryptoEs256k', () => { + it('sign', async () => { + // for (const vector of CryptoEs256kSignTestVector.vectors) { + // let errorOccurred = false; + // try { + // const signature = await Secp256r1.sign({ + // key : vector.input.key as Jwk, + // data : Convert.hex(vector.input.data).toUint8Array() + // }); + + // const signatureHex = Convert.uint8Array(signature).toHex(); + // expect(signatureHex).to.deep.equal(vector.output); + + // } catch { errorOccurred = true; } + // expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); + // } + }); + }); + }); + + describe.skip('validatePrivateKey()', () => { + // for (const vector of secp256k1ValidatePrivateKey.vectors) { + // it(vector.description, async () => { + // const privateKeyBytes = Convert.hex(vector.input.privateKeyBytes).toUint8Array(); + // const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes }); + // expect(isValid).to.equal(vector.output); + // }); + // } + }); + + describe.skip('validatePublicKey()', () => { + // for (const vector of secp256k1ValidatePublicKey.vectors) { + // it(vector.description, async () => { + // const publicKeyBytes = Convert.hex(vector.input.publicKeyBytes).toUint8Array(); + // const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes }); + // expect(isValid).to.equal(vector.output); + // }); + // } + }); + + describe('verify()', () => { + it('returns a boolean result', async () => { + const data = new Uint8Array([51, 52, 53]); + const signature = await Secp256r1.sign({ key: privateKey, data }); + + const isValid = await Secp256r1.verify({ key: publicKey, signature, data }); + expect(isValid).to.exist; + expect(isValid).to.be.true; + }); + + it('accepts input data as Uint8Array', async () => { + const data = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); + let isValid: boolean; + let signature: Uint8Array; + + // TypedArray - Uint8Array + signature = await Secp256r1.sign({ key: privateKey, data }); + isValid = await Secp256r1.verify({ key: publicKey, signature, data }); + expect(isValid).to.be.true; + }); + + describe.skip('Web5TestVectorsCryptoEs256k', () => { + // it('verify', async () => { + // for (const vector of CryptoEs256kVerifyTestVector.vectors) { + // let errorOccurred = false; + // try { + // const isValid = await Secp256r1.verify({ + // key : vector.input.key as Jwk, + // signature : Convert.hex(vector.input.signature).toUint8Array(), + // data : Convert.hex(vector.input.data).toUint8Array() + // }); + + // expect(isValid).to.equal(vector.output); + + // } catch { errorOccurred = true; } + // expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); + // } + // }); + }); + }); +}); \ No newline at end of file From 53aa79bfca38d0bb7b397ce7f49d478098d1051f Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 25 Jan 2024 15:53:03 -0500 Subject: [PATCH 21/39] Add docs for undocumented methods Signed-off-by: Frank Hinek --- packages/dids/src/did-error.ts | 6 + packages/dids/src/methods/did-dht.ts | 435 ++++++++++++++++++++++++++- packages/dids/src/methods/did-jwk.ts | 152 +++++----- 3 files changed, 506 insertions(+), 87 deletions(-) diff --git a/packages/dids/src/did-error.ts b/packages/dids/src/did-error.ts index 08b46ad08..541240830 100644 --- a/packages/dids/src/did-error.ts +++ b/packages/dids/src/did-error.ts @@ -2,6 +2,12 @@ * A custom error class for DID-related errors. */ export class DidError extends Error { + /** + * Constructs an instance of DidError, a custom error class for handling DID-related errors. + * + * @param code - A {@link DidErrorCode} representing the specific type of error encountered. + * @param message - A human-readable description of the error. + */ constructor(public code: DidErrorCode, message: string) { super(message); this.name = 'DidError'; diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 263e483e1..150f121c2 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -11,7 +11,7 @@ import type { import bencode from 'bencode'; import { Convert } from '@web5/common'; -import { CryptoApi, Ed25519, LocalKmsCrypto, P256, Secp256k1, computeJwkThumbprint } from '@web5/crypto'; +import { CryptoApi, computeJwkThumbprint, Ed25519, LocalKmsCrypto, Secp256k1, Secp256r1 } from '@web5/crypto'; import { AUTHORITATIVE_ANSWER, decode as dnsPacketDecode, encode as dnsPacketEncode } from '@dnsquery/dns-packet'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidMetadata, PortableDid } from './did-method.js'; @@ -166,6 +166,9 @@ export interface DidDhtCreateOptions extends DidCreateOptions { verificationMethods?: DidCreateVerificationMethod[]; } +/** + * The default Pkarr relay server to use when publishing and resolving DID documents. + */ const DEFAULT_PKARR_RELAY = 'https://diddht.tbddev.org'; /** @@ -224,13 +227,52 @@ const VALUE_SEPARATOR = ','; * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. */ export enum DidDhtRegisteredDidType { - Discoverable = 0, - Organization = 1, - Government = 2, - Corporation = 3, - LocalBusiness = 4, - SoftwarePackage = 5, - WebApp = 6, + /** + * Type 0 is reserved for DIDs that do not wish to associate themselves with a specific type but + * wish to make themselves discoverable. + */ + Discoverable = 0, + + /** + * Organization + * @see {@link https://schema.org/Organization | schema definition} + */ + Organization = 1, + + /** + * Government Organization + * @see {@link https://schema.org/GovernmentOrganization | schema definition} + */ + Government = 2, + + /** + * Corporation + * @see {@link https://schema.org/Corporation | schema definition} + */ + Corporation = 3, + + /** + * Corporation + * @see {@link https://schema.org/Corporation | schema definition} + */ + LocalBusiness = 4, + + /** + * Software Package + * @see {@link https://schema.org/SoftwareSourceCode | schema definition} + */ + SoftwarePackage = 5, + + /** + * Web App + * @see {@link https://schema.org/WebApplication | schema definition} + */ + WebApp = 6, + + /** + * Financial Institution + * @see {@link https://schema.org/FinancialService | schema definition} + */ FinancialInstitution = 7 } @@ -245,17 +287,57 @@ export enum DidDhtRegisteredDidType { * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}. */ export enum DidDhtRegisteredKeyType { + /** + * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature + * Algorithm) and Curve25519. + */ Ed25519 = 0, + + /** + * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized + * systems. + */ secp256k1 = 1, + + /** + * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations + * and is widely supported in various cryptographic libraries and standards. + */ secp256r1 = 2 } +/** + * Maps {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Verification Relationship} + * values to the corresponding record name in the DNS packet representation of a DHT DID document. + */ export enum DidDhtVerificationRelationship { - authentication = 'auth', - assertionMethod = 'asm', + /** + * Specifies how the DID subject is expected to be authenticated. + */ + authentication = 'auth', + + /** + * Specifies how the DID subject is expected to express claims, such as for issuing Verifiable + * Credentials. + */ + assertionMethod = 'asm', + + /** + * Specifies a mechanism used by the DID subject to delegate a cryptographic capability to another + * party + */ capabilityDelegation = 'del', + + /** + * Specifies a verification method used by the DID subject to invoke a cryptographic capability. + */ capabilityInvocation = 'inv', - keyAgreement = 'agm' + + /** + * Specifies how an entity can generate encryption material to communicate confidentially with the + * DID subject. + */ + keyAgreement = 'agm' } /** @@ -268,6 +350,81 @@ const AlgorithmToKeyTypeMap = { ES256 : DidDhtRegisteredKeyType.secp256r1 } as const; +/** + * The `DidDht` class provides an implementation of the `did:dht` DID method. + * + * Features: + * - DID Creation: Create new `did:dht` DIDs. + * - DID Key Management: Instantiate a DID object from an existing verification method keys or + * or a key in a Key Management System (KMS). If supported by the KMS, a DID's + * key can be exported to a portable DID format. + * - DID Resolution: Resolve a `did:dht` to its corresponding DID Document stored in the DHT network. + * - Signature Operations: Sign and verify messages using keys associated with a DID. + * + * @remarks + * The `did:dht` method leverages the distributed nature of the Mainline DHT network for + * decentralized identity management. This method allows DIDs to be resolved without relying on + * centralized registries or ledgers, enhancing privacy and control for users. The DID Document is + * stored and retrieved from the DHT network, and the method includes optional mechanisms for + * discovering DIDs by type. + * + * The DID URI in the `did:dht` method includes a method-specific identifier called the Identity Key + * which corresponds to the DID's entry in the DHT network. The Identity Key required to make + * changes to the DID Document since Mainline DHT nodes validate the signature of each message + * before storing the value in the DHT. + * + * @see {@link https://did-dht.com | DID DHT Method Specification} + * + * @example + * ```ts + * // DID Creation + * const did = await DidDht.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKmsCrypto(); + * const did = await DidDht.create({ keyManager }); + * + * // DID Resolution + * const resolutionResult = await DidDht.resolve({ did: did.uri }); + * + * // Signature Operations + * const signer = await did.getSigner(); + * const signature = await signer.sign({ data: new TextEncoder().encode('Message') }); + * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature }); + * + * // Key Management + * + * // Instantiate a DID object for a published DID with existing keys in a KMS + * const did = await DidDht.fromKeyManager({ + * didUri: 'did:dht:cf69rrqpanddbhkqecuwia314hfawfua9yr6zx433jmgm39ez57y', + * keyManager + * }); + * + * // Instantiate a DID object from an existing verification method key + * const did = await DidDht.fromKeys({ + * verificationMethods: [{ + * publicKeyJwk : { + * crv : 'Ed25519', + * kty : 'OKP', + * x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0' + * }, + * privateKeyJwk: { + * crv : 'Ed25519', + * d : 'hdSIwbQwVD-fNOVEgt-k3mMl44Ip1iPi58Ex6VDGxqY', + * kty : 'OKP', + * x : 'VYKm2SCIV9Vz3BRy-v5R9GHz3EOJCPvZ1_gP1e3XiB0' + * }, + * purposes: ['authentication', 'assertionMethod' ], + * }] + * }); + * + * // Convert a DID object to a portable format + * const portableDid = await DidDht.toKeys({ did }); + * + * // Reconstruct a DID object from a portable format + * const did = await DidDht.fromKeys(portableDid); + * ``` + */ export class DidDht extends DidMethod { /** @@ -275,6 +432,33 @@ export class DidDht extends DidMethod { */ public static methodName = 'dht'; + /** + * Creates a new DID using the `did:dht` method formed from a newly generated key. + * + * @remarks + * The DID URI is formed by z-base-32 encoding the Identity Key public key and prefixing with + * `did:dht:`. + * + * Notes: + * - If no `options` are given, by default a new Ed25519 key will be generated which serves as the + * Identity Key. + * + * @example + * ```ts + * // DID Creation + * const did = await DidDht.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKmsCrypto(); + * const did = await DidDht.create({ keyManager }); + * ``` + * + * @param params - The parameters for the create operation. + * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate + * keys and sign data. + * @param params.options - Optional parameters that can be specified when creating a new DID. + * @returns A Promise resolving to a {@link Did} object representing the new DID. + */ public static async create({ keyManager = new LocalKmsCrypto(), options = {} @@ -315,6 +499,34 @@ export class DidDht extends DidMethod { return did; } + /** + * Instantiates a `Did` object from an existing DID using keys in an external Key Management + * System (KMS). + * + * This method returns a `Did` object by resolving an existing `did:dht` DID URI and verifying + * that all associated keys are present in the provided key manager. + * + * @remarks + * The method verifies the presence of key material for every verification method in the DID + * document within the given KMS. If any key is missing, an error is thrown. + * + * This approach ensures that the resulting `Did` object is fully operational with the provided + * key manager and that all cryptographic operations related to the DID can be performed. + * + * @param params - The parameters for the `fromKeyManager` operation. + * @param params.didUri - The URI of the DID to be instantiated. + * @param params.keyManager - The Key Management System to be used for key management operations. + * @returns A Promise resolving to the instantiated `Did` object. + * @throws An error if any key in the DID document is not present in the provided KMS. + * + * @example + * ```ts + * // Assuming keyManager already contains the key material for the DID. + * const didUri = 'did:dht:example'; + * const did = await DidDht.fromKeyManager({ didUri, keyManager }); + * // The 'did' is now an instance of Did, linked with the provided keyManager. + * ``` + */ public static async fromKeyManager({ didUri, keyManager }: { didUri: string; keyManager: CryptoApi; @@ -362,6 +574,43 @@ export class DidDht extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: didUri }; } + /** + * Instantiates a `Did` object for the `did:dht` method from a given {@link PortableDid}. + * + * This method allows for the creation of a `Did` object using pre-existing key material, + * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly + * useful when the key material is already available and you want to construct a `Did` object + * based on these keys, instead of generating new keys. + * + * @remarks + * The `verificationMethods` array must contain exactly one key since the `did:jwk` method only + * supports a single verification method. + * + * The key material (both public and private keys) should be provided in JWK format. The method + * handles the inclusion of these keys in the DID Document and specified verification + * relationships. + * + * @param params - The parameters for the `fromKeys` operation. + * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to + * generate keys and sign data. If not given, a new + * {@link LocalKmsCrypto} instance will be created and used. + * @param params.verificationMethods - An array containing the verification method metadata and + * key material in JWK format. + * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. + * @throws An error if the `verificationMethods` array does not contain any keys, lacks an + * Identity Key, or any verification method is missing a public or private key. + * + * @example + * ```ts + * // Example with an existing key in JWK format. + * const verificationMethods = [{ + * publicKeyJwk: { id: 0, // public key in JWK format }, + * privateKeyJwk: { id: 0, // private key in JWK format }, + * purposes: ['authentication'] + * }]; + * const did = await DidDht.fromKeys({ verificationMethods }); + * ``` + */ public static async fromKeys({ keyManager = new LocalKmsCrypto(), uri, @@ -403,6 +652,17 @@ export class DidDht extends DidMethod { } } + /** + * Given the W3C DID Document of a `did:dht` DID, return the verification method that will be used + * for signing messages and credentials. If given, the `methodId` parameter is used to select the + * verification method. If not given, the Identity Key's verification method with an ID fragment + * of '#0' is used. + * + * @param params - The parameters for the `getSigningMethod` operation. + * @param params.didDocument - DID Document to get the verification method from. + * @param params.methodId - ID of the verification method to use for signing. + * @returns Verification method to use for signing. + */ public static async getSigningMethod({ didDocument, methodId = '#0' }: { didDocument: DidDocument; methodId?: string; @@ -418,6 +678,34 @@ export class DidDht extends DidMethod { return verificationMethod; } + /** + * Publishes a DID to the DHT, making it publicly discoverable and resolvable. + * + * This method handles the publication of a DID Document associated with a `did:dht` DID to the + * Mainline DHT network. The publication process involves storing the DID Document in Mainline DHT + * via a Pkarr relay server. + * + * @remarks + * - This method is typically invoked automatically during the creation of a new DID unless the + * `publish` option is set to `false`. + * - For existing, unpublished DIDs, it can be used to publish the DID Document to Mainline DHT. + * - The method relies on the specified Pkarr relay server to interface with the DHT network. + * + * @param params - The parameters for the `publish` operation. + * @param params.did - The `Did` object representing the DID to be published. + * @param params.relay - Optional. The Pkarr relay server URL to be used for publishing. If not + * specified, the default relay server is used. + * @returns A Promise resolving to a boolean indicating whether the publication was successful. + * + * @example + * ```ts + * // Generate a new DID and keys but explicitly disable publishing. + * const did = await DidDht.create({ options: { publish: false }); + * // Publish the DID to the DHT. + * const isPublished = await DidDht.publish({ did }); + * // `isPublished` is true if the DID was successfully published. + * ``` + */ public static async publish({ did, relay = DEFAULT_PKARR_RELAY }: { did: Did; relay?: string; @@ -427,6 +715,27 @@ export class DidDht extends DidMethod { return isPublished; } + /** + * Resolves a `did:dht` identifier to its corresponding DID document. + * + * This method performs the resolution of a `did:dht` DID, retrieving its DID Document from the + * Mainline DHT network. The process involves querying the DHT network via a Pkarr relay server to + * retrieve the DID Document that corresponds to the given DID identifier. + * + * @remarks + * - The method uses the specified or default Pkarr relay server to access the DHT network. + * - It decodes the DID identifier and retrieves the associated DID Document and metadata. + * - In case of resolution failure, appropriate error information is returned. + * + * @example + * ```ts + * const resolutionResult = await DidDht.resolve('did:dht:example'); + * ``` + * + * @param didUri - The DID to be resolved. + * @param _options - Optional parameters for resolving the DID. Unused by this DID method. + * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. + */ public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise { // Use the given Pkarr relay or the default. const relay = options?.pkarrRelay ?? DEFAULT_PKARR_RELAY; @@ -460,6 +769,20 @@ export class DidDht extends DidMethod { } } + /** + * Instantiates a `Did` object for the `did:dht` method using an array of public keys. + * + * This method is used to create a `Did` object from a set of public keys, typically after + * these keys have been generated or provided. It constructs the DID document, metadata, and + * other necessary components for the DID based on the provided public keys and any additional + * options specified. + * + * @param params - The parameters for the DID object creation. + * @param params.keyManager - The Key Management System to manage keys. + * @param params.verificationMethods - An array of verification methods containing public keys. + * @param params.options - Additional options for DID creation. + * @returns A Promise resolving to a `Did` object. + */ private static async fromPublicKeys({ keyManager, verificationMethods, @@ -536,6 +859,17 @@ export class DidDht extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: id }; } + /** + * Generates a set of keys for use in creating a `Did` object for the `did:dht` method. + * + * This method is responsible for generating the cryptographic keys necessary for the DID. It + * supports generating keys for the specified verification methods. + * + * @param params - The parameters for key generation. + * @param params.keyManager - The Key Management System used for generating keys. + * @param params.verificationMethods - Optional array of methods specifying key generation details. + * @returns A Promise resolving to a `PortableDid` object containing the generated keys. + */ private static async generateKeys({ keyManager, verificationMethods @@ -580,7 +914,22 @@ export class DidDht extends DidMethod { } } +/** + * The `DidDhtDocument` class provides functionality for interacting with the DID document stored in + * Mainline DHT in support of DID DHT method create, resolve, update, and deactivate operations. + * + * This class includes methods for retrieving and publishing DID documents to and from the DHT, + * using DNS packet encoding and Pkarr relay servers. + */ class DidDhtDocument { + /** + * Retrieves a DID document and its metadata from the DHT network. + * + * @param params - The parameters for the get operation. + * @param params.didUri - The DID URI containing the Identity Key. + * @param params.relay - The Pkarr relay server URL. + * @returns A promise resolving to an object containing the DID document and its metadata. + */ public static async get({ didUri, relay }: { didUri: string; relay: string; @@ -601,9 +950,10 @@ class DidDhtDocument { } /** + * Publishes a DID document to the DHT network. * * @param params - The parameters to use when publishing the DID document to the DHT network. - * @param params.did - The DID object to publish. + * @param params.did - The DID object whose DID document will be published. * @param params.relay - The Pkarr relay to use when publishing the DID document. * @returns A promise that resolves to `true` if the DID document was published successfully. * If publishing fails, `false` is returned. @@ -631,6 +981,15 @@ class DidDhtDocument { return putResult; } + /** + * Retrieves a signed BEP44 message from a Pkarr relay server. + * + * @see {@link https://github.com/Nuhvi/pkarr/blob/main/design/relays.md | Pkarr Relay design} + * + * @param relay - The Pkarr relay server URL. + * @param publicKeyBytes - The public key bytes of the Identity Key, z-base-32 encoded. + * @returns A promise resolving to a BEP44 message containing the signed DNS packet. + */ private static async pkarrGet({ relay, publicKeyBytes }: { publicKeyBytes: Uint8Array; relay: string; @@ -677,6 +1036,15 @@ class DidDhtDocument { return bep44Message; } + /** + * Publishes a signed BEP44 message to a Pkarr relay server. + * + * @see {@link https://github.com/Nuhvi/pkarr/blob/main/design/relays.md | Pkarr Relay design} + * + * @param relay - The Pkarr relay server URL. + * @param bep44Message - The BEP44 message to be published, containing the signed DNS packet. + * @returns A promise resolving to `true` if the message was successfully published, otherwise `false`. + */ private static async pkarrPut({ relay, bep44Message }: { bep44Message: Bep44Message; relay: string; @@ -1021,8 +1389,14 @@ class DidDhtDocument { } } +/** + * The `DidDhtUtils` class provides utility functions to support operations in the DID DHT method. + * This includes functions for creating and parsing BEP44 messages, handling identity keys, and + * converting between different formats and representations. + */ class DidDhtUtils { /** + * Creates a BEP44 put message, which is used to publish a DID document to the DHT network. * * @param params - The parameters to use when creating the BEP44 put message * @param params.dnsPacket - The DNS packet to encode in the BEP44 message. @@ -1058,6 +1432,13 @@ class DidDhtUtils { return { k: publicKeyBytes, seq: sequenceNumber, sig: signature, v: encodedDnsPacket }; } + /** + * Converts a DID URI to a JSON Web Key (JWK) representing the Identity Key. + * + * @param params - The parameters to use for the conversion. + * @param params.didUri - The DID URI containing the Identity Key. + * @returns A promise that resolves to a JWK representing the Identity Key. + */ public static async identifierToIdentityKey({ didUri }: { didUri: string }): Promise { @@ -1097,7 +1478,7 @@ class DidDhtUtils { * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with * `did:dht:` to form the DID identifier. * - * @param params The parameters to use when computing the DID identifier. + * @param params - The parameters to use for the conversion. * @param params.identityKey The Identity Key from which the DID identifier is computed. * @returns A promise that resolves to a string containing the DID identifier. */ @@ -1113,6 +1494,13 @@ class DidDhtUtils { return `did:${DidDht.methodName}:${identifier}`; } + /** + * Converts a DID URI to the byte array representation of the Identity Key. + * + * @param params - The parameters to use for the conversion. + * @param params.didUri - The DID URI containing the Identity Key. + * @returns A byte array representation of the Identity Key. + */ public static identifierToIdentityKeyBytes({ didUri }: { didUri: string }): Uint8Array { @@ -1141,11 +1529,17 @@ class DidDhtUtils { return identityKeyBytes; } + /** + * Returns the appropriate key converter for the specified cryptographic curve. + * + * @param curve - The cryptographic curve to use for the key conversion. + * @returns An `AsymmetricKeyConverter` for the specified curve. + */ public static keyConverter(curve: string): AsymmetricKeyConverter { const converters: Record = { 'Ed25519' : Ed25519, 'secp256k1' : Secp256k1, - 'secp256r1' : P256 + 'secp256r1' : Secp256r1 }; const converter = converters[curve]; @@ -1156,6 +1550,7 @@ class DidDhtUtils { } /** + * Parses and verifies a BEP44 Get message, converting it to a DNS packet. * * @param params - The parameters to use when verifying and parsing the BEP44 Get response message. * @param params.bep44Message - The BEP44 message to verify and parse. @@ -1185,7 +1580,10 @@ class DidDhtUtils { } /** - * Helper function to decode and parse the data value of a DNS TXT record. + * Decodes and parses the data value of a DNS TXT record into a key-value object. + * + * @param txtData - The data value of a DNS TXT record. + * @returns An object containing the key/value pairs of the TXT record data. */ public static parseTxtDataToObject(txtData: TxtData): Record { return this.parseTxtDataToString(txtData).split(PROPERTY_SEPARATOR).reduce((acc, pair) => { @@ -1195,7 +1593,12 @@ class DidDhtUtils { }, {} as Record); } - // Helper function to convert TXT data property to a string value. + /** + * Decodes and parses the data value of a DNS TXT record into a string. + * + * @param txtData - The data value of a DNS TXT record. + * @returns A string representation of the TXT record data. + */ public static parseTxtDataToString(txtData: TxtData): string { if (typeof txtData === 'string') { return txtData; diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index fb5b372d2..a450e3f9a 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -70,7 +70,7 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * - DID Creation: Create new `did:jwk` DIDs. * - DID Key Management: Instantiate a DID object from an existing verification method key set or * or a key in a Key Management System (KMS). If supported by the KMS, a DID's - * key can be exported to a key set. + * key can be exported to a portable DID format. * - DID Resolution: Resolve a `did:jwk` to its corresponding DID Document. * - Signature Operations: Sign and verify messages using keys associated with a DID. * @@ -104,7 +104,7 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature }); * * // Key Management -* + * * // Instantiate a DID object from an existing key in a KMS * const did = await DidJwk.fromKeyManager({ * didUri: 'did:jwk:eyJrIjoiT0tQIiwidCI6IkV1c2UyNTYifQ', @@ -129,7 +129,7 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * }); * * // Export a DID's key to a key set - * const keySet = await DidJwk.toKeys({ did}); + * const keySet = await DidJwk.toKeys({ did }); * ``` */ export class DidJwk extends DidMethod { @@ -150,6 +150,16 @@ export class DidJwk extends DidMethod { * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given, * an error will be thrown. * + * @example + * ```ts + * // DID Creation + * const did = await DidJwk.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKmsCrypto(); + * const did = await DidJwk.create({ keyManager }); + * ``` + * * @param params - The parameters for the create operation. * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate * keys and sign data. @@ -181,67 +191,6 @@ export class DidJwk extends DidMethod { return did; } - /** - * Instantiates a `Did` object for the `did:jwk` method from a given key set. - * - * This method allows for the creation of a `Did` object using pre-existing key material, - * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly - * useful when the key material is already available and you want to construct a `Did` object - * based on these keys, instead of generating new keys. - * - * @remarks - * The `verificationMethods` array must contain exactly one key since the `did:jwk` method only - * supports a single verification method. - * - * The key material (both public and private keys) should be provided in JWK format. The method - * handles the inclusion of these keys in the DID Document and sets up the necessary verification - * relationships. - * - * @param params - The parameters for the `fromKeys` operation. - * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to - * generate keys and sign data. If not given, a new - * {@link LocalKmsCrypto} instance will be created and used. - * @param params.verificationMethods - An array containing the key material in JWK format. - * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. - * @throws An error if the `verificationMethods` array does not contain exactly one entry. - * - * @example - * ```ts - * // Example with an existing key in JWK format. - * const verificationMethods = [{ - * publicKeyJwk: { // public key in JWK format }, - * privateKeyJwk: { // private key in JWK format } - * }]; - * const did = await DidJwk.fromKeys({ verificationMethods }); - * ``` - */ - public static async fromKeys({ - keyManager = new LocalKmsCrypto(), - verificationMethods - }: { - keyManager?: CryptoApi & KeyImporterExporter; - } & PortableDid): Promise { - if (!verificationMethods || verificationMethods.length !== 1) { - throw new Error(`Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); - } - - if (!(verificationMethods[0].privateKeyJwk && verificationMethods[0].publicKeyJwk)) { - throw new Error(`Verification method does not contain a public and private key in JWK format`); - } - - // Store the private key in the key manager. - await keyManager.importKey({ key: verificationMethods[0].privateKeyJwk }); - - // Create the DID object from the given key material, including DID document, metadata, - // signer convenience function, and URI. - const did = await DidJwk.fromPublicKey({ - keyManager, - publicKey: verificationMethods[0].publicKeyJwk - }); - - return did; - } - /** * Instantiates a `Did` object from an existing DID using keys in an external Key Management * System (KMS). @@ -256,19 +205,19 @@ export class DidJwk extends DidMethod { * This approach ensures that the resulting `Did` object is fully operational with the provided * key manager and that all cryptographic operations related to the DID can be performed. * - * @param params - The parameters for the `fromKeyManager` operation. - * @param params.didUri - The URI of the DID to be instantiated. - * @param params.keyManager - The Key Management System to be used for key management operations. - * @returns A Promise resolving to the instantiated `Did` object. - * @throws An error if any key in the DID document is not present in the provided KMS. - * * @example * ```ts - * // Assuming keyManager is an instance of a KMS implementation + * // Assuming keyManager already contains the key material for the DID. * const didUri = 'did:jwk:example'; * const did = await DidJwk.fromKeyManager({ didUri, keyManager }); * // The 'did' is now an instance of Did, linked with the provided keyManager. * ``` + * + * @param params - The parameters for the `fromKeyManager` operation. + * @param params.didUri - The URI of the DID to be instantiated. + * @param params.keyManager - The Key Management System to be used for key management operations. + * @returns A Promise resolving to the instantiated `Did` object. + * @throws An error if any key in the DID document is not present in the provided KMS. */ public static async fromKeyManager({ didUri, keyManager }: { didUri: string; @@ -314,6 +263,67 @@ export class DidJwk extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: didUri }; } + /** + * Instantiates a `Did` object for the `did:dht` method from a given {@link PortableDid}. + * + * This method allows for the creation of a `Did` object using pre-existing key material, + * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly + * useful when the key material is already available and you want to construct a `Did` object + * based on these keys, instead of generating new keys. + * + * @remarks + * The `verificationMethods` array must contain exactly one key since the `did:jwk` method only + * supports a single verification method. + * + * The key material (both public and private keys) should be provided in JWK format. The method + * handles the inclusion of these keys in the DID Document and sets up the necessary verification + * relationships. + * + * @example + * ```ts + * // Example with an existing key in JWK format. + * const verificationMethods = [{ + * publicKeyJwk: { // public key in JWK format }, + * privateKeyJwk: { // private key in JWK format } + * }]; + * const did = await DidJwk.fromKeys({ verificationMethods }); + * ``` + * + * @param params - The parameters for the `fromKeys` operation. + * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to + * generate keys and sign data. If not given, a new + * {@link LocalKmsCrypto} instance will be created and used. + * @param params.verificationMethods - An array containing the key material in JWK format. + * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. + * @throws An error if the `verificationMethods` array does not contain exactly one entry. + */ + public static async fromKeys({ + keyManager = new LocalKmsCrypto(), + verificationMethods + }: { + keyManager?: CryptoApi & KeyImporterExporter; + } & PortableDid): Promise { + if (!verificationMethods || verificationMethods.length !== 1) { + throw new Error(`Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); + } + + if (!(verificationMethods[0].privateKeyJwk && verificationMethods[0].publicKeyJwk)) { + throw new Error(`Verification method does not contain a public and private key in JWK format`); + } + + // Store the private key in the key manager. + await keyManager.importKey({ key: verificationMethods[0].privateKeyJwk }); + + // Create the DID object from the given key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidJwk.fromPublicKey({ + keyManager, + publicKey: verificationMethods[0].publicKeyJwk + }); + + return did; + } + /** * Given the W3C DID Document of a `did:jwk` DID, return the verification method that will be used * for signing messages and credentials. If given, the `methodId` parameter is used to select the From 00700f7ca4bf511be573386404cb287e058bfc3d Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 25 Jan 2024 17:33:18 -0500 Subject: [PATCH 22/39] Finish reintroducing DID resolvers Signed-off-by: Frank Hinek --- packages/dids/old/src/did-resolver.ts | 208 ------------------ packages/dids/old/src/resolver-cache-level.ts | 82 ------- packages/dids/old/src/resolver-cache-noop.ts | 25 --- packages/dids/old/tests/did-resolver.spec.ts | 201 ----------------- packages/dids/src/methods/did-key.ts | 45 ++-- .../dids/src/resolver/resolver-cache-level.ts | 121 ++++++++++ .../fixtures/test-vectors/did-resolver.ts | 38 ---- .../dids/tests/resolver/did-resolver.spec.ts | 102 ++------- .../resolver}/resolver-cache-level.spec.ts | 84 ++++++- .../resolver/resolver-cache-noop.spec.ts | 33 +++ 10 files changed, 288 insertions(+), 651 deletions(-) delete mode 100644 packages/dids/old/src/did-resolver.ts delete mode 100644 packages/dids/old/src/resolver-cache-level.ts delete mode 100644 packages/dids/old/src/resolver-cache-noop.ts delete mode 100644 packages/dids/old/tests/did-resolver.spec.ts create mode 100644 packages/dids/src/resolver/resolver-cache-level.ts delete mode 100644 packages/dids/tests/fixtures/test-vectors/did-resolver.ts rename packages/dids/{old/tests => tests/resolver}/resolver-cache-level.spec.ts (62%) create mode 100644 packages/dids/tests/resolver/resolver-cache-noop.spec.ts diff --git a/packages/dids/old/src/did-resolver.ts b/packages/dids/old/src/did-resolver.ts deleted file mode 100644 index 1c0933b7f..000000000 --- a/packages/dids/old/src/did-resolver.ts +++ /dev/null @@ -1,208 +0,0 @@ -import type { - DidResource, - DidResolverCache, - DidMethodResolver, - DidResolutionResult, - DidResolutionOptions, - DidDereferencingResult, - DidDereferencingOptions, -} from './types.js'; - -import { parseDid } from './utils.js'; -import { DidResolverCacheNoop } from './resolver-cache-noop.js'; - -export type DidResolverOptions = { - didResolvers: DidMethodResolver[]; - cache?: DidResolverCache; -} - -/** - * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to - * their corresponding DID documents. - * - * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver` - * instances, each responsible for a specific DID method. It also employs a caching mechanism to - * store and retrieve previously resolved DID documents for efficiency. - * - * Usage: - * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache. - * - Use `resolve` to resolve a DID to its DID Resolution Result. - * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods. - * - * @example - * ```ts - * const resolver = new DidResolver({ - * didResolvers: [], - * cache: new DidResolverCacheNoop() - * }); - * - * const resolutionResult = await resolver.resolve('did:example:123456'); - * const dereferenceResult = await resolver.dereference({ didUrl: 'did:example:123456#key-1' }); - * ``` - */ -export class DidResolver { - /** - * A cache for storing resolved DID documents. - */ - private cache: DidResolverCache; - - /** - * A map to store method resolvers against method names. - */ - private didResolvers: Map = new Map(); - - /** - * Constructs a new `DidResolver`. - * - * @param options - The options for constructing the `DidResolver`. - * @param options.didResolvers - An array of `DidMethodResolver` instances. - * @param options.cache - Optional. A cache for storing resolved DID documents. If not provided, a no-operation cache is used. - */ - constructor(options: DidResolverOptions) { - this.cache = options.cache || DidResolverCacheNoop; - - for (const resolver of options.didResolvers) { - this.didResolvers.set(resolver.methodName, resolver); - } - } - - /** - * Resolves a DID to a DID Resolution Result. - * If the DID Resolution Result is present in the cache, it returns the cached - * result. Otherwise, it uses the appropriate method resolver to resolve - * the DID, stores the resolution result in the cache, and returns the - * resolultion result. - * - * Note: The method signature for resolve() in this implementation must match - * the `DidResolver` implementation in - * {@link https://github.com/TBD54566975/dwn-sdk-js | dwn-sdk-js} so that - * Web5 apps and the underlying DWN instance can share the same DID - * resolution cache. - * - * @param didUrl - The DID or DID URL to resolve. - * @returns A promise that resolves to the DID Resolution Result. - */ - async resolve(didUrl: string, resolutionOptions?: DidResolutionOptions): Promise { - - const parsedDid = parseDid({ didUrl }); - if (!parsedDid) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'invalidDid', - errorMessage : `Cannot parse DID: ${didUrl}` - } - }; - } - - const resolver = this.didResolvers.get(parsedDid.method); - if (!resolver) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'methodNotSupported', - errorMessage : `Method not supported: ${parsedDid.method}` - } - }; - } - - const cachedResolutionResult = await this.cache.get(parsedDid.did); - - if (cachedResolutionResult) { - return cachedResolutionResult; - } else { - const resolutionResult = await resolver.resolve({ - didUrl: parsedDid.did, - resolutionOptions - }); - - await this.cache.set(parsedDid.did, resolutionResult); - - return resolutionResult; - } - } - - /** - * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource. This method - * interprets the DID URL's components, which include the DID method, method-specific identifier, - * path, query, and fragment, and retrieves the related resource as per the DID Core specifications. - * The dereferencing process involves resolving the DID contained in the DID URL to a DID document, - * and then extracting the specific part of the document identified by the fragment in the DID URL. - * If no fragment is specified, the entire DID document is returned. - * - * This method supports resolution of different components within a DID document such as service - * endpoints and verification methods, based on their IDs. It accommodates both full and - * DID URLs as specified in the DID Core specification. - * - * More information on DID URL dereferencing can be found in the - * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}. - * - * @param didUrl - The DID URL string to dereference. - * @param [dereferenceOptions] - Input options to the dereference function. Optional. - * @returns a {@link DidDereferencingResult} - */ - async dereference({ didUrl }: { - didUrl: string, - dereferenceOptions?: DidDereferencingOptions - }): Promise { - const { didDocument, didResolutionMetadata = {}, didDocumentMetadata = {} } = await this.resolve(didUrl); - if (didResolutionMetadata.error) { - return { - dereferencingMetadata : { error: 'invalidDidUrl' }, - contentStream : null, - contentMetadata : {} - }; - } - - const parsedDid = parseDid({ didUrl }); - - // Return the entire DID Document if no fragment is present on the did url - if (!parsedDid.fragment) { - return { - dereferencingMetadata : { contentType: 'application/did+json' }, - contentStream : didDocument, - contentMetadata : didDocumentMetadata - }; - } - - const { service = [], verificationMethod = [] } = didDocument; - - // Create a set of possible id matches. The DID spec allows for an id to be the entire - // did#fragment or just #fragment. - // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}. - // Using a Set for fast string comparison since some DID methods have long identifiers. - const idSet = new Set([didUrl, parsedDid.fragment, `#${parsedDid.fragment}`]); - - let didResource: DidResource; - for (let vm of verificationMethod) { - if (idSet.has(vm.id)) { - didResource = vm; - break; - } - } - - for (let svc of service) { - if (idSet.has(svc.id)) { - didResource = svc; - break; - } - } - if (didResource) { - return { - dereferencingMetadata : { contentType: 'application/did+json' }, - contentStream : didResource, - contentMetadata : didResolutionMetadata - }; - } else { - return { - dereferencingMetadata : { error: 'notFound' }, - contentStream : null, - contentMetadata : {}, - }; - } - } -} \ No newline at end of file diff --git a/packages/dids/old/src/resolver-cache-level.ts b/packages/dids/old/src/resolver-cache-level.ts deleted file mode 100644 index 973d5866e..000000000 --- a/packages/dids/old/src/resolver-cache-level.ts +++ /dev/null @@ -1,82 +0,0 @@ -import type { DidResolutionResult, DidResolverCache } from './types.js'; - -import ms from 'ms'; -import { Level } from 'level'; - -export type DidResolverCacheOptions = { - location?: string; - ttl?: string; -} - -type CacheWrapper = { - ttlMillis: number; - value: DidResolutionResult; -} - -/** - * Naive level-based cache for did resolution results. It just so happens that level aggressively keeps as much as it - * can in memory when possible while also writing to the filesystem (in node runtime) and indexedDB (in browser runtime). - * the persistent aspect is especially useful across page refreshes. - */ -export class DidResolverCacheLevel implements DidResolverCache { - private cache: Level; - private ttl: number; - - private static defaultOptions: Required = { - location : 'DATA/AGENT/DID_RESOLVERCACHE', - ttl : '15m' - }; - - constructor(options: DidResolverCacheOptions = {}) { - let { location, ttl } = options; - - location ??= DidResolverCacheLevel.defaultOptions.location; - ttl ??= DidResolverCacheLevel.defaultOptions.ttl; - - this.cache = new Level(location); - this.ttl = ms(ttl); - } - - async get(did: string): Promise { - try { - const str = await this.cache.get(did); - const cacheWrapper: CacheWrapper = JSON.parse(str); - - if (Date.now() >= cacheWrapper.ttlMillis) { - // defer deletion to be called in the next tick of the js event loop - this.cache.nextTick(() => this.cache.del(did)); - - return; - } else { - return cacheWrapper.value; - } - - } catch(error: any) { - // Don't throw when a key wasn't found. - if (error.code === 'LEVEL_NOT_FOUND') { - return; - } - - throw error; - } - } - - set(did: string, value: DidResolutionResult): Promise { - const cacheWrapper: CacheWrapper = { ttlMillis: Date.now() + this.ttl, value }; - const str = JSON.stringify(cacheWrapper); - - return this.cache.put(did, str); - } - - delete(did: string): Promise { - return this.cache.del(did); - } - - clear(): Promise { - return this.cache.clear(); - } - - close(): Promise { - return this.cache.close(); - } -} \ No newline at end of file diff --git a/packages/dids/old/src/resolver-cache-noop.ts b/packages/dids/old/src/resolver-cache-noop.ts deleted file mode 100644 index 1823e30cb..000000000 --- a/packages/dids/old/src/resolver-cache-noop.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { DidResolutionResult, DidResolverCache } from './types.js'; - -/** - * no-op cache that is used as the default cache for did-resolver. - * The motivation behind using a no-op cache as the default stems from - * the desire to maximize the potential for this library to be used - * in as many JS runtimes as possible - */ -export const DidResolverCacheNoop: DidResolverCache = { - get: function (_key: string): Promise { - return null as any; - }, - set: function (_key: string, _value: DidResolutionResult): Promise { - return null as any; - }, - delete: function (_key: string): Promise { - return null as any; - }, - clear: function (): Promise { - return null as any; - }, - close: function (): Promise { - return null as any; - } -}; \ No newline at end of file diff --git a/packages/dids/old/tests/did-resolver.spec.ts b/packages/dids/old/tests/did-resolver.spec.ts deleted file mode 100644 index 3aa79137c..000000000 --- a/packages/dids/old/tests/did-resolver.spec.ts +++ /dev/null @@ -1,201 +0,0 @@ -import * as sinon from 'sinon'; -import { expect } from 'chai'; - -import { DidKeyMethod } from '../src/did-key.js'; -import { DidResolver } from '../src/did-resolver.js'; -import { didResolverTestVectors } from './fixtures/test-vectors/did-resolver.js'; -import { DidResolverCacheLevel } from '../src/resolver-cache-level.js'; -import { DidResolverCache } from '../src/types.js'; -import { isVerificationMethod } from '../src/utils.js'; - -describe('DidResolver', () => { - describe('resolve()', () => { - let didResolver: DidResolver; - - describe('with no-op cache', () => { - beforeEach(() => { - const didMethodApis = [DidKeyMethod]; - didResolver = new DidResolver({ didResolvers: didMethodApis }); - }); - - it('returns an invalidDid error if the DID cannot be parsed', async () => { - const didResolutionResult = await didResolver.resolve('unparseable:did'); - expect(didResolutionResult).to.exist; - expect(didResolutionResult).to.have.property('@context'); - expect(didResolutionResult).to.have.property('didDocument'); - expect(didResolutionResult).to.have.property('didDocumentMetadata'); - expect(didResolutionResult).to.have.property('didResolutionMetadata'); - expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'invalidDid'); - }); - - it('returns a methodNotSupported error if the DID method is not supported', async () => { - const didResolutionResult = await didResolver.resolve('did:unknown:abc123'); - expect(didResolutionResult).to.exist; - expect(didResolutionResult).to.have.property('@context'); - expect(didResolutionResult).to.have.property('didDocument'); - expect(didResolutionResult).to.have.property('didDocumentMetadata'); - expect(didResolutionResult).to.have.property('didResolutionMetadata'); - expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'methodNotSupported'); - }); - - it('passes test vectors', async () => { - for (const vector of didResolverTestVectors) { - const didResolutionResult = await didResolver.resolve(vector.input); - expect(didResolutionResult.didDocument).to.deep.equal(vector.output); - } - }); - }); - - describe('with LevelDB cache', () => { - let cache: DidResolverCache; - - before(() => { - cache = new DidResolverCacheLevel(); - }); - - beforeEach(async () => { - await cache.clear(); - const didMethodApis = [DidKeyMethod]; - didResolver = new DidResolver({ cache, didResolvers: didMethodApis }); - }); - - after(async () => { - await cache.clear(); - }); - - it('should cache miss for the first resolution attempt', async () => { - const did = 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D'; - // Create a Sinon spy on the get method of the cache - const cacheGetSpy = sinon.spy(cache, 'get'); - - await didResolver.resolve(did); - - // Verify that cache.get() was called. - expect(cacheGetSpy.called).to.be.true; - - // Verify the cache returned undefined. - const getCacheResult = await cacheGetSpy.returnValues[0]; - expect(getCacheResult).to.be.undefined; - - cacheGetSpy.restore(); - }); - - it('should cache hit for the second resolution attempt', async () => { - const did = 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D'; - // Create a Sinon spy on the get method of the cache - const cacheGetSpy = sinon.spy(cache, 'get'); - const cacheSetSpy = sinon.spy(cache, 'set'); - - await didResolver.resolve(did); - - // Verify there was a cache miss. - expect(cacheGetSpy.calledOnce).to.be.true; - expect(cacheSetSpy.calledOnce).to.be.true; - - // Verify the cache returned undefined. - let getCacheResult = await cacheGetSpy.returnValues[0]; - expect(getCacheResult).to.be.undefined; - - // Resolve the same DID again. - await didResolver.resolve(did); - - // Verify that cache.get() was called. - expect(cacheGetSpy.called).to.be.true; - expect(cacheGetSpy.calledTwice).to.be.true; - - // Verify there was a cache hit this time. - getCacheResult = await cacheGetSpy.returnValues[1]; - expect(getCacheResult).to.not.be.undefined; - expect(getCacheResult).to.have.property('@context'); - expect(getCacheResult).to.have.property('didDocument'); - expect(getCacheResult).to.have.property('didDocumentMetadata'); - expect(getCacheResult).to.have.property('didResolutionMetadata'); - - cacheGetSpy.restore(); - }); - }); - }); - - describe('dereference()', () => { - let didResolver: DidResolver; - - beforeEach(() => { - const didMethodApis = [DidKeyMethod]; - didResolver = new DidResolver({ didResolvers: didMethodApis }); - }); - - it('returns a result with contentStream set to null and dereferenceMetadata.error set if resolution fails', async () => { - const result = await didResolver.dereference({ didUrl: 'abcd123;;;' }); - expect(result.contentStream).to.be.null; - expect(result.dereferencingMetadata.error).to.exist; - expect(result.dereferencingMetadata.error).to.equal('invalidDidUrl'); - }); - - it('returns a DID verification method resource as the value of contentStream if found', async () => { - const did = await DidKeyMethod.create(); - - const result = await didResolver.dereference({ didUrl: did.document.verificationMethod[0].id }); - expect(result.contentStream).to.be.not.be.null; - expect(result.dereferencingMetadata.error).to.not.exist; - - const didResource = result.contentStream; - expect(isVerificationMethod(didResource)).to.be.true; - }); - - it('returns a DID service resource as the value of contentStream if found', async () => { - // Create an instance of DidResolver - const resolver = new DidResolver({ didResolvers: [] }); - - // Stub the resolve method - const mockDidResolutionResult = { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : { - id : 'did:example:123456789abcdefghi', - service : [ - { - id : '#dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : { - nodes: [ 'https://dwn.tbddev.test/dwn0' ] - } - } - ], - }, - didDocumentMetadata : {}, - didResolutionMetadata : {} - }; - - const resolveStub = sinon.stub(resolver, 'resolve').resolves(mockDidResolutionResult); - - const testDidUrl = 'did:example:123456789abcdefghi#dwn'; - const result = await resolver.dereference({ didUrl: testDidUrl }); - - expect(resolveStub.calledOnce).to.be.true; - expect(result.contentStream).to.deep.equal(mockDidResolutionResult.didDocument.service[0]); - - // Restore the original resolve method - resolveStub.restore(); - }); - - it('returns the entire DID document as the value of contentStream if the DID URL contains no fragment', async () => { - const did = await DidKeyMethod.create(); - - const result = await didResolver.dereference({ didUrl: did.did }); - expect(result.contentStream).to.be.not.be.null; - expect(result.dereferencingMetadata.error).to.not.exist; - - const didResource = result.contentStream; - expect(didResource['@context']).to.exist; - expect(didResource['@context']).to.include('https://www.w3.org/ns/did/v1'); - }); - - it('returns contentStream set to null and dereferenceMetadata.error set to notFound if resource is not found', async () => { - const did = await DidKeyMethod.create(); - - const result = await didResolver.dereference({ didUrl: `${did.did}#0` }); - expect(result.contentStream).to.be.null; - expect(result.dereferencingMetadata.error).to.exist; - expect(result.dereferencingMetadata.error).to.equal('notFound'); - }); - }); -}); \ No newline at end of file diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index 7673cd666..b88b71a4e 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -1,4 +1,4 @@ -import type { CryptoApi, Jwk } from '@web5/crypto'; +import type { CryptoApi, InferKeyGeneratorAlgorithm, Jwk } from '@web5/crypto'; import { universalTypeOf } from '@web5/common'; import { @@ -8,7 +8,7 @@ import { LocalKmsCrypto, } from '@web5/crypto'; -import type { Did, DidCreateOptions, PortableDid } from './did-method.js'; +import type { Did, DidCreateOptions, DidCreateVerificationMethod, PortableDid } from './did-method.js'; import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; import { DidMethod } from './did-method.js'; @@ -18,34 +18,42 @@ import { getVerificationMethodTypes } from '../utils.js'; - - - /** * Defines the set of options available when creating a new Decentralized Identifier (DID) with the * 'did:key' method. * - * Either the `algorithm` or `keySet` option must be specified, but not both. - * - If `algorithm` is given, a new key will be generated using the specified algorithm. - * - If `keySet` is given, it must contain exactly one key. + * Either the `algorithm` or `verificationMethods` option can be specified, but not both. + * - A new key will be generated using the algorithm identifier specified in either the `algorithm` + * property or the `verificationMethods` object's `algorithm` property. + * - If `verificationMethods` is given, it must contain exactly one entry since DID Key only + * supports a single verification method. * - If neither is given, the default is to generate a new Ed25519 key. * * @example * ```ts - * const keyManager = new LocalKmsCrypto(); + * // By default, when no options are given, a new Ed25519 key will be generated. + * const did = await DidKey.create(); + * + * // The algorithm to use for key generation can be specified as a top-level option. + * const did = await DidKey.create({ + * options: { algorithm = 'secp256k1' } + * }); + * + * // Or, alternatively as a property of the verification method. * const did = await DidKey.create({ - * keyManager, - * options: { algorithm = 'Ed25519' } + * options: { + * verificationMethods: [{ algorithm = 'secp256k1' }] + * } * }); * ``` */ export interface DidKeyCreateOptions extends DidCreateOptions { /** * Optionally specify the algorithm to be used for key generation. - * - * Note: This option */ - algorithm?: AlgorithmIdentifier; + algorithm?: TKms extends CryptoApi + ? InferKeyGeneratorAlgorithm + : InferKeyGeneratorAlgorithm; /** * Optionally enable encryption key derivation during DID creation. @@ -65,14 +73,15 @@ export interface DidKeyCreateOptions extends DidCreateOptions { enableEncryptionKeyDerivation?: boolean; /** - * Optionally specify an existing set of keys to be used for DID creation. + * Optionally specify the format of the public key to be used for DID creation. */ - keySet?: PortableDid; + publicKeyFormat?: keyof typeof DidKey.VERIFICATION_METHOD_TYPES; /** - * Optionally specify the format of the public key to be used for DID creation. + * Alternatively, specify the algorithm to be used for key generation of the single verification + * method in the DID Document. */ - publicKeyFormat?: keyof typeof DidKey.VERIFICATION_METHOD_TYPES; + verificationMethods?: [DidCreateVerificationMethod]; } /** diff --git a/packages/dids/src/resolver/resolver-cache-level.ts b/packages/dids/src/resolver/resolver-cache-level.ts new file mode 100644 index 000000000..0deb1c77d --- /dev/null +++ b/packages/dids/src/resolver/resolver-cache-level.ts @@ -0,0 +1,121 @@ +import type { AbstractLevel } from 'abstract-level'; + +import ms from 'ms'; +import { Level } from 'level'; + +import type { DidResolverCache } from './did-resolver.js'; +import type { DidResolutionResult } from '../types/did-core.js'; + +export type DidResolverCacheLevelOptions = { + db?: AbstractLevel; + location?: string; + ttl?: string; +} + +type CacheWrapper = { + ttlMillis: number; + value: DidResolutionResult; +} + +/** + * A Level-based cache implementation for storing and retrieving DID resolution results. + * + * This cache uses LevelDB for storage, allowing data persistence across process restarts or + * browser refreshes. It's suitable for both Node.js and browser environments. + * + * @remarks + * The LevelDB cache keeps data in memory for fast access and also writes to the filesystem in + * Node.js or indexedDB in browsers. Time-to-live (TTL) for cache entries is configurable. + * + * @example + * ``` + * const cache = new DidResolverCacheLevel({ ttl: '15m' }); + * ``` + */ +export class DidResolverCacheLevel implements DidResolverCache { + private cache: AbstractLevel; + private ttl: number; + + constructor({ + db, + location = 'DATA/DID_RESOLVERCACHE', + ttl = '15m' + }: DidResolverCacheLevelOptions = {}) { + this.cache = db ?? new Level(location); + this.ttl = ms(ttl); + } + + /** + * Retrieves a DID resolution result from the cache. + * + * If the cached item has exceeded its TTL, it's scheduled for deletion and undefined is returned. + * + * @param did - The DID string used as the key for retrieving the cached result. + * @returns The cached DID resolution result or undefined if not found or expired. + */ + async get(did: string): Promise { + try { + const str = await this.cache.get(did); + const cacheWrapper: CacheWrapper = JSON.parse(str); + + if (Date.now() >= cacheWrapper.ttlMillis) { + // defer deletion to be called in the next tick of the js event loop + this.cache.nextTick(() => this.cache.del(did)); + + return; + } else { + return cacheWrapper.value; + } + + } catch(error: any) { + // Don't throw when a key wasn't found. + if (error.notFound) { + return; + } + + throw error; + } + } + + /** + * Stores a DID resolution result in the cache with a TTL. + * + * @param did - The DID string used as the key for storing the result. + * @param value - The DID resolution result to be cached. + * @returns A promise that resolves when the operation is complete. + */ + set(did: string, value: DidResolutionResult): Promise { + const cacheWrapper: CacheWrapper = { ttlMillis: Date.now() + this.ttl, value }; + const str = JSON.stringify(cacheWrapper); + + return this.cache.put(did, str); + } + + /** + * Deletes a DID resolution result from the cache. + * + * @param did - The DID string used as the key for deletion. + * @returns A promise that resolves when the operation is complete. + */ + delete(did: string): Promise { + return this.cache.del(did); + } + + /** + * Clears all entries from the cache. + * + * @returns A promise that resolves when the operation is complete. + */ + clear(): Promise { + return this.cache.clear(); + } + + /** + * Closes the underlying LevelDB store. + * + * @returns A promise that resolves when the store is closed. + */ + close(): Promise { + return this.cache.close(); + } +} \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/did-resolver.ts b/packages/dids/tests/fixtures/test-vectors/did-resolver.ts deleted file mode 100644 index e215406e9..000000000 --- a/packages/dids/tests/fixtures/test-vectors/did-resolver.ts +++ /dev/null @@ -1,38 +0,0 @@ -export const didResolverTestVectors = [ - { - id : 'did.resolve.1', - input : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - output : { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'ZuVpK6HnahBtV1Y_jhnYK-fqHAz3dXmWXT_h-J7SL6I' - } - } - ], - 'assertionMethod': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'authentication': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityDelegation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityInvocation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ] - } - }, -]; \ No newline at end of file diff --git a/packages/dids/tests/resolver/did-resolver.spec.ts b/packages/dids/tests/resolver/did-resolver.spec.ts index 050131b47..0a706f0b4 100644 --- a/packages/dids/tests/resolver/did-resolver.spec.ts +++ b/packages/dids/tests/resolver/did-resolver.spec.ts @@ -1,13 +1,13 @@ -import * as sinon from 'sinon'; -import { expect } from 'chai'; +import type { UnwrapPromise } from '@web5/common'; -// import type { DidResolverCache } from '../../src/resolver/did-resolver.js'; +import { expect } from 'chai'; +import * as sinon from 'sinon'; import { DidJwk } from '../../src/methods/did-jwk.js'; import { DidResource } from '../../src/types/did-core.js'; import { isDidVerificationMethod } from '../../src/utils.js'; import { DidResolver } from '../../src/resolver/did-resolver.js'; -// import { didResolverTestVectors } from './fixtures/test-vectors/did-resolver.js'; +import DidJwkResolveTestVector from '../../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; describe('DidResolver', () => { describe('resolve()', () => { @@ -18,13 +18,6 @@ describe('DidResolver', () => { didResolver = new DidResolver({ didResolvers: didMethodApis }); }); - // it('passes test vectors', async () => { - // for (const vector of didResolverTestVectors) { - // const didResolutionResult = await didResolver.resolve(vector.input); - // expect(didResolutionResult.didDocument).to.deep.equal(vector.output); - // } - // }); - it('returns an invalidDid error if the DID cannot be parsed', async () => { const didResolutionResult = await didResolver.resolve('unparseable:did'); expect(didResolutionResult).to.exist; @@ -45,74 +38,20 @@ describe('DidResolver', () => { expect(didResolutionResult.didResolutionMetadata).to.have.property('error', 'methodNotSupported'); }); - // describe('with LevelDB cache', () => { - // let cache: DidResolverCache; - - // before(() => { - // cache = new DidResolverCacheLevel(); - // }); - - // beforeEach(async () => { - // await cache.clear(); - // const didMethodApis = [DidKeyMethod]; - // didResolver = new DidResolver({ cache, didResolvers: didMethodApis }); - // }); - - // after(async () => { - // await cache.clear(); - // }); - - // it('should cache miss for the first resolution attempt', async () => { - // const did = 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D'; - // // Create a Sinon spy on the get method of the cache - // const cacheGetSpy = sinon.spy(cache, 'get'); - - // await didResolver.resolve(did); - - // // Verify that cache.get() was called. - // expect(cacheGetSpy.called).to.be.true; - - // // Verify the cache returned undefined. - // const getCacheResult = await cacheGetSpy.returnValues[0]; - // expect(getCacheResult).to.be.undefined; + it('pass DID JWK resolve test vectors', async () => { + type TestVector = { + description: string; + input: Parameters[0]; + output: UnwrapPromise>; + errors: boolean; + }; - // cacheGetSpy.restore(); - // }); + for (const vector of DidJwkResolveTestVector.vectors as unknown as TestVector[]) { + const didResolutionResult = await DidJwk.resolve(vector.input); - // it('should cache hit for the second resolution attempt', async () => { - // const did = 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D'; - // // Create a Sinon spy on the get method of the cache - // const cacheGetSpy = sinon.spy(cache, 'get'); - // const cacheSetSpy = sinon.spy(cache, 'set'); - - // await didResolver.resolve(did); - - // // Verify there was a cache miss. - // expect(cacheGetSpy.calledOnce).to.be.true; - // expect(cacheSetSpy.calledOnce).to.be.true; - - // // Verify the cache returned undefined. - // let getCacheResult = await cacheGetSpy.returnValues[0]; - // expect(getCacheResult).to.be.undefined; - - // // Resolve the same DID again. - // await didResolver.resolve(did); - - // // Verify that cache.get() was called. - // expect(cacheGetSpy.called).to.be.true; - // expect(cacheGetSpy.calledTwice).to.be.true; - - // // Verify there was a cache hit this time. - // getCacheResult = await cacheGetSpy.returnValues[1]; - // expect(getCacheResult).to.not.be.undefined; - // expect(getCacheResult).to.have.property('@context'); - // expect(getCacheResult).to.have.property('didDocument'); - // expect(getCacheResult).to.have.property('didDocumentMetadata'); - // expect(getCacheResult).to.have.property('didResolutionMetadata'); - - // cacheGetSpy.restore(); - // }); - // }); + expect(didResolutionResult).to.deep.equal(vector.output); + } + }); }); describe('dereference()', () => { @@ -123,13 +62,20 @@ describe('DidResolver', () => { didResolver = new DidResolver({ didResolvers: didMethodApis }); }); - it('returns a result with contentStream set to null and dereferenceMetadata.error set if resolution fails', async () => { + it('returns a result with contentStream set to null and dereferenceMetadata.error set to invalidDidUrl, if the DID URL is invalid', async () => { const result = await didResolver.dereference('abcd123;;;'); expect(result.contentStream).to.be.null; expect(result.dereferencingMetadata.error).to.exist; expect(result.dereferencingMetadata.error).to.equal('invalidDidUrl'); }); + it('returns a result with contentStream set to null and dereferenceMetadata.error set to invalidDid, if the DID is invalid', async () => { + const result = await didResolver.dereference('did:jwk:abcd123'); + expect(result.contentStream).to.be.null; + expect(result.dereferencingMetadata.error).to.exist; + expect(result.dereferencingMetadata.error).to.equal('invalidDid'); + }); + it('returns a DID verification method resource as the value of contentStream if found', async () => { const did = await DidJwk.create(); diff --git a/packages/dids/old/tests/resolver-cache-level.spec.ts b/packages/dids/tests/resolver/resolver-cache-level.spec.ts similarity index 62% rename from packages/dids/old/tests/resolver-cache-level.spec.ts rename to packages/dids/tests/resolver/resolver-cache-level.spec.ts index e038f37df..99f49da32 100644 --- a/packages/dids/old/tests/resolver-cache-level.spec.ts +++ b/packages/dids/tests/resolver/resolver-cache-level.spec.ts @@ -2,7 +2,10 @@ import sinon from 'sinon'; import chai, { expect } from 'chai'; import chaiAsPromised from 'chai-as-promised'; -import { DidResolverCacheLevel } from '../src/resolver-cache-level.js'; +import { Level } from 'level'; +import { DidJwk } from '../../src/methods/did-jwk.js'; +import { DidResolver, DidResolverCache } from '../../src/resolver/did-resolver.js'; +import { DidResolverCacheLevel } from '../../src/resolver/resolver-cache-level.js'; chai.use(chaiAsPromised); @@ -29,6 +32,13 @@ describe('DidResolverCacheLevel', () => { expect(cache).to.exist; }); + it('should initialize with a custom database', async function() { + const db = new Level('__TESTDATA__/customLocation'); + const cache = new DidResolverCacheLevel({ db }); + expect(cache).to.be.an.instanceof(DidResolverCacheLevel); + await cache.close(); + }); + it('uses a 15 minute TTL, by default', async () => { cache = new DidResolverCacheLevel({ location: cacheStoreLocation }); @@ -155,12 +165,84 @@ describe('DidResolverCacheLevel', () => { cache = new DidResolverCacheLevel({ location: cacheStoreLocation }); await expect( + // @ts-expect-error - Test invalid input. cache.get(null) ).to.eventually.be.rejectedWith(Error, 'Key cannot be null or undefine'); await expect( + // @ts-expect-error - Test invalid input. cache.get(undefined) ).to.eventually.be.rejectedWith(Error, 'Key cannot be null or undefine'); }); }); + + describe('with DidResolver', () => { + let cache: DidResolverCache; + let didResolver: DidResolver; + + before(() => { + cache = new DidResolverCacheLevel(); + }); + + beforeEach(async () => { + await cache.clear(); + const didMethodApis = [DidJwk]; + didResolver = new DidResolver({ cache, didResolvers: didMethodApis }); + }); + + after(async () => { + await cache.clear(); + }); + + it('should cache miss for the first resolution attempt', async () => { + const did = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; + // Create a Sinon spy on the get method of the cache + const cacheGetSpy = sinon.spy(cache, 'get'); + + await didResolver.resolve(did); + + // Verify that cache.get() was called. + expect(cacheGetSpy.called).to.be.true; + + // Verify the cache returned undefined. + const getCacheResult = await cacheGetSpy.returnValues[0]; + expect(getCacheResult).to.be.undefined; + + cacheGetSpy.restore(); + }); + + it('should cache hit for the second resolution attempt', async () => { + const did = 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'; + // Create a Sinon spy on the get method of the cache + const cacheGetSpy = sinon.spy(cache, 'get'); + const cacheSetSpy = sinon.spy(cache, 'set'); + + await didResolver.resolve(did); + + // Verify there was a cache miss. + expect(cacheGetSpy.calledOnce).to.be.true; + expect(cacheSetSpy.calledOnce).to.be.true; + + // Verify the cache returned undefined. + let getCacheResult = await cacheGetSpy.returnValues[0]; + expect(getCacheResult).to.be.undefined; + + // Resolve the same DID again. + await didResolver.resolve(did); + + // Verify that cache.get() was called. + expect(cacheGetSpy.called).to.be.true; + expect(cacheGetSpy.calledTwice).to.be.true; + + // Verify there was a cache hit this time. + getCacheResult = await cacheGetSpy.returnValues[1]; + expect(getCacheResult).to.not.be.undefined; + expect(getCacheResult).to.have.property('@context'); + expect(getCacheResult).to.have.property('didDocument'); + expect(getCacheResult).to.have.property('didDocumentMetadata'); + expect(getCacheResult).to.have.property('didResolutionMetadata'); + + cacheGetSpy.restore(); + }); + }); }); \ No newline at end of file diff --git a/packages/dids/tests/resolver/resolver-cache-noop.spec.ts b/packages/dids/tests/resolver/resolver-cache-noop.spec.ts new file mode 100644 index 000000000..b1fd7e4ea --- /dev/null +++ b/packages/dids/tests/resolver/resolver-cache-noop.spec.ts @@ -0,0 +1,33 @@ +import { expect } from 'chai'; +import { DidResolverCacheNoop } from '../../src/resolver/resolver-cache-noop.js'; + +describe('DidResolverCacheNoop', function() { + it('returns null for get method', async function() { + const result = await DidResolverCacheNoop.get('someKey'); + expect(result).to.be.null; + }); + + it('returns null for set method', async function() { + const result = await DidResolverCacheNoop.set('someKey', { + didResolutionMetadata : {}, + didDocument : null, + didDocumentMetadata : {}, + }); + expect(result).to.be.null; + }); + + it('returns null for delete method', async function() { + const result = await DidResolverCacheNoop.delete('someKey'); + expect(result).to.be.null; + }); + + it('returns null for clear method', async function() { + const result = await DidResolverCacheNoop.clear(); + expect(result).to.be.null; + }); + + it('returns null for close method', async function() { + const result = await DidResolverCacheNoop.close(); + expect(result).to.be.null; + }); +}); From cfb8a449fd721384dab2ad329cc309c4cc7cac42 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Fri, 26 Jan 2024 05:48:19 -0500 Subject: [PATCH 23/39] Support secp256k1 as an algorithm identifier for generateKey() Signed-off-by: Frank Hinek --- package-lock.json | 18 +++++++++++-- packages/crypto/package.json | 2 +- packages/crypto/src/algorithms/ecdsa.ts | 6 +++-- packages/crypto/src/local-kms-crypto.ts | 26 +++++++++++-------- packages/crypto/src/types/key-generator.ts | 4 +-- .../crypto/tests/algorithms/ecdsa.spec.ts | 13 ++++++++++ .../crypto/tests/local-kms-crypto.spec.ts | 20 +++++++------- packages/dids/package.json | 2 +- packages/dids/src/methods/did-dht.ts | 8 +++--- packages/dids/src/methods/did-key.ts | 11 ++++---- packages/dids/tests/methods/did-dht.spec.ts | 2 +- packages/dids/tests/methods/did-jwk.spec.ts | 8 +++--- 12 files changed, 77 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index d7b34e8c8..0862c6d4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15646,7 +15646,7 @@ }, "packages/crypto": { "name": "@web5/crypto", - "version": "0.3.0", + "version": "0.4.0", "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.4.1", @@ -15788,6 +15788,20 @@ } } }, + "packages/crypto-aws-kms/node_modules/@web5/crypto": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.3.0.tgz", + "integrity": "sha512-0loHY6mTDUA7/Y2WzZmbozHclX9GI0lW8m/ocnr8GpwHzutY7uQGizJsiidB4Z7Jg44Y9MCZYVqxNHvw1ZsRBA==", + "dependencies": { + "@noble/ciphers": "0.4.1", + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@web5/common": "0.2.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/crypto-aws-kms/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -16249,7 +16263,7 @@ "@decentralized-identity/ion-sdk": "1.0.1", "@dnsquery/dns-packet": "6.1.1", "@web5/common": "0.2.2", - "@web5/crypto": "0.3.0", + "@web5/crypto": "0.4.0", "bencode": "4.0.0", "level": "8.0.0", "ms": "2.1.3" diff --git a/packages/crypto/package.json b/packages/crypto/package.json index d83a8898e..4e5cd689e 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -1,6 +1,6 @@ { "name": "@web5/crypto", - "version": "0.3.0", + "version": "0.4.0", "description": "Web5 cryptographic library", "type": "module", "main": "./dist/cjs/index.js", diff --git a/packages/crypto/src/algorithms/ecdsa.ts b/packages/crypto/src/algorithms/ecdsa.ts index bac78d01a..95f5909ed 100644 --- a/packages/crypto/src/algorithms/ecdsa.ts +++ b/packages/crypto/src/algorithms/ecdsa.ts @@ -15,8 +15,9 @@ export interface EcdsaGenerateKeyParams extends GenerateKeyParams { /** * A string defining the type of key to generate. The value must be one of the following: * - `"ES256K"`: ECDSA using the secp256k1 curve and SHA-256. + * - `"secp256k1"`: ECDSA using the secp256k1 curve and SHA-256. */ - algorithm: 'ES256K'; + algorithm: 'ES256K' | 'secp256k1'; } /** @@ -91,7 +92,8 @@ export class EcdsaAlgorithm extends CryptoAlgorithm ): Promise { switch (algorithm) { - case 'ES256K': { + case 'ES256K': + case 'secp256k1': { const privateKey = await Secp256k1.generateKey(); privateKey.alg = algorithm; return privateKey; diff --git a/packages/crypto/src/local-kms-crypto.ts b/packages/crypto/src/local-kms-crypto.ts index 40c9f9436..af935d8b7 100644 --- a/packages/crypto/src/local-kms-crypto.ts +++ b/packages/crypto/src/local-kms-crypto.ts @@ -38,10 +38,14 @@ const supportedAlgorithms = { implementation : EdDsaAlgorithm, names : ['Ed25519'], }, - 'ES256K': { + 'secp256k1': { implementation : EcdsaAlgorithm, names : ['ES256K', 'secp256k1'], }, + 'secp256r1': { + implementation : EcdsaAlgorithm, + names : ['ES256', 'secp256r1'], + }, 'SHA-256': { implementation : Sha2Algorithm, names : ['SHA-256'] @@ -96,10 +100,10 @@ export interface LocalKmsDigestParams extends KmsDigestParams { export interface LocalKmsGenerateKeyParams extends KmsGenerateKeyParams { /** * A string defining the type of key to generate. The value must be one of the following: - * - `"Ed25519"`: EdDSA using the Ed25519 curve. - * - `"ES256K"`: ECDSA using the secp256k1 curve and SHA-256. + * - `"Ed25519"` + * - `"secp256k1"` */ - algorithm: 'Ed25519' | 'ES256K'; + algorithm: 'Ed25519' | 'secp256k1' | 'secp256r1'; } export class LocalKmsCrypto implements @@ -175,7 +179,7 @@ export class LocalKmsCrypto implements * @example * ```ts * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); * const privateKey = await crypto.exportKey({ keyUri }); * ``` * @@ -200,7 +204,7 @@ export class LocalKmsCrypto implements * @example * ```ts * const cryptoApi = new LocalKmsCrypto(); - * const keyUri = await cryptoApi.generateKey({ algorithm: 'ES256K' }); + * const keyUri = await cryptoApi.generateKey({ algorithm: 'Ed25519' }); * console.log(keyUri); // Outputs the key URI * ``` * @@ -247,7 +251,7 @@ export class LocalKmsCrypto implements * @example * ```ts * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); * const publicKey = await crypto.getPublicKey({ keyUri }); * const keyUriFromPublicKey = await crypto.getKeyUri({ key: publicKey }); * console.log(keyUri === keyUriFromPublicKey); // Outputs `true` @@ -277,7 +281,7 @@ export class LocalKmsCrypto implements * @example * ```ts * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); * const publicKey = await crypto.getPublicKey({ keyUri }); * ``` * @@ -360,7 +364,7 @@ export class LocalKmsCrypto implements * @example * ```ts * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); * const data = new TextEncoder().encode('Message to sign'); * const signature = await crypto.sign({ keyUri, data }); * ``` @@ -401,7 +405,7 @@ export class LocalKmsCrypto implements * @example * ```ts * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); * const data = new TextEncoder().encode('Message to sign'); * const signature = await crypto.sign({ keyUri, data }); * const isSignatureValid = await crypto.verify({ keyUri, data, signature }); @@ -439,7 +443,7 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const signer = this.getAlgorithm({ algorithm: 'ES256K' }); + * const signer = this.getAlgorithm({ algorithm: 'Ed25519' }); * ``` * * @param params - The parameters for retrieving the algorithm implementation. diff --git a/packages/crypto/src/types/key-generator.ts b/packages/crypto/src/types/key-generator.ts index 4591c5c95..37c92b9ae 100644 --- a/packages/crypto/src/types/key-generator.ts +++ b/packages/crypto/src/types/key-generator.ts @@ -85,7 +85,7 @@ export interface AsymmetricKeyGenerator< * @example * ```ts * export interface MyKmsGenerateKeyParams extends KmsGenerateKeyParams { - * algorithm: 'Ed25519' | 'ES256K'; + * algorithm: 'Ed25519' | 'secp256k1'; * } * * class MyKms implements KeyGenerator { @@ -95,7 +95,7 @@ export interface AsymmetricKeyGenerator< * } * * type SupportedAlgorithms = InferKeyGeneratorAlgorithm; - * // `SupportedAlgorithms` will be inferred as 'Ed25519' | 'ES256K' + * // `SupportedAlgorithms` will be inferred as 'Ed25519' | 'secp256k1' * ``` * * @template T - The type of the key generator from which to infer the algorithm type. diff --git a/packages/crypto/tests/algorithms/ecdsa.spec.ts b/packages/crypto/tests/algorithms/ecdsa.spec.ts index bf2e98f54..44e891063 100644 --- a/packages/crypto/tests/algorithms/ecdsa.spec.ts +++ b/packages/crypto/tests/algorithms/ecdsa.spec.ts @@ -55,6 +55,19 @@ describe('EcdsaAlgorithm', () => { expect(publicKey).to.have.property('crv', 'secp256k1'); }); + it('accepts secp256k1 as an alias for the ES256K algorithm identifier', async () => { + // Setup. + const privateKey = await ecdsa.generateKey({ algorithm: 'secp256k1' }); + + // Test the method. + const publicKey = await ecdsa.computePublicKey({ key: privateKey }); + + // Validate the result. + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('alg', 'ES256K'); + expect(publicKey).to.have.property('crv', 'secp256k1'); + }); + it('throws an error if the key provided is not an EC private key', async () => { // Setup. const privateKey: Jwk = { diff --git a/packages/crypto/tests/local-kms-crypto.spec.ts b/packages/crypto/tests/local-kms-crypto.spec.ts index 63ef76e68..224288f16 100644 --- a/packages/crypto/tests/local-kms-crypto.spec.ts +++ b/packages/crypto/tests/local-kms-crypto.spec.ts @@ -62,7 +62,7 @@ describe('LocalKmsCrypto', () => { describe('exportKey()', () => { it('exports a private key as a JWK', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); const jwk = await crypto.exportKey({ keyUri }); @@ -89,15 +89,15 @@ describe('LocalKmsCrypto', () => { describe('generateKey()', () => { it('generates a key and returns a key URI', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); expect(keyUri).to.exist; expect(keyUri).to.be.a.string; expect(keyUri.indexOf('urn:jwk:')).to.equal(0); }); - it(`supports generating 'ES256K' keys`, async () => { - const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + it(`supports generating 'secp256k1' keys`, async () => { + const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); expect(keyUri).to.exist; expect(keyUri).to.be.a.string; @@ -138,7 +138,7 @@ describe('LocalKmsCrypto', () => { // Test the method. try { - await crypto.generateKey({ algorithm: 'ES256K' }); + await crypto.generateKey({ algorithm: 'secp256k1' }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -192,7 +192,7 @@ describe('LocalKmsCrypto', () => { describe('getPublicKey()', () => { it('computes the public key and returns a JWK', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); const publicKey = await crypto.getPublicKey({ keyUri }); @@ -202,7 +202,7 @@ describe('LocalKmsCrypto', () => { }); it('supports ECDSA using secp256k1 curve and SHA-256', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); const publicKey = await crypto.getPublicKey({ keyUri }); @@ -358,7 +358,7 @@ describe('LocalKmsCrypto', () => { describe('sign()', () => { it('generates signatures as Uint8Array', async () => { // Setup. - const privateKeyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const privateKeyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); const data = new Uint8Array([0, 1, 2, 3, 4]); // Test the method. @@ -372,7 +372,7 @@ describe('LocalKmsCrypto', () => { describe('verify()', () => { it('returns true for a valid signature', async () => { // Setup. - const privateKeyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const privateKeyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); const publicKey = await crypto.getPublicKey({ keyUri: privateKeyUri }); const data = new Uint8Array([0, 1, 2, 3, 4]); const signature = await crypto.sign({ keyUri: privateKeyUri, data }); @@ -386,7 +386,7 @@ describe('LocalKmsCrypto', () => { it('returns false for an invalid signature', async () => { // Setup. - const privateKeyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const privateKeyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); const publicKey = await crypto.getPublicKey({ keyUri: privateKeyUri }); const data = new Uint8Array([0, 1, 2, 3, 4]); const signature = new Uint8Array(64); diff --git a/packages/dids/package.json b/packages/dids/package.json index 1dcbc2ad3..5beaa95fe 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -79,7 +79,7 @@ "@decentralized-identity/ion-sdk": "1.0.1", "@dnsquery/dns-packet": "6.1.1", "@web5/common": "0.2.2", - "@web5/crypto": "0.3.0", + "@web5/crypto": "0.4.0", "bencode": "4.0.0", "level": "8.0.0", "ms": "2.1.3" diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 150f121c2..044b79551 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -345,9 +345,11 @@ export enum DidDhtVerificationRelationship { * {@link DidDhtRegisteredKeyType | registered key type}. */ const AlgorithmToKeyTypeMap = { - Ed25519 : DidDhtRegisteredKeyType.Ed25519, - ES256K : DidDhtRegisteredKeyType.secp256k1, - ES256 : DidDhtRegisteredKeyType.secp256r1 + Ed25519 : DidDhtRegisteredKeyType.Ed25519, + ES256K : DidDhtRegisteredKeyType.secp256k1, + ES256 : DidDhtRegisteredKeyType.secp256r1, + secp256k1 : DidDhtRegisteredKeyType.secp256k1, + secp256r1 : DidDhtRegisteredKeyType.secp256r1 } as const; /** diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index b88b71a4e..58efe0df5 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -169,19 +169,18 @@ export class DidKey extends DidMethod { keyManager?: TKms; options?: DidKeyCreateOptions; } = {}): Promise { - // Check for mutual exclusivity of 'algorithm' and 'keySet' options. - if (options.algorithm && options.keySet) { - throw new TypeError(`DidKey: The 'algorithm' and 'keySet' options are mutually exclusive and cannot be used together.`); + if (options.algorithm && options.verificationMethods) { + throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`); } let { - // Default to Ed25519 key generation if an algorithm is not given. - algorithm = 'Ed25519', // Default to not deriving an encryption key. enableEncryptionKeyDerivation = false, - keySet } = options; + // Default to Ed25519 key generation if an algorithm is not given. + const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519'; + return null as any; } } diff --git a/packages/dids/tests/methods/did-dht.spec.ts b/packages/dids/tests/methods/did-dht.spec.ts index 2c3069af8..1e23f250e 100644 --- a/packages/dids/tests/methods/did-dht.spec.ts +++ b/packages/dids/tests/methods/did-dht.spec.ts @@ -230,7 +230,7 @@ describe('DidDht', () => { purposes : ['authentication', 'assertionMethod'] }, { - algorithm : 'ES256K', + algorithm : 'secp256k1', id : 'enc', purposes : ['keyAgreement'] } diff --git a/packages/dids/tests/methods/did-jwk.spec.ts b/packages/dids/tests/methods/did-jwk.spec.ts index d9d24de43..47f12c5b9 100644 --- a/packages/dids/tests/methods/did-jwk.spec.ts +++ b/packages/dids/tests/methods/did-jwk.spec.ts @@ -47,7 +47,7 @@ describe('DidJwk', () => { }); it('creates a DID using the top-level algorithm property, if given', async () => { - const did = await DidJwk.create({ keyManager, options: { algorithm: 'ES256K' } }); + const did = await DidJwk.create({ keyManager, options: { algorithm: 'secp256k1' } }); // Retrieve the public key from the key manager. const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); @@ -58,7 +58,7 @@ describe('DidJwk', () => { }); it('creates a DID using the verificationMethods algorithm property, if given', async () => { - const did = await DidJwk.create({ keyManager, options: { verificationMethods: [{ algorithm: 'ES256K' }] } }); + const did = await DidJwk.create({ keyManager, options: { verificationMethods: [{ algorithm: 'secp256k1' }] } }); // Retrieve the public key from the key manager. const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); @@ -81,7 +81,7 @@ describe('DidJwk', () => { it('creates a DID using any signature algorithm supported by the provided KMS', async () => { expect( - await DidJwk.create({ keyManager, options: { algorithm: 'ES256K' } }) + await DidJwk.create({ keyManager, options: { algorithm: 'secp256k1' } }) ).to.have.property('uri'); expect( @@ -405,7 +405,7 @@ describe('DidJwk', () => { it(`only specifies 'keyAgreement' relationship when JWK use is 'enc'`, async () => { // Generate a random secp256k1 private key. - const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); + const keyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); const publicKey = await keyManager.getPublicKey({ keyUri }); const privateKey = await keyManager.exportKey({ keyUri }); From 43f2507f864d6a6818cca9e53d7ada9c17a65c6c Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Fri, 26 Jan 2024 07:43:37 -0500 Subject: [PATCH 24/39] Improve support for secp256r1 Signed-off-by: Frank Hinek --- packages/crypto/src/algorithms/ecdsa.ts | 36 +++++- packages/crypto/src/local-kms-crypto.ts | 4 +- .../crypto/tests/algorithms/ecdsa.spec.ts | 111 ++++++++++++++++++ packages/dids/src/methods/did-dht.ts | 7 +- packages/dids/tests/methods/did-dht.spec.ts | 35 +++++- 5 files changed, 184 insertions(+), 9 deletions(-) diff --git a/packages/crypto/src/algorithms/ecdsa.ts b/packages/crypto/src/algorithms/ecdsa.ts index 95f5909ed..cb3fc448c 100644 --- a/packages/crypto/src/algorithms/ecdsa.ts +++ b/packages/crypto/src/algorithms/ecdsa.ts @@ -4,8 +4,9 @@ import type { AsymmetricKeyGenerator } from '../types/key-generator.js'; import type { ComputePublicKeyParams, GenerateKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js'; import { Secp256k1 } from '../primitives/secp256k1.js'; -import { isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js'; +import { Secp256r1 } from '../primitives/secp256r1.js'; import { CryptoAlgorithm } from './crypto-algorithm.js'; +import { isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js'; /** * The `EcdsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be @@ -14,10 +15,12 @@ import { CryptoAlgorithm } from './crypto-algorithm.js'; export interface EcdsaGenerateKeyParams extends GenerateKeyParams { /** * A string defining the type of key to generate. The value must be one of the following: + * - `"ES256"`: ECDSA using the secp256r1 (P-256) curve and SHA-256. * - `"ES256K"`: ECDSA using the secp256k1 curve and SHA-256. * - `"secp256k1"`: ECDSA using the secp256k1 curve and SHA-256. + * - `"secp256r1"`: ECDSA using the secp256r1 (P-256) curve and SHA-256. */ - algorithm: 'ES256K' | 'secp256k1'; + algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1'; } /** @@ -67,6 +70,12 @@ export class EcdsaAlgorithm extends CryptoAlgorithm return publicKey; } + case 'P-256': { + const publicKey = await Secp256r1.computePublicKey({ key }); + publicKey.alg = 'ES256'; + return publicKey; + } + default: { throw new Error(`Unsupported curve: ${key.crv}`); } @@ -95,7 +104,14 @@ export class EcdsaAlgorithm extends CryptoAlgorithm case 'ES256K': case 'secp256k1': { const privateKey = await Secp256k1.generateKey(); - privateKey.alg = algorithm; + privateKey.alg = 'ES256K'; + return privateKey; + } + + case 'ES256': + case 'secp256r1': { + const privateKey = await Secp256r1.generateKey(); + privateKey.alg = 'ES256'; return privateKey; } } @@ -140,6 +156,12 @@ export class EcdsaAlgorithm extends CryptoAlgorithm return publicKey; } + case 'P-256': { + const publicKey = await Secp256r1.getPublicKey({ key }); + publicKey.alg = 'ES256'; + return publicKey; + } + default: { throw new Error(`Unsupported curve: ${key.crv}`); } @@ -185,6 +207,10 @@ export class EcdsaAlgorithm extends CryptoAlgorithm return await Secp256k1.sign({ key, data }); } + case 'P-256': { + return await Secp256r1.sign({ key, data }); + } + default: { throw new Error(`Unsupported curve: ${key.crv}`); } @@ -231,6 +257,10 @@ export class EcdsaAlgorithm extends CryptoAlgorithm return await Secp256k1.verify({ key, signature, data }); } + case 'P-256': { + return await Secp256r1.verify({ key, signature, data }); + } + default: { throw new Error(`Unsupported curve: ${key.crv}`); } diff --git a/packages/crypto/src/local-kms-crypto.ts b/packages/crypto/src/local-kms-crypto.ts index af935d8b7..f53c8027d 100644 --- a/packages/crypto/src/local-kms-crypto.ts +++ b/packages/crypto/src/local-kms-crypto.ts @@ -382,7 +382,7 @@ export class LocalKmsCrypto implements const privateKey = await this.getPrivateKey({ keyUri }); // Determine the algorithm name based on the JWK's `alg` and `crv` properties. - let algorithm = this.getAlgorithmName({ key: privateKey }); + const algorithm = this.getAlgorithmName({ key: privateKey }); // Get the signature algorithm based on the algorithm name. const signer = this.getAlgorithm({ algorithm }) as Signer; @@ -422,7 +422,7 @@ export class LocalKmsCrypto implements KmsVerifyParams ): Promise { // Determine the algorithm name based on the JWK's `alg` and `crv` properties. - let algorithm = this.getAlgorithmName({ key }); + const algorithm = this.getAlgorithmName({ key }); // Get the signature algorithm based on the algorithm name. const signer = this.getAlgorithm({ algorithm }) as Signer; diff --git a/packages/crypto/tests/algorithms/ecdsa.spec.ts b/packages/crypto/tests/algorithms/ecdsa.spec.ts index 44e891063..e2c0602b2 100644 --- a/packages/crypto/tests/algorithms/ecdsa.spec.ts +++ b/packages/crypto/tests/algorithms/ecdsa.spec.ts @@ -68,6 +68,32 @@ describe('EcdsaAlgorithm', () => { expect(publicKey).to.have.property('crv', 'secp256k1'); }); + it('supports ECDSA using secp256r1 curve and SHA-256', async () => { + // Setup. + const privateKey = await ecdsa.generateKey({ algorithm: 'ES256' }); + + // Test the method. + const publicKey = await ecdsa.computePublicKey({ key: privateKey }); + + // Validate the result. + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('alg', 'ES256'); + expect(publicKey).to.have.property('crv', 'P-256'); + }); + + it('accepts secp256r1 as an alias for the ES256 algorithm identifier', async () => { + // Setup. + const privateKey = await ecdsa.generateKey({ algorithm: 'secp256r1' }); + + // Test the method. + const publicKey = await ecdsa.computePublicKey({ key: privateKey }); + + // Validate the result. + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('alg', 'ES256'); + expect(publicKey).to.have.property('crv', 'P-256'); + }); + it('throws an error if the key provided is not an EC private key', async () => { // Setup. const privateKey: Jwk = { @@ -131,6 +157,30 @@ describe('EcdsaAlgorithm', () => { expect(privateKey).to.have.property('alg', 'ES256K'); expect(privateKey).to.have.property('crv', 'secp256k1'); }); + + it('accepts secp256k1 as an alias for the ES256K algorithm identifier', async () => { + // Test the method. + const privateKey = await ecdsa.generateKey({ algorithm: 'secp256k1' }); + + expect(privateKey).to.have.property('alg', 'ES256K'); + expect(privateKey).to.have.property('crv', 'secp256k1'); + }); + + it('supports ECDSA using secp256r1 curve and SHA-256', async () => { + // Test the method. + const privateKey = await ecdsa.generateKey({ algorithm: 'ES256' }); + + expect(privateKey).to.have.property('alg', 'ES256'); + expect(privateKey).to.have.property('crv', 'P-256'); + }); + + it('accepts secp256r1 as an alias for the ES256 algorithm identifier', async () => { + // Test the method. + const privateKey = await ecdsa.generateKey({ algorithm: 'secp256r1' }); + + expect(privateKey).to.have.property('alg', 'ES256'); + expect(privateKey).to.have.property('crv', 'P-256'); + }); }); describe('getPublicKey()', () => { @@ -170,6 +220,19 @@ describe('EcdsaAlgorithm', () => { expect(publicKey).to.have.property('crv', 'secp256k1'); }); + it('supports ECDSA using secp256r1 curve and SHA-256', async () => { + // Setup. + const privateKey = await ecdsa.generateKey({ algorithm: 'ES256' }); + + // Test the method. + const publicKey = await ecdsa.getPublicKey({ key: privateKey }); + + // Validate the result. + expect(publicKey).to.have.property('kty', 'EC'); + expect(publicKey).to.have.property('alg', 'ES256'); + expect(publicKey).to.have.property('crv', 'P-256'); + }); + it('throws an error if the key provided is not an EC private key', async () => { // Setup. const privateKey: Jwk = { @@ -236,6 +299,28 @@ describe('EcdsaAlgorithm', () => { expect(signature).to.have.length(64); }); + it('supports ECDSA using secp256k1 curve and SHA-256', async () => { + // Setup. + const privateKey = await ecdsa.generateKey({ algorithm: 'ES256K'}); + + // Test the method. + const signature = await ecdsa.sign({ key: privateKey, data }); + + // Validate the result. + expect(signature).to.have.length(64); + }); + + it('supports ECDSA using secp256r1 curve and SHA-256', async () => { + // Setup. + const privateKey = await ecdsa.generateKey({ algorithm: 'ES256'}); + + // Test the method. + const signature = await ecdsa.sign({ key: privateKey, data }); + + // Validate the result. + expect(signature).to.have.length(64); + }); + it('throws an error if the key provided is not an EC private key', async () => { // Setup. const privateKey: Jwk = { @@ -320,6 +405,32 @@ describe('EcdsaAlgorithm', () => { expect(isValid).to.be.false; }); + it('supports ECDSA using secp256k1 curve and SHA-256', async () => { + // Setup. + privateKey = await ecdsa.generateKey({ algorithm: 'ES256K' }); + publicKey = await ecdsa.getPublicKey({ key: privateKey }); + signature = await ecdsa.sign({ key: privateKey, data }); + + // Test the method. + const isValid = await ecdsa.verify({ key: publicKey, signature, data }); + + // Validate the result. + expect(isValid).to.be.true; + }); + + it('supports ECDSA using secp256r1 curve and SHA-256', async () => { + // Setup. + privateKey = await ecdsa.generateKey({ algorithm: 'ES256' }); + publicKey = await ecdsa.getPublicKey({ key: privateKey }); + signature = await ecdsa.sign({ key: privateKey, data }); + + // Test the method. + const isValid = await ecdsa.verify({ key: publicKey, signature, data }); + + // Validate the result. + expect(isValid).to.be.true; + }); + it('throws an error if the key provided is not an EC public key', async () => { // Setup. const publicKey: Jwk = { diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 044b79551..77a4ff0cd 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -348,6 +348,7 @@ const AlgorithmToKeyTypeMap = { Ed25519 : DidDhtRegisteredKeyType.Ed25519, ES256K : DidDhtRegisteredKeyType.secp256k1, ES256 : DidDhtRegisteredKeyType.secp256r1, + 'P-256' : DidDhtRegisteredKeyType.secp256r1, secp256k1 : DidDhtRegisteredKeyType.secp256k1, secp256r1 : DidDhtRegisteredKeyType.secp256r1 } as const; @@ -1276,7 +1277,7 @@ class DidDhtDocument { const publicKey = vm.publicKeyJwk; - if (!(publicKey?.crv && publicKey.crv in DidDhtRegisteredKeyType)) { + if (!(publicKey?.crv && publicKey.crv in AlgorithmToKeyTypeMap)) { throw new DidError(DidErrorCode.InvalidPublicKeyType, `Verification method '${vm.id}' contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`); } @@ -1540,8 +1541,8 @@ class DidDhtUtils { public static keyConverter(curve: string): AsymmetricKeyConverter { const converters: Record = { 'Ed25519' : Ed25519, - 'secp256k1' : Secp256k1, - 'secp256r1' : Secp256r1 + 'P-256' : Secp256r1, + 'secp256k1' : Secp256k1 }; const converter = converters[curve]; diff --git a/packages/dids/tests/methods/did-dht.spec.ts b/packages/dids/tests/methods/did-dht.spec.ts index 1e23f250e..de610a7b2 100644 --- a/packages/dids/tests/methods/did-dht.spec.ts +++ b/packages/dids/tests/methods/did-dht.spec.ts @@ -56,7 +56,7 @@ describe('DidDht', () => { expect(did.didDocument.verificationMethod).to.have.length(1); }); - it('handles creating DIDs with additional verification methods', async () => { + it('handles creating DIDs with additional Ed25519 verification methods', async () => { const did = await DidDht.create({ options: { verificationMethods: [ @@ -69,6 +69,39 @@ describe('DidDht', () => { }); expect(did.didDocument.verificationMethod).to.have.length(2); + expect(did.didDocument.verificationMethod?.[1].publicKeyJwk).to.have.property('crv', 'Ed25519'); + }); + + it('handles creating DIDs with additional secp256k1 verification methods', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ + { + algorithm : 'secp256k1', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod).to.have.length(2); + expect(did.didDocument.verificationMethod?.[1].publicKeyJwk).to.have.property('crv', 'secp256k1'); + }); + + it('handles creating DIDs with additional secp256r1 verification methods', async () => { + const did = await DidDht.create({ + options: { + verificationMethods: [ + { + algorithm : 'secp256r1', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod).to.have.length(2); + expect(did.didDocument.verificationMethod?.[1].publicKeyJwk).to.have.property('crv', 'P-256'); }); it('allows one or more DID controller identifiers to be specified', async () => { From 0bfbc5b752f9f21d210b8878ca99c1418b5cfddf Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Fri, 26 Jan 2024 10:36:12 -0500 Subject: [PATCH 25/39] Rename to LocalKeyManager & AwsKeyManager and improve docs Signed-off-by: Frank Hinek --- package-lock.json | 16 +-- packages/crypto-aws-kms/package.json | 2 +- packages/crypto-aws-kms/src/ecdsa.ts | 37 +++---- packages/crypto-aws-kms/src/index.ts | 2 +- .../src/{api.ts => key-manager.ts} | 68 ++++++------- packages/crypto-aws-kms/tests/ecdsa.spec.ts | 15 ++- .../{api.spec.ts => key-manager.spec.ts} | 55 +++++------ packages/crypto/src/index.ts | 2 +- packages/crypto/src/jose/jwe.ts | 83 ++++++++++++++++ packages/crypto/src/jose/jwk.ts | 13 +-- packages/crypto/src/jose/jws.ts | 20 ++++ ...cal-kms-crypto.ts => local-key-manager.ts} | 98 +++++++++---------- packages/crypto/src/primitives/concat-kdf.ts | 53 +++++----- packages/crypto/src/primitives/secp256k1.ts | 48 ++++----- packages/crypto/src/primitives/secp256r1.ts | 46 ++++----- .../src/primitives/xchacha20-poly1305.ts | 22 ++--- packages/crypto/src/types/params-kms.ts | 9 +- ...ypto.spec.ts => local-key-manager.spec.ts} | 96 +++++++++--------- .../tests/primitives/concat-kdf.spec.ts | 24 ++--- .../crypto/tests/primitives/secp256k1.spec.ts | 10 +- .../crypto/tests/primitives/secp256r1.spec.ts | 10 +- .../primitives/xchacha20-poly1305.spec.ts | 54 +++++----- packages/dids/src/methods/did-dht.ts | 31 +++--- packages/dids/src/methods/did-ion.ts | 8 +- packages/dids/src/methods/did-jwk.ts | 15 ++- packages/dids/src/methods/did-key.ts | 6 +- packages/dids/src/methods/did-method.ts | 10 +- packages/dids/src/types/did-core.ts | 2 +- packages/dids/tests/methods/did-dht.spec.ts | 10 +- packages/dids/tests/methods/did-jwk.spec.ts | 12 +-- .../dids/tests/methods/did-method.spec.ts | 6 +- 31 files changed, 500 insertions(+), 383 deletions(-) rename packages/crypto-aws-kms/src/{api.ts => key-manager.ts} (87%) rename packages/crypto-aws-kms/tests/{api.spec.ts => key-manager.spec.ts} (83%) rename packages/crypto/src/{local-kms-crypto.ts => local-key-manager.ts} (84%) rename packages/crypto/tests/{local-kms-crypto.spec.ts => local-key-manager.spec.ts} (77%) diff --git a/package-lock.json b/package-lock.json index 0862c6d4c..db19aa49c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15689,7 +15689,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-kms": "3.478.0", - "@web5/crypto": "0.3.0" + "@web5/crypto": "0.4.0" }, "devDependencies": { "@playwright/test": "1.40.1", @@ -15788,20 +15788,6 @@ } } }, - "packages/crypto-aws-kms/node_modules/@web5/crypto": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.3.0.tgz", - "integrity": "sha512-0loHY6mTDUA7/Y2WzZmbozHclX9GI0lW8m/ocnr8GpwHzutY7uQGizJsiidB4Z7Jg44Y9MCZYVqxNHvw1ZsRBA==", - "dependencies": { - "@noble/ciphers": "0.4.1", - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@web5/common": "0.2.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "packages/crypto-aws-kms/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", diff --git a/packages/crypto-aws-kms/package.json b/packages/crypto-aws-kms/package.json index 88546d969..4e007779a 100644 --- a/packages/crypto-aws-kms/package.json +++ b/packages/crypto-aws-kms/package.json @@ -70,7 +70,7 @@ }, "dependencies": { "@aws-sdk/client-kms": "3.478.0", - "@web5/crypto": "0.3.0" + "@web5/crypto": "0.4.0" }, "devDependencies": { "@playwright/test": "1.40.1", diff --git a/packages/crypto-aws-kms/src/ecdsa.ts b/packages/crypto-aws-kms/src/ecdsa.ts index 29ce68a24..055545911 100644 --- a/packages/crypto-aws-kms/src/ecdsa.ts +++ b/packages/crypto-aws-kms/src/ecdsa.ts @@ -52,13 +52,16 @@ export class EcdsaAlgorithm implements Signer { /** - * The `_crypto` private variable in the `EcdsaAlgorithm` class holds a reference to an instance - * of `CryptoApi`. This instance is used for performing various cryptographic operations, such as - * computing hash digests and retrieving public keys. By having this reference, `EcdsaAlgorithm` - * can leverage the comprehensive cryptographic functionalities provided by `CryptoApi`, enabling - * it to focus on ECDSA-specific logic while delegating other cryptographic tasks to `CryptoApi`. + * The `_keyManager` private variable in the `EcdsaAlgorithm` class holds a reference to an + * `AwsKeyManager` instance, which is an implementation of the `CryptoApi` interface. This + * instance is used for performing various cryptographic operations, such as computing hash + * digests and retrieving public keys. By having this reference, `EcdsaAlgorithm` focus on + * ECDSA-specific logic while delegating other cryptographic tasks to `AwsKeyManager`. + * + * @remarks + * The type is `CrytpoApi` instead of `AwsKeyManager` to avoid a circular dependency. */ - private _crypto: CryptoApi; + private _keyManager: CryptoApi; /** * A private instance of `KMSClient` from the AWS SDK. This client is used for all interactions @@ -71,14 +74,14 @@ export class EcdsaAlgorithm implements /** * * @param params - An object containing the parameters to use when instantiating the algorithm. - * @param params.crypto - An instance of `CryptoApi` from the `@web5/crypto` package. + * @param params.keyManager - An instance of `AwsKeyManager`. * @param params.kmsClient - An instance of `KMSClient` from the AWS SDK. */ - constructor({ crypto, kmsClient }: { - crypto: CryptoApi; + constructor({ keyManager, kmsClient }: { + keyManager: CryptoApi; kmsClient: KMSClient; }) { - this._crypto = crypto; + this._keyManager = keyManager; this._kmsClient = kmsClient; } @@ -88,7 +91,7 @@ export class EcdsaAlgorithm implements * * @example * ```ts - * const ecdsa = new EcdsaAlgorithm({ crypto, kmsClient }); + * const ecdsa = new EcdsaAlgorithm({ keyManager, kmsClient }); * const keyUri = await ecdsa.generateKey({ algorithm: 'ES256K' }); * console.log(keyUri); // Outputs the key URI * ``` @@ -128,10 +131,10 @@ export class EcdsaAlgorithm implements const awsKeyId = response.KeyMetadata.KeyId; // Retrieve the public key from AWS KMS. - const publicKey = await this._crypto.getPublicKey({ keyUri: awsKeyId }); + const publicKey = await this._keyManager.getPublicKey({ keyUri: awsKeyId }); // Compute the key URI. - const keyUri = await this._crypto.getKeyUri({ key: publicKey }); + const keyUri = await this._keyManager.getKeyUri({ key: publicKey }); // Set the key's alias in AWS KMS to the key URI. await createKeyAlias({ awsKeyId, alias: keyUri, kmsClient: this._kmsClient }); @@ -146,7 +149,7 @@ export class EcdsaAlgorithm implements * @remarks * This method uses the signature algorithm determined by the given `algorithm` to sign the * provided data. The `algorithm` is used to avoid another round trip to AWS KMS to determine the - * `KeySpec` since it was already retrieved in {@link AwsKmsCrypto.sign | `AwsKmsCrypto.sign()`}. + * `KeySpec` since it was already retrieved in {@link AwsKeyManager.sign | `AwsKeyManager.sign()`}. * * The signature can later be verified by parties with access to the corresponding * public key, ensuring that the data has not been tampered with and was indeed signed by the @@ -164,7 +167,7 @@ export class EcdsaAlgorithm implements * * @example * ```ts - * const ecdsa = new EcdsaAlgorithm({ crypto, kmsClient }); + * const ecdsa = new EcdsaAlgorithm({ keyManager, kmsClient }); * const data = new TextEncoder().encode('Message to sign'); * const signature = await ecdsa.sign({ * algorithm: 'ES256K', @@ -191,7 +194,7 @@ export class EcdsaAlgorithm implements case 'ES256K': { // Pre-hash the data to accommodate AWS KMS limitations for signature payloads.s - hashedData = await this._crypto.digest({ algorithm: 'SHA-256', data }); + hashedData = await this._keyManager.digest({ algorithm: 'SHA-256', data }); signingAlgorithm = SigningAlgorithmSpec.ECDSA_SHA_256; break; } @@ -238,7 +241,7 @@ export class EcdsaAlgorithm implements * * @example * ```ts - * const ecdsa = new EcdsaAlgorithm({ crypto, kmsClient }); + * const ecdsa = new EcdsaAlgorithm({ keyManager, kmsClient }); * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data * const signature = new Uint8Array([...]); // Signature to verify * const isValid = await ecdsa.verify({ diff --git a/packages/crypto-aws-kms/src/index.ts b/packages/crypto-aws-kms/src/index.ts index e43ea7984..64e57da03 100644 --- a/packages/crypto-aws-kms/src/index.ts +++ b/packages/crypto-aws-kms/src/index.ts @@ -1,3 +1,3 @@ -export * from './api.js'; export * from './ecdsa.js'; +export * from './key-manager.js'; export * from './utils.js'; \ No newline at end of file diff --git a/packages/crypto-aws-kms/src/api.ts b/packages/crypto-aws-kms/src/key-manager.ts similarity index 87% rename from packages/crypto-aws-kms/src/api.ts rename to packages/crypto-aws-kms/src/key-manager.ts index b16555b83..95bf054d0 100644 --- a/packages/crypto-aws-kms/src/api.ts +++ b/packages/crypto-aws-kms/src/key-manager.ts @@ -26,7 +26,7 @@ import { convertSpkiToPublicKey, getKeySpec } from './utils.js'; * value is an object that provides the implementation class, the key specification (if applicable), * and an array of names associated with the algorithm. This structure allows for easy retrieval * and instantiation of algorithm implementations based on the algorithm name or key specification. - * It facilitates the support of multiple algorithms within the `AwsKmsCrypto` class. + * It facilitates the support of multiple algorithms within the `AwsKeyManager` class. */ const supportedAlgorithms = { 'ES256K': { @@ -54,17 +54,17 @@ type SupportedAlgorithm = keyof typeof supportedAlgorithms; type AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation']; /** - * The `AwsKmsCryptoParams` interface specifies the parameters for initializing an instance of - * `AwsKmsCrypto`, which is an implementation of the `CryptoApi` interface tailored for AWS KMS. + * The `AwsKeyManagerParams` interface specifies the parameters for initializing an instance of + * `AwsKeyManager`, which is an implementation of the `CryptoApi` interface tailored for AWS KMS. * * This interface allows the optional inclusion of a `KMSClient` instance, which is used for * interacting with AWS KMS. If not provided, a default `KMSClient` instance will be created and * used. */ -export type AwsKmsCryptoParams = { +export type AwsKeyManagerParams = { /** * An optional property to specify a custom `KMSClient` instance. If not provided, the - * `AwsKmsCrypto` class will instantiate a default `KMSClient`. This client is used for all + * `AwsKeyManager` class will instantiate a default `KMSClient`. This client is used for all * interactions with AWS Key Management Service (KMS), such as generating keys and signing data. * * @param kmsClient - A `KMSClient` instance from the AWS SDK. @@ -73,10 +73,10 @@ export type AwsKmsCryptoParams = { }; /** - * The `AwsKmsDigestParams` interface defines the algorithm-specific parameters that should be - * passed into the {@link AwsKmsCrypto.digest | `AwsKmsCrypto.digest()`} method. + * The `AwsKeyManagerDigestParams` interface defines the algorithm-specific parameters that should + * be passed into the {@link AwsKeyManager.digest | `AwsKeyManager.digest()`} method. */ -export interface AwsKmsDigestParams extends KmsDigestParams { +export interface AwsKeyManagerDigestParams extends KmsDigestParams { /** * A string defining the name of hash function to use. The value must be one of the following: * - `"SHA-256"`: Generates a 256-bit digest. @@ -85,11 +85,11 @@ export interface AwsKmsDigestParams extends KmsDigestParams { } /** - * The `AwsKmsGenerateKeyParams` interface defines the algorithm-specific parameters that should be - * passed into the {@link AwsKmsCrypto.generateKey | `AwsKmsCrypto.generateKey()`} method when - * generating a key in AWS KMS. + * The `AwsKeyManagerGenerateKeyParams` interface defines the algorithm-specific parameters that + * should be passed into the {@link AwsKeyManager.generateKey | `AwsKeyManager.generateKey()`} + * method when generating a key in AWS KMS. */ -export interface AwsKmsGenerateKeyParams extends KmsGenerateKeyParams { +export interface AwsKeyManagerGenerateKeyParams extends KmsGenerateKeyParams { /** * A string defining the type of key to generate. The value must be one of the following: * - `"ES256K"`: ECDSA using the secp256k1 curve and SHA-256. @@ -97,12 +97,12 @@ export interface AwsKmsGenerateKeyParams extends KmsGenerateKeyParams { algorithm: 'ES256K'; } -export class AwsKmsCrypto implements CryptoApi { +export class AwsKeyManager implements CryptoApi { /** - * A private map that stores instances of cryptographic algorithm implementations. Each key in this - * map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class that - * implements a specific cryptographic algorithm. This map is used to cache and reuse instances for - * performance optimization, ensuring that each algorithm is instantiated only once. + * A private map that stores instances of cryptographic algorithm implementations. Each key in + * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class + * that implements a specific cryptographic algorithm. This map is used to cache and reuse + * instances for performance optimization, ensuring that each algorithm is instantiated only once. */ private _algorithmInstances: Map = new Map(); @@ -114,7 +114,7 @@ export class AwsKmsCrypto implements CryptoApi { */ private _kmsClient: KMSClient; - constructor(params?: AwsKmsCryptoParams) { + constructor(params?: AwsKeyManagerParams) { this._kmsClient = params?.kmsClient ?? new KMSClient(); } @@ -132,9 +132,9 @@ export class AwsKmsCrypto implements CryptoApi { * * @example * ```ts - * const crypto = new AwsKmsCrypto(); + * const keyManager = new AwsKeyManager(); * const data = new Uint8Array([...]); - * const digest = await crypto.digest({ algorithm: 'SHA-256', data }); + * const digest = await keyManager.digest({ algorithm: 'SHA-256', data }); * ``` * * @param params - The parameters for the digest operation. @@ -144,7 +144,7 @@ export class AwsKmsCrypto implements CryptoApi { * @returns A Promise which will be fulfilled with the hash digest. */ public async digest({ algorithm, data }: - AwsKmsDigestParams + AwsKeyManagerDigestParams ): Promise { // Get the hash function implementation based on the specified `algorithm` parameter. const hasher = this.getAlgorithm({ algorithm }); @@ -170,8 +170,8 @@ export class AwsKmsCrypto implements CryptoApi { * * @example * ```ts - * const crypto = new AwsKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + * const keyManager = new AwsKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); * console.log(keyUri); // Outputs the key URI * ``` * @@ -181,7 +181,7 @@ export class AwsKmsCrypto implements CryptoApi { * @returns A Promise that resolves to the key URI, a unique identifier for the generated key. */ public async generateKey({ algorithm }: - AwsKmsGenerateKeyParams + AwsKeyManagerGenerateKeyParams ): Promise { // Get the key generator based on the specified `algorithm` parameter. const keyGenerator = this.getAlgorithm({ algorithm }); @@ -207,9 +207,9 @@ export class AwsKmsCrypto implements CryptoApi { * * @example * ```ts - * const crypto = new AwsKmsCrypto(); + * const keyManager = new AwsKeyManager(); * const publicKey = { ... }; // Public key in JWK format - * const keyUri = await crypto.getKeyUri({ key: publicKey }); + * const keyUri = await keyManager.getKeyUri({ key: publicKey }); * ``` * * @param params - The parameters for getting the key URI. @@ -235,9 +235,9 @@ export class AwsKmsCrypto implements CryptoApi { * * @example * ```ts - * const crypto = new AwsKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); - * const publicKey = await crypto.getPublicKey({ keyUri }); + * const keyManager = new AwsKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); + * const publicKey = await keyManager.getPublicKey({ keyUri }); * ``` * * @param params - The parameters for retrieving the public key. @@ -286,9 +286,9 @@ export class AwsKmsCrypto implements CryptoApi { * * @example * ```ts - * const crypto = new AwsKmsCrypto(); + * const keyManager = new AwsKeyManager(); * const data = new TextEncoder().encode('Message to sign'); - * const signature = await crypto.sign({ + * const signature = await keyManager.sign({ * keyUri: 'urn:jwk:...', * data * }); @@ -333,7 +333,7 @@ export class AwsKmsCrypto implements CryptoApi { * * @example * ```ts - * const crypto = new AwsKmsCrypto(); + * const keyManager = new AwsKeyManager(); * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data * const data = new TextEncoder().encode('Message to sign'); // Data that was signed * const signature = new Uint8Array([...]); // Signature to verify @@ -399,8 +399,8 @@ export class AwsKmsCrypto implements CryptoApi { if (!this._algorithmInstances.has(AlgorithmImplementation)) { // If not, create a new instance and store it in the cache this._algorithmInstances.set(AlgorithmImplementation, new AlgorithmImplementation({ - crypto : this, - kmsClient : this._kmsClient + keyManager : this, + kmsClient : this._kmsClient })); } diff --git a/packages/crypto-aws-kms/tests/ecdsa.spec.ts b/packages/crypto-aws-kms/tests/ecdsa.spec.ts index 11da2495c..61bf377bb 100644 --- a/packages/crypto-aws-kms/tests/ecdsa.spec.ts +++ b/packages/crypto-aws-kms/tests/ecdsa.spec.ts @@ -5,19 +5,19 @@ import { expect } from 'chai'; import { Convert } from '@web5/common'; import { CreateKeyCommand, DescribeKeyCommand, KMSClient, SignCommand } from '@aws-sdk/client-kms'; -import { AwsKmsCrypto } from '../src/api.js'; +import { AwsKeyManager } from '../src/key-manager.js'; import { EcdsaAlgorithm } from '../src/ecdsa.js'; import { mockEcdsaSecp256k1, mockSignCommandOutput } from './fixtures/mock-ecdsa-secp256k1.js'; describe('EcdsaAlgorithm', () => { - let crypto: AwsKmsCrypto; + let keyManager: AwsKeyManager; let ecdsa: EcdsaAlgorithm; let kmsClientStub: sinon.SinonStubbedInstance; beforeEach(() => { kmsClientStub = sinon.createStubInstance(KMSClient); - crypto = new AwsKmsCrypto({ kmsClient: kmsClientStub as unknown as KMSClient }); - ecdsa = new EcdsaAlgorithm({ crypto, kmsClient: kmsClientStub as unknown as KMSClient }); + keyManager = new AwsKeyManager({ kmsClient: kmsClientStub as unknown as KMSClient }); + ecdsa = new EcdsaAlgorithm({ keyManager, kmsClient: kmsClientStub as unknown as KMSClient }); }); afterEach(() => { @@ -73,10 +73,10 @@ describe('EcdsaAlgorithm', () => { const key = mockEcdsaSecp256k1.verify.input.key as Jwk; // Public key generated with AWS KMS // Test the method. - const signature = await crypto.sign(mockEcdsaSecp256k1.sign.input); + const signature = await keyManager.sign(mockEcdsaSecp256k1.sign.input); - // Validate the signature with crypto.verify() which uses Secp256k1.verify(). - const isValid = await crypto.verify({ + // Validate the signature with keyManager.verify() which uses Secp256k1.verify(). + const isValid = await keyManager.verify({ key, signature, data: mockEcdsaSecp256k1.sign.input.data @@ -183,7 +183,6 @@ describe('EcdsaAlgorithm', () => { // Setup. const unsupportedEcPublicKey: Jwk = { kty : 'EC', - // @ts-expect-error because unsupported curve is being tested. crv : 'unsupported-curve', x : 'oJDigSHQ3lb1Zg82KB6huToMeGPKDcSG1Z8i7u958M8', y : 'xvkCbFcmo9tbyfphIxOa96dfqt9yJgab77J3qOcMYcE' diff --git a/packages/crypto-aws-kms/tests/api.spec.ts b/packages/crypto-aws-kms/tests/key-manager.spec.ts similarity index 83% rename from packages/crypto-aws-kms/tests/api.spec.ts rename to packages/crypto-aws-kms/tests/key-manager.spec.ts index c986c9e68..33db28a31 100644 --- a/packages/crypto-aws-kms/tests/api.spec.ts +++ b/packages/crypto-aws-kms/tests/key-manager.spec.ts @@ -5,18 +5,18 @@ import { expect } from 'chai'; import { Convert } from '@web5/common'; import { CreateAliasCommand, CreateKeyCommand, DescribeKeyCommand, GetPublicKeyCommand, KMSClient, SignCommand } from '@aws-sdk/client-kms'; -import type { AwsKmsGenerateKeyParams } from '../src/api.js'; +import type { AwsKeyManagerGenerateKeyParams } from '../src/key-manager.js'; -import { AwsKmsCrypto } from '../src/api.js'; +import { AwsKeyManager } from '../src/key-manager.js'; import { mockEcdsaSecp256k1 } from './fixtures/mock-ecdsa-secp256k1.js'; describe('AWS KMS Crypto API', () => { - let crypto: AwsKmsCrypto; + let keyManager: AwsKeyManager; let kmsClientStub: sinon.SinonStubbedInstance; beforeEach(() => { kmsClientStub = sinon.createStubInstance(KMSClient); - crypto = new AwsKmsCrypto({ kmsClient: kmsClientStub as unknown as KMSClient }); + keyManager = new AwsKeyManager({ kmsClient: kmsClientStub as unknown as KMSClient }); }); afterEach(() => { @@ -26,11 +26,11 @@ describe('AWS KMS Crypto API', () => { describe('constructor', () => { it('instantiates a KMSClient if one is not given', () => { // Execute the test. - const crypto = new AwsKmsCrypto(); + const keyManager = new AwsKeyManager(); // Validate the result. - expect(crypto).to.exist; - expect(crypto).to.be.an.instanceOf(AwsKmsCrypto); + expect(keyManager).to.exist; + expect(keyManager).to.be.an.instanceOf(AwsKeyManager); }); it('accepts the KMSClient that is given', () => { @@ -38,11 +38,11 @@ describe('AWS KMS Crypto API', () => { const kmsClient = new KMSClient({}); // Execute the test. - const crypto = new AwsKmsCrypto({ kmsClient }); + const keyManager = new AwsKeyManager({ kmsClient }); // Validate the result. - expect(crypto).to.exist; - expect(crypto).to.be.an.instanceOf(AwsKmsCrypto); + expect(keyManager).to.exist; + expect(keyManager).to.be.an.instanceOf(AwsKeyManager); }); }); @@ -50,7 +50,7 @@ describe('AWS KMS Crypto API', () => { it('computes and returns a digest as a Uint8Array', async () => { const data = new Uint8Array([0, 1, 2, 3, 4]); - const digest = await crypto.digest({ algorithm: 'SHA-256', data }); + const digest = await keyManager.digest({ algorithm: 'SHA-256', data }); expect(digest).to.exist; expect(digest).to.be.an.instanceOf(Uint8Array); @@ -62,7 +62,7 @@ describe('AWS KMS Crypto API', () => { const expectedOutput = Convert.hex('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad').toUint8Array(); // Test the method. - const digest = await crypto.digest({ algorithm: 'SHA-256', data }); + const digest = await keyManager.digest({ algorithm: 'SHA-256', data }); // Validate the result. expect(digest).to.exist; @@ -80,7 +80,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(CreateAliasCommand)).resolves(mockEcdsaSecp256k1.createKeyAlias.output); // Test the method. - const keyUri = await crypto.generateKey(mockEcdsaSecp256k1.generateKey.input as AwsKmsGenerateKeyParams); + const keyUri = await keyManager.generateKey(mockEcdsaSecp256k1.generateKey.input as AwsKeyManagerGenerateKeyParams); // Validate the result. expect(keyUri).to.exist; @@ -96,7 +96,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(CreateAliasCommand)).resolves(mockEcdsaSecp256k1.createKeyAlias.output); // Test the method. - const keyUri = await crypto.generateKey({ algorithm: 'ES256K' }); + const keyUri = await keyManager.generateKey({ algorithm: 'ES256K' }); // Validate the result. expect(keyUri).to.exist; @@ -110,7 +110,7 @@ describe('AWS KMS Crypto API', () => { // Test the method. try { // @ts-expect-error because an unsupported algorithm is being tested. - await crypto.generateKey({ algorithm }); + await keyManager.generateKey({ algorithm }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -128,7 +128,7 @@ describe('AWS KMS Crypto API', () => { const key = mockEcdsaSecp256k1.verify.input.key as Jwk; // Test the method. - const keyUri = await crypto.getKeyUri({ key }); + const keyUri = await keyManager.getKeyUri({ key }); // Validate the result. expect(keyUri).to.exist; @@ -143,7 +143,7 @@ describe('AWS KMS Crypto API', () => { const expectedKeyUri = 'urn:jwk:' + expectedThumbprint; // Test the method. - const keyUri = await crypto.getKeyUri({ key }); + const keyUri = await keyManager.getKeyUri({ key }); expect(keyUri).to.equal(expectedKeyUri); }); @@ -155,7 +155,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(GetPublicKeyCommand)).resolves(mockEcdsaSecp256k1.getPublicKey.output); // Test the method. - const result = await crypto.getPublicKey(mockEcdsaSecp256k1.getPublicKey.input); + const result = await keyManager.getPublicKey(mockEcdsaSecp256k1.getPublicKey.input); // Validate the result. expect(result).to.be.an('object'); @@ -169,7 +169,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(GetPublicKeyCommand)).resolves(mockEcdsaSecp256k1.getPublicKey.output); // Test the method. - const publicKey = await crypto.getPublicKey({ keyUri: 'arn:aws:kms:us-east-1:364764707041:key/bb48abe3-5948-48e0-80d8-605c04d68171' }); + const publicKey = await keyManager.getPublicKey({ keyUri: 'arn:aws:kms:us-east-1:364764707041:key/bb48abe3-5948-48e0-80d8-605c04d68171' }); // Validate the result. expect(publicKey).to.exist; @@ -183,7 +183,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(GetPublicKeyCommand)).resolves(mockEcdsaSecp256k1.getPublicKey.output); // Test the method. - const publicKey = await crypto.getPublicKey(mockEcdsaSecp256k1.getPublicKey.input); + const publicKey = await keyManager.getPublicKey(mockEcdsaSecp256k1.getPublicKey.input); // Validate the result. expect(publicKey).to.exist; @@ -203,7 +203,7 @@ describe('AWS KMS Crypto API', () => { // Test the method. try { - await crypto.getPublicKey(mockEcdsaSecp256k1.getPublicKey.input); + await keyManager.getPublicKey(mockEcdsaSecp256k1.getPublicKey.input); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -222,7 +222,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(DescribeKeyCommand)).resolves(mockEcdsaSecp256k1.getKeySpec.output); // Test the method. - const signature = await crypto.sign(mockEcdsaSecp256k1.sign.input); + const signature = await keyManager.sign(mockEcdsaSecp256k1.sign.input); // Validate the result. expect(signature).to.be.a('Uint8Array'); @@ -235,7 +235,7 @@ describe('AWS KMS Crypto API', () => { kmsClientStub.send.withArgs(sinon.match.instanceOf(DescribeKeyCommand)).resolves(mockEcdsaSecp256k1.getKeySpec.output); // Test the method. - const signature = await crypto.sign(mockEcdsaSecp256k1.sign.input); + const signature = await keyManager.sign(mockEcdsaSecp256k1.sign.input); // Validate the result. expect(signature).to.have.length(64); @@ -250,7 +250,7 @@ describe('AWS KMS Crypto API', () => { const data = mockEcdsaSecp256k1.verify.input.data; // Test the method. - const isValid = await crypto.verify({ key, signature, data }); + const isValid = await keyManager.verify({ key, signature, data }); // Validate the result. expect(isValid).to.be.true; @@ -263,7 +263,7 @@ describe('AWS KMS Crypto API', () => { const data = mockEcdsaSecp256k1.verify.input.data; // Test the method. - const isValid = await crypto.verify({ key, signature, data }); + const isValid = await keyManager.verify({ key, signature, data }); // Validate the result. expect(isValid).to.be.false; @@ -276,7 +276,7 @@ describe('AWS KMS Crypto API', () => { const data = mockEcdsaSecp256k1.verify.input.data; // Test the method. - const isValid = await crypto.verify({ key, signature, data }); + const isValid = await keyManager.verify({ key, signature, data }); // Validate the result. expect(isValid).to.be.false; @@ -284,14 +284,13 @@ describe('AWS KMS Crypto API', () => { it('throws an error when public key algorithm and curve are unsupported', async () => { // Setup. - // @ts-expect-error because an unsupported algorithm and currve is being tested. const key: Jwk = { kty: 'EC', alg: 'unsupported-algorithm', crv: 'unsupported-curve', x: 'x', y: 'y' }; const signature = new Uint8Array(64); const data = new Uint8Array(0); // Test the method. try { - await crypto.verify({ key, signature, data }); + await keyManager.verify({ key, signature, data }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts index 0c1a5f81f..59a2deeb7 100644 --- a/packages/crypto/src/index.ts +++ b/packages/crypto/src/index.ts @@ -1,5 +1,5 @@ export * from './jose.js'; -export * from './local-kms-crypto.js'; +export * from './local-key-manager.js'; export * as utils from './utils.js'; export * from './algorithms/aes-ctr.js'; diff --git a/packages/crypto/src/jose/jwe.ts b/packages/crypto/src/jose/jwe.ts index 0ead6605b..0fbceff11 100644 --- a/packages/crypto/src/jose/jwe.ts +++ b/packages/crypto/src/jose/jwe.ts @@ -1,5 +1,13 @@ import type { JoseHeaderParams } from './jws.js'; +/** + * JSON Web Encryption (JWE) Header Parameters + * + * The Header Parameter names for use in JWEs are registered in the IANA "JSON Web Signature and + * Encryption Header Parameters" registry. + * + * @see {@link https://datatracker.ietf.org/doc/html/rfc7516#section-4.1 | RFC 7516, Section 4.1} + */ export interface JweHeaderParams extends JoseHeaderParams { /** * Algorithm Header Parameter @@ -50,8 +58,28 @@ export interface JweHeaderParams extends JoseHeaderParams { // an unregistered, case-sensitive, collision-resistant string | string; + /** + * Agreement PartyUInfo Header Parameter + * + * The "apu" (agreement PartyUInfo) value is a base64url-encoded octet sequence containing + * information about the producer of the JWE. This information is used by the recipient to + * determine the key agreement algorithm and key encryption algorithm to use to decrypt the JWE. + * + * Note: This parameter is intended only for use when the recipient is a key agreement algorithm + * that uses public key cryptography. + */ apu?: Uint8Array; + /** + * Agreement PartyVInfo Header Parameter + * + * The "apv" (agreement PartyVInfo) value is a base64url-encoded octet sequence containing + * information about the recipient of the JWE. This information is used by the recipient to + * determine the key agreement algorithm and key encryption algorithm to use to decrypt the JWE. + * + * Note: This parameter is intended only for use when the recipient is a key agreement algorithm + * that uses public key cryptography. + */ apv?: Uint8Array; /** @@ -98,14 +126,69 @@ export interface JweHeaderParams extends JoseHeaderParams { // an unregistered, case-sensitive, collision-resistant string | string; + /** + * Ephemeral Public Key Header Parameter + * + * The "epk" (ephemeral public key) value created by the originator for the use in key agreement + * algorithms. It is the ephemeral public key that corresponds to the key used to encrypt the + * JWE. This value is represented as a JSON Web Key (JWK). + * + * Note: This parameter is intended only for use when the recipient is a key agreement algorithm + * that uses public key cryptography. + */ epk?: Uint8Array; + /** + * Initialization Vector Header Parameter + * + * The "iv" (initialization vector) value is a base64url-encoded octet sequence used by the + * specified "enc" algorithm. The length of this Initialization Vector value MUST be exactly + * equal to the value that would be produced by the "enc" algorithm. + * + * Note: With symmetric encryption algorithms such as AES GCM, this Header Parameter MUST + * be present and MUST be understood and processed by implementations. + */ iv?: Uint8Array; + /** + * PBES2 Count Header Parameter + * + * The "p2c" (PBES2 count) value is an integer indicating the number of iterations of the PBKDF2 + * algorithm performed during key derivation. + * + * Note: The iteration count adds computational expense, ideally compounded by the possible range + * of keys introduced by the salt. A minimum iteration count of 1000 is RECOMMENDED. + */ p2c?: number; + /** + * PBES2 Salt Input Header Parameter + * + * The "p2s" (PBES2 salt) value is a base64url-encoded octet sequence used as the salt value + * input to the PBKDF2 algorithm during key derivation. + * + * The salt value used is (UTF8(Alg) || 0x00 || Salt Input), where Alg is the "alg" (algorithm) + * Header Parameter value. + * + * Note: The salt value is used to ensure that each key derived from the master key is + * independent of every other key. A suitable source of salt value is a sequence of + * cryptographically random bytes containing 8 or more octets. + */ p2s?: string; + /** + * Authentication Tag Header Parameter + * + * The "tag" value is a base64url-encoded octet sequence containing the value of the + * Authentication Tag output by the specified "enc" algorithm. The length of this + * Authentication Tag value MUST be exactly equal to the value that would be produced by the + * "enc" algorithm. + * + * Note: With authenticated encryption algorithms such as AES GCM, this Header Parameter MUST + * be present and MUST be understood and processed by implementations. + */ + tag?: Uint8Array; + /** * Additional Public or Private Header Parameter names. */ diff --git a/packages/crypto/src/jose/jwk.ts b/packages/crypto/src/jose/jwk.ts index dec4ed956..6878d9f1f 100644 --- a/packages/crypto/src/jose/jwk.ts +++ b/packages/crypto/src/jose/jwk.ts @@ -321,8 +321,11 @@ export type JwkParamsRsaPrivate = JwkParamsRsaPublic & { qi?: string; /** Other primes information (optional in RFC 7518) */ oth?: { + /** Other primes' factor */ r: string; + /** Other primes' CRT exponent */ d: string; + /** Other primes' CRT coefficient */ t: string; }[]; }; @@ -333,12 +336,6 @@ export type PublicKeyJwk = JwkParamsEcPublic | JwkParamsOkpPublic | JwkParamsRsa /** Parameters used with private keys in JWK format. */ export type PrivateKeyJwk = JwkParamsEcPrivate | JwkParamsOkpPrivate | JwkParamsOctPrivate | JwkParamsRsaPrivate; -/** Object representing an asymmetric key pair in JWK format. */ -export type JwkKeyPair = { - publicKeyJwk: PublicKeyJwk; - privateKeyJwk: PrivateKeyJwk; -} - /** * JSON Web Key ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK}). * "RSA", "EC", "OKP", and "oct" key types are supported. @@ -399,8 +396,11 @@ export interface Jwk { qi?: string; /** Other primes information (optional in RFC 7518) */ oth?: { + /** Other primes' factor */ r: string; + /** Other primes' CRT exponent */ d: string; + /** Other primes' CRT coefficient */ t: string; }[]; @@ -426,6 +426,7 @@ export interface Jwk { * "JSON Web Key Set Parameters" registry or be a value that contains a Collision-Resistant Name. */ export interface JwkSet { + /** Array of JWKs */ keys: Jwk[] } diff --git a/packages/crypto/src/jose/jws.ts b/packages/crypto/src/jose/jws.ts index 5f12092e9..dc35b7ab7 100644 --- a/packages/crypto/src/jose/jws.ts +++ b/packages/crypto/src/jose/jws.ts @@ -1,5 +1,17 @@ import type { Jwk } from './jwk.js'; +/** + * JSON Object Signing and Encryption (JOSE) Header Parameters + * + * The Header Parameter names for use in both JWSs and JWEs are registered in the IANA "JSON Web + * Signature and Encryption Header Parameters" registry. + * + * As indicated by the common registry, JWSs and JWEs share a common Header Parameter space; when a + * parameter is used by both specifications, its usage must be compatible between the + * specifications. + * + * @see {@link https://datatracker.ietf.org/doc/html/rfc7515#section-4.1 | RFC 7515, Section 4.1} + */ export interface JoseHeaderParams { /** Content Type Header Parameter */ cty?: string; @@ -26,6 +38,14 @@ export interface JoseHeaderParams { x5u?: string; } +/** + * JSON Web Signature (JWS) Header Parameters + * + * The Header Parameter names for use in JWSs are registered in the IANA "JSON Web Signature and + * Encryption Header Parameters" registry. + * + * @see {@link https://datatracker.ietf.org/doc/html/rfc7515#section-4.1 | RFC 7515, Section 4.1} + */ export interface JwsHeaderParams extends JoseHeaderParams { /** * Algorithm Header Parameter diff --git a/packages/crypto/src/local-kms-crypto.ts b/packages/crypto/src/local-key-manager.ts similarity index 84% rename from packages/crypto/src/local-kms-crypto.ts rename to packages/crypto/src/local-key-manager.ts index f53c8027d..8013fea31 100644 --- a/packages/crypto/src/local-kms-crypto.ts +++ b/packages/crypto/src/local-key-manager.ts @@ -31,7 +31,7 @@ import { computeJwkThumbprint, isPrivateJwk, KEY_URI_PREFIX_JWK } from './jose/j * implementation class and any relevant names or identifiers for the algorithm. This structure * allows for easy retrieval and instantiation of algorithm implementations based on the algorithm * name or key specification. It facilitates the support of multiple algorithms within the - * `LocalKmsCrypto` class. + * `LocalKeyManager` class. */ const supportedAlgorithms = { 'Ed25519': { @@ -64,27 +64,27 @@ type SupportedAlgorithm = keyof typeof supportedAlgorithms; type AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation']; /** - * The `LocalKmsCryptoParams` interface specifies the parameters for initializing an instance of - * `LocalKmsCrypto`. It allows the optional inclusion of a `KeyValueStore` instance for key + * The `LocalKeyManagerParams` interface specifies the parameters for initializing an instance of + * `LocalKeyManager`. It allows the optional inclusion of a `KeyValueStore` instance for key * management. If not provided, a default `MemoryStore` instance will be used for storing keys in * memory. Note that the `MemoryStore` is not persistent and will be cleared when the application * exits. */ -export type LocalKmsCryptoParams = { +export type LocalKeyManagerParams = { /** * An optional property to specify a custom `KeyValueStore` instance for key management. If not - * provided, {@link LocalKmsCrypto | `LocalKmsCrypto`} uses a default `MemoryStore` instance. This - * store is responsible for managing cryptographic keys, allowing them to be retrieved, stored, - * and managed during cryptographic operations. + * provided, {@link LocalKeyManager | `LocalKeyManager`} uses a default `MemoryStore` instance. + * This store is responsible for managing cryptographic keys, allowing them to be retrieved, + * stored, and managed during cryptographic operations. */ keyStore?: KeyValueStore; }; /** - * The `LocalKmsDigestParams` interface defines the algorithm-specific parameters that should be - * passed into the {@link LocalKmsCrypto.digest | `LocalKmsCrypto.digest()`} method. + * The `LocalKeyManagerDigestParams` interface defines the algorithm-specific parameters that should + * be passed into the {@link LocalKeyManager.digest | `LocalKeyManager.digest()`} method. */ -export interface LocalKmsDigestParams extends KmsDigestParams { +export interface LocalKeyManagerDigestParams extends KmsDigestParams { /** * A string defining the name of hash function to use. The value must be one of the following: * - `"SHA-256"`: Generates a 256-bit digest. @@ -93,11 +93,11 @@ export interface LocalKmsDigestParams extends KmsDigestParams { } /** - * The `LocalKmsGenerateKeyParams` interface defines the algorithm-specific parameters that should - * be passed into the {@link LocalKmsCrypto.generateKey | `LocalKmsCrypto.generateKey()`} method - * when generating a key in the local KMS. + * The `LocalKeyManagerGenerateKeyParams` interface defines the algorithm-specific parameters that + * should be passed into the {@link LocalKeyManager.generateKey | `LocalKeyManager.generateKey()`} + * method when generating a key in the local KMS. */ -export interface LocalKmsGenerateKeyParams extends KmsGenerateKeyParams { +export interface LocalKeyManagerGenerateKeyParams extends KmsGenerateKeyParams { /** * A string defining the type of key to generate. The value must be one of the following: * - `"Ed25519"` @@ -106,21 +106,21 @@ export interface LocalKmsGenerateKeyParams extends KmsGenerateKeyParams { algorithm: 'Ed25519' | 'secp256k1' | 'secp256r1'; } -export class LocalKmsCrypto implements +export class LocalKeyManager implements CryptoApi, KeyImporterExporter { /** - * A private map that stores instances of cryptographic algorithm implementations. Each key in this - * map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class that - * implements a specific cryptographic algorithm. This map is used to cache and reuse instances for - * performance optimization, ensuring that each algorithm is instantiated only once. + * A private map that stores instances of cryptographic algorithm implementations. Each key in + * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class + * that implements a specific cryptographic algorithm. This map is used to cache and reuse + * instances for performance optimization, ensuring that each algorithm is instantiated only once. */ private _algorithmInstances: Map> = new Map(); /** - * The `_keyStore` private variable in `LocalKmsCrypto` is a `KeyValueStore` instance used for - * storing and managing cryptographic keys. It allows the `LocalKmsCrypto` class to save, + * The `_keyStore` private variable in `LocalKeyManager` is a `KeyValueStore` instance used for + * storing and managing cryptographic keys. It allows the `LocalKeyManager` class to save, * retrieve, and handle keys efficiently within the local Key Management System (KMS) context. * This variable can be configured to use different storage backends, like in-memory storage or * persistent storage, providing flexibility in key management according to the application's @@ -128,7 +128,7 @@ export class LocalKmsCrypto implements */ private _keyStore: KeyValueStore; - constructor(params?: LocalKmsCryptoParams) { + constructor(params?: LocalKeyManagerParams) { this._keyStore = params?.keyStore ?? new MemoryStore(); } @@ -146,9 +146,9 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); + * const keyManager = new LocalKeyManager(); * const data = new Uint8Array([...]); - * const digest = await crypto.digest({ algorithm: 'SHA-256', data }); + * const digest = await keyManager.digest({ algorithm: 'SHA-256', data }); * ``` * * @param params - The parameters for the digest operation. @@ -158,7 +158,7 @@ export class LocalKmsCrypto implements * @returns A Promise which will be fulfilled with the hash digest. */ public async digest({ algorithm, data }: - LocalKmsDigestParams + LocalKeyManagerDigestParams ): Promise { // Get the hash function implementation based on the specified `algorithm` parameter. const hasher = this.getAlgorithm({ algorithm }) as Hasher; @@ -178,9 +178,9 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); - * const privateKey = await crypto.exportKey({ keyUri }); + * const keyManager = new LocalKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); + * const privateKey = await keyManager.exportKey({ keyUri }); * ``` * * @param params - Parameters for exporting the key. @@ -203,8 +203,8 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const cryptoApi = new LocalKmsCrypto(); - * const keyUri = await cryptoApi.generateKey({ algorithm: 'Ed25519' }); + * const keyManager = new LocalKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); * console.log(keyUri); // Outputs the key URI * ``` * @@ -214,10 +214,10 @@ export class LocalKmsCrypto implements * @returns A Promise that resolves to the key URI, a unique identifier for the generated key. */ public async generateKey({ algorithm }: - LocalKmsGenerateKeyParams + LocalKeyManagerGenerateKeyParams ): Promise { // Get the key generator implementation based on the specified `algorithm` parameter. - const keyGenerator = this.getAlgorithm({ algorithm }) as KeyGenerator; + const keyGenerator = this.getAlgorithm({ algorithm }) as KeyGenerator; // Generate the key. const key = await keyGenerator.generateKey({ algorithm }); @@ -250,10 +250,10 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); - * const publicKey = await crypto.getPublicKey({ keyUri }); - * const keyUriFromPublicKey = await crypto.getKeyUri({ key: publicKey }); + * const keyManager = new LocalKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); + * const publicKey = await keyManager.getPublicKey({ keyUri }); + * const keyUriFromPublicKey = await keyManager.getKeyUri({ key: publicKey }); * console.log(keyUri === keyUriFromPublicKey); // Outputs `true` * ``` * @@ -280,9 +280,9 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); - * const publicKey = await crypto.getPublicKey({ keyUri }); + * const keyManager = new LocalKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); + * const publicKey = await keyManager.getPublicKey({ keyUri }); * ``` * * @param params - The parameters for retrieving the public key. @@ -300,7 +300,7 @@ export class LocalKmsCrypto implements const algorithm = this.getAlgorithmName({ key: privateKey }); // Get the key generator based on the algorithm name. - const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator; + const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator; // Get the public key properties from the private JWK. const publicKey = await keyGenerator.getPublicKey({ key: privateKey }); @@ -322,9 +322,9 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); + * const keyManager = new LocalKeyManager(); * const privateKey = { ... } // A private key in JWK format - * const keyUri = await crypto.importKey({ key: privateKey }); + * const keyUri = await keyManager.importKey({ key: privateKey }); * ``` * * @param params - Parameters for importing the key. @@ -363,10 +363,10 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); + * const keyManager = new LocalKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); * const data = new TextEncoder().encode('Message to sign'); - * const signature = await crypto.sign({ keyUri, data }); + * const signature = await keyManager.sign({ keyUri, data }); * ``` * * @param params - The parameters for the signing operation. @@ -404,11 +404,11 @@ export class LocalKmsCrypto implements * * @example * ```ts - * const crypto = new LocalKmsCrypto(); - * const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); + * const keyManager = new LocalKeyManager(); + * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); * const data = new TextEncoder().encode('Message to sign'); - * const signature = await crypto.sign({ keyUri, data }); - * const isSignatureValid = await crypto.verify({ keyUri, data, signature }); + * const signature = await keyManager.sign({ keyUri, data }); + * const isSignatureValid = await keyManager.verify({ keyUri, data, signature }); * ``` * * @param params - The parameters for the verification operation. diff --git a/packages/crypto/src/primitives/concat-kdf.ts b/packages/crypto/src/primitives/concat-kdf.ts index 568e8a0e8..683b9b7a6 100644 --- a/packages/crypto/src/primitives/concat-kdf.ts +++ b/packages/crypto/src/primitives/concat-kdf.ts @@ -2,7 +2,16 @@ import { sha256 } from '@noble/hashes/sha256'; import { Convert, universalTypeOf } from '@web5/common'; import { TypedArray, concatBytes } from '@noble/hashes/utils'; -export type ConcatKdfOtherInfo = { +/** + * ConcatKDF FixedInfo Parameters. + * + * This implementation follows the recommended format for `FixedInfo` specified in section 5.8.2 + * of the NIST.800-56A publication. + * + * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf | NIST.800-56A} + * @see {@link https://datatracker.ietf.org/doc/html/rfc7518#section-4.6.2 | RFC 7518, Section 4.6.2} + */ +export type ConcatKdfFixedInfo = { /** * The algorithm the derived secret keying material will be used with. */ @@ -46,12 +55,12 @@ export type ConcatKdfOtherInfo = { * specifically uses SHA-256 as the pseudorandom function (PRF). * * Note: This implementation allows for only a single round / repetition using the function - * `K(1) = H(counter || Z || OtherInfo)`, where: + * `K(1) = H(counter || Z || FixedInfo)`, where: * - `K(1)` is the derived key material after one round * - `H` is the SHA-256 hashing function * - `counter` is a 32-bit, big-endian bit string counter set to 0x00000001 * - `Z` is the shared secret value obtained from a key agreement protocol - * - `OtherInfo` is a bit string used to ensure that the derived keying material is adequately + * - `FixedInfo` is a bit string used to ensure that the derived keying material is adequately * "bound" to the key-agreement transaction. * * @example @@ -60,7 +69,7 @@ export type ConcatKdfOtherInfo = { * const derivedKeyingMaterial = await ConcatKdf.deriveKey({ * sharedSecret: utils.randomBytes(32), * keyDataLen: 128, - * otherInfo: { + * fixedInfo: { * algorithmId: "A128GCM", * partyUInfo: "Alice", * partyVInfo: "Bob", @@ -94,7 +103,7 @@ export class ConcatKdf { * const derivedKeyingMaterial = await ConcatKdf.deriveKey({ * sharedSecret: utils.randomBytes(32), * keyDataLen: 128, - * otherInfo: { + * fixedInfo: { * algorithmId: "A128GCM", * partyUInfo: "Alice", * partyVInfo: "Bob", @@ -106,14 +115,14 @@ export class ConcatKdf { * @param params - Input parameters for key derivation. * @param params.keyDataLen - The desired length of the derived key in bits. * @param params.sharedSecret - The shared secret key to derive from. - * @param params.otherInfo - Additional public information to use in key derivation. + * @param params.fixedInfo - Additional public information to use in key derivation. * @returns The derived key as a Uint8Array. * * @throws {Error} If the `keyDataLen` would require multiple rounds. */ - public static async deriveKey({ keyDataLen, otherInfo, sharedSecret }: { + public static async deriveKey({ keyDataLen, fixedInfo, sharedSecret }: { keyDataLen: number; - otherInfo: ConcatKdfOtherInfo; + fixedInfo: ConcatKdfFixedInfo; sharedSecret: Uint8Array; }): Promise { // RFC 7518 Section 4.6.2 specifies using SHA-256 for ECDH key agreement: @@ -132,36 +141,36 @@ export class ConcatKdf { const counter = new Uint8Array(4); new DataView(counter.buffer).setUint32(0, roundCount); - // Compute the OtherInfo bit-string. - const otherInfoBytes = ConcatKdf.computeOtherInfo(otherInfo); + // Compute the FixedInfo bit-string. + const fixedInfoBytes = ConcatKdf.computeFixedInfo(fixedInfo); - // Compute K(i) = H(counter || Z || OtherInfo) - // return concatBytes(counter, sharedSecretZ, otherInfo); - const derivedKeyingMaterial = sha256(concatBytes(counter, sharedSecret, otherInfoBytes)); + // Compute K(i) = H(counter || Z || FixedInfo) + // return concatBytes(counter, sharedSecretZ, fixedInfo); + const derivedKeyingMaterial = sha256(concatBytes(counter, sharedSecret, fixedInfoBytes)); // Return the bit string of derived keying material of length keyDataLen bits. return derivedKeyingMaterial.slice(0, keyDataLen / 8); } /** - * Computes the `OtherInfo` parameter for Concat KDF, which binds the derived key material to the + * Computes the `FixedInfo` parameter for Concat KDF, which binds the derived key material to the * context of the key agreement transaction. * * @remarks - * This implementation follows the recommended format for `OtherInfo` specified in section + * This implementation follows the recommended format for `FixedInfo` specified in section * 5.8.1.2.1 of the NIST.800-56A publication. * - * `OtherInfo` is a bit string equal to the following concatenation: + * `FixedInfo` is a bit string equal to the following concatenation: * `AlgorithmID || PartyUInfo || PartyVInfo {|| SuppPubInfo }{|| SuppPrivInfo }`. * * `SuppPubInfo` is the key length in bits, big endian encoded as a 32-bit number. For example, * 128 would be [0, 0, 0, 128] and 256 would be [0, 0, 1, 0]. * - * @param params - Input data to construct OtherInfo. - * @returns OtherInfo as a Uint8Array. + * @param params - Input data to construct FixedInfo. + * @returns FixedInfo as a Uint8Array. */ - private static computeOtherInfo(params: - ConcatKdfOtherInfo + private static computeFixedInfo(params: + ConcatKdfFixedInfo ): Uint8Array { // Required sub-fields. const algorithmId = ConcatKdf.toDataLenData({ data: params.algorithmId }); @@ -172,9 +181,9 @@ export class ConcatKdf { const suppPrivInfo = ConcatKdf.toDataLenData({ data: params.suppPrivInfo }); // Concatenate AlgorithmID || PartyUInfo || PartyVInfo || SuppPubInfo || SuppPrivInfo. - const otherInfo = concatBytes(algorithmId, partyUInfo, partyVInfo, suppPubInfo, suppPrivInfo); + const fixedInfo = concatBytes(algorithmId, partyUInfo, partyVInfo, suppPubInfo, suppPrivInfo); - return otherInfo; + return fixedInfo; } /** diff --git a/packages/crypto/src/primitives/secp256k1.ts b/packages/crypto/src/primitives/secp256k1.ts index add7da40f..bc5a52dc3 100644 --- a/packages/crypto/src/primitives/secp256k1.ts +++ b/packages/crypto/src/primitives/secp256k1.ts @@ -1,3 +1,5 @@ +import type { AffinePoint } from '@noble/curves/abstract/weierstrass'; + import { Convert } from '@web5/common'; import { sha256 } from '@noble/hashes/sha256'; import { secp256k1 } from '@noble/curves/secp256k1'; @@ -144,7 +146,7 @@ export class Secp256k1 { * @remarks * This method takes a private key represented as a byte array (Uint8Array) and * converts it into a JWK object. The conversion involves extracting the - * elliptic curve points (x and y coordinates) from the private key and encoding + * elliptic curve point (x and y coordinates) from the private key and encoding * them into base64url format, alongside other JWK parameters. * * The resulting JWK object includes the following properties: @@ -172,16 +174,16 @@ export class Secp256k1 { public static async bytesToPrivateKey({ privateKeyBytes }: { privateKeyBytes: Uint8Array; }): Promise { - // Get the elliptic curve points (x and y coordinates) for the provided private key. - const points = await Secp256k1.getCurvePoints({ keyBytes: privateKeyBytes }); + // Get the elliptic curve point (x and y coordinates) for the provided private key. + const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes }); // Construct the private key in JWK format. const privateKey: Jwk = { kty : 'EC', crv : 'secp256k1', d : Convert.uint8Array(privateKeyBytes).toBase64Url(), - x : Convert.uint8Array(points.x).toBase64Url(), - y : Convert.uint8Array(points.y).toBase64Url() + x : Convert.uint8Array(point.x).toBase64Url(), + y : Convert.uint8Array(point.y).toBase64Url() }; // Compute the JWK thumbprint and set as the key ID. @@ -195,7 +197,7 @@ export class Secp256k1 { * * @remarks * This method accepts a public key in a byte array (Uint8Array) format and - * transforms it to a JWK object. It involves decoding the elliptic curve points + * transforms it to a JWK object. It involves decoding the elliptic curve point * (x and y coordinates) from the raw public key bytes and encoding them into * base64url format, along with setting appropriate JWK parameters. * @@ -223,15 +225,15 @@ export class Secp256k1 { public static async bytesToPublicKey({ publicKeyBytes }: { publicKeyBytes: Uint8Array; }): Promise { - // Get the elliptic curve points (x and y coordinates) for the provided public key. - const points = await Secp256k1.getCurvePoints({ keyBytes: publicKeyBytes }); + // Get the elliptic curve point (x and y coordinates) for the provided public key. + const point = await Secp256k1.getCurvePoint({ keyBytes: publicKeyBytes }); // Construct the public key in JWK format. const publicKey: Jwk = { kty : 'EC', crv : 'secp256k1', - x : Convert.uint8Array(points.x).toBase64Url(), - y : Convert.uint8Array(points.y).toBase64Url() + x : Convert.uint8Array(point.x).toBase64Url(), + y : Convert.uint8Array(point.y).toBase64Url() }; // Compute the JWK thumbprint and set as the key ID. @@ -278,7 +280,7 @@ export class Secp256k1 { * @remarks * This method takes a private key in JWK format and derives its corresponding public key, * also in JWK format. The derivation process involves converting the private key to a raw - * byte array, then computing the elliptic curve points (x and y coordinates) from this private + * byte array, then computing the elliptic curve point (x and y coordinates) from this private * key. These coordinates are then encoded into base64url format to construct the public key in * JWK format. * @@ -304,15 +306,15 @@ export class Secp256k1 { // Convert the provided private key to a byte array. const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey: key }); - // Get the elliptic curve points (x and y coordinates) for the provided private key. - const points = await Secp256k1.getCurvePoints({ keyBytes: privateKeyBytes }); + // Get the elliptic curve point (x and y coordinates) for the provided private key. + const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes }); // Construct the public key in JWK format. const publicKey: Jwk = { kty : 'EC', crv : 'secp256k1', - x : Convert.uint8Array(points.x).toBase64Url(), - y : Convert.uint8Array(points.y).toBase64Url() + x : Convert.uint8Array(point.x).toBase64Url(), + y : Convert.uint8Array(point.y).toBase64Url() }; // Compute the JWK thumbprint and set as the key ID. @@ -794,10 +796,10 @@ export class Secp256k1 { } /** - * Returns the elliptic curve points (x and y coordinates) for a given secp256k1 key. + * Returns the elliptic curve point (x and y coordinates) for a given secp256k1 key. * * @remarks - * This method extracts the elliptic curve points from a given secp256k1 key, whether + * This method extracts the elliptic curve point from a given secp256k1 key, whether * it's a private or a public key. For a private key, the method first computes the * corresponding public key and then extracts the x and y coordinates. For a public key, * it directly returns these coordinates. The coordinates are represented as Uint8Array. @@ -810,15 +812,15 @@ export class Secp256k1 { * ```ts * // For a private key * const privateKey = new Uint8Array([...]); // A 32-byte private key - * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256k1.getCurvePoints({ keyBytes: privateKey }); + * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256k1.getCurvePoint({ keyBytes: privateKey }); * * // For a public key * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key - * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256k1.getCurvePoints({ keyBytes: publicKey }); + * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256k1.getCurvePoint({ keyBytes: publicKey }); * ``` * * @param params - The parameters for the curve point decoding operation. - * @param params.keyBytes - The key for which to get the elliptic curve points. + * @param params.keyBytes - The key for which to get the elliptic curve point. * Can be either a private key or a public key. * The key should be passed as a `Uint8Array`. * @@ -826,15 +828,15 @@ export class Secp256k1 { * each being a Uint8Array representing the x and y coordinates of the key point on the * elliptic curve. */ - private static async getCurvePoints({ keyBytes }: { + private static async getCurvePoint({ keyBytes }: { keyBytes: Uint8Array; - }): Promise<{ x: Uint8Array, y: Uint8Array }> { + }): Promise> { // If key is a private key, first compute the public key. if (keyBytes.byteLength === 32) { keyBytes = secp256k1.getPublicKey(keyBytes); } - // Decode Weierstrass points from key bytes. + // Decode Weierstrass affine point from key bytes. const point = secp256k1.ProjectivePoint.fromHex(keyBytes); // Get x- and y-coordinate values and convert to Uint8Array. diff --git a/packages/crypto/src/primitives/secp256r1.ts b/packages/crypto/src/primitives/secp256r1.ts index ccb958167..ae9914e23 100644 --- a/packages/crypto/src/primitives/secp256r1.ts +++ b/packages/crypto/src/primitives/secp256r1.ts @@ -1,3 +1,5 @@ +import type { AffinePoint } from '@noble/curves/abstract/weierstrass'; + import { Convert } from '@web5/common'; import { sha256 } from '@noble/hashes/sha256'; import { secp256r1 } from '@noble/curves/p256'; @@ -144,7 +146,7 @@ export class Secp256r1 { * @remarks * This method takes a private key represented as a byte array (Uint8Array) and * converts it into a JWK object. The conversion involves extracting the - * elliptic curve points (x and y coordinates) from the private key and encoding + * elliptic curve point (x and y coordinates) from the private key and encoding * them into base64url format, alongside other JWK parameters. * * The resulting JWK object includes the following properties: @@ -173,15 +175,15 @@ export class Secp256r1 { privateKeyBytes: Uint8Array; }): Promise { // Get the elliptic curve points (x and y coordinates) for the provided private key. - const points = await Secp256r1.getCurvePoints({ keyBytes: privateKeyBytes }); + const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes }); // Construct the private key in JWK format. const privateKey: Jwk = { kty : 'EC', crv : 'P-256', d : Convert.uint8Array(privateKeyBytes).toBase64Url(), - x : Convert.uint8Array(points.x).toBase64Url(), - y : Convert.uint8Array(points.y).toBase64Url() + x : Convert.uint8Array(point.x).toBase64Url(), + y : Convert.uint8Array(point.y).toBase64Url() }; // Compute the JWK thumbprint and set as the key ID. @@ -195,7 +197,7 @@ export class Secp256r1 { * * @remarks * This method accepts a public key in a byte array (Uint8Array) format and - * transforms it to a JWK object. It involves decoding the elliptic curve points + * transforms it to a JWK object. It involves decoding the elliptic curve point * (x and y coordinates) from the raw public key bytes and encoding them into * base64url format, along with setting appropriate JWK parameters. * @@ -223,15 +225,15 @@ export class Secp256r1 { public static async bytesToPublicKey({ publicKeyBytes }: { publicKeyBytes: Uint8Array; }): Promise { - // Get the elliptic curve points (x and y coordinates) for the provided public key. - const points = await Secp256r1.getCurvePoints({ keyBytes: publicKeyBytes }); + // Get the elliptic curve point (x and y coordinates) for the provided public key. + const point = await Secp256r1.getCurvePoint({ keyBytes: publicKeyBytes }); // Construct the public key in JWK format. const publicKey: Jwk = { kty : 'EC', crv : 'P-256', - x : Convert.uint8Array(points.x).toBase64Url(), - y : Convert.uint8Array(points.y).toBase64Url() + x : Convert.uint8Array(point.x).toBase64Url(), + y : Convert.uint8Array(point.y).toBase64Url() }; // Compute the JWK thumbprint and set as the key ID. @@ -278,7 +280,7 @@ export class Secp256r1 { * @remarks * This method takes a private key in JWK format and derives its corresponding public key, * also in JWK format. The derivation process involves converting the private key to a raw - * byte array, then computing the elliptic curve points (x and y coordinates) from this private + * byte array, then computing the elliptic curve point (x and y coordinates) from this private * key. These coordinates are then encoded into base64url format to construct the public key in * JWK format. * @@ -304,15 +306,15 @@ export class Secp256r1 { // Convert the provided private key to a byte array. const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey: key }); - // Get the elliptic curve points (x and y coordinates) for the provided private key. - const points = await Secp256r1.getCurvePoints({ keyBytes: privateKeyBytes }); + // Get the elliptic curve point (x and y coordinates) for the provided private key. + const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes }); // Construct the public key in JWK format. const publicKey: Jwk = { kty : 'EC', crv : 'P-256', - x : Convert.uint8Array(points.x).toBase64Url(), - y : Convert.uint8Array(points.y).toBase64Url() + x : Convert.uint8Array(point.x).toBase64Url(), + y : Convert.uint8Array(point.y).toBase64Url() }; // Compute the JWK thumbprint and set as the key ID. @@ -794,10 +796,10 @@ export class Secp256r1 { } /** - * Returns the elliptic curve points (x and y coordinates) for a given secp256r1 key. + * Returns the elliptic curve point (x and y coordinates) for a given secp256r1 key. * * @remarks - * This method extracts the elliptic curve points from a given secp256r1 key, whether + * This method extracts the elliptic curve point from a given secp256r1 key, whether * it's a private or a public key. For a private key, the method first computes the * corresponding public key and then extracts the x and y coordinates. For a public key, * it directly returns these coordinates. The coordinates are represented as Uint8Array. @@ -810,15 +812,15 @@ export class Secp256r1 { * ```ts * // For a private key * const privateKey = new Uint8Array([...]); // A 32-byte private key - * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256r1.getCurvePoints({ keyBytes: privateKey }); + * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256r1.getCurvePoint({ keyBytes: privateKey }); * * // For a public key * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key - * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256r1.getCurvePoints({ keyBytes: publicKey }); + * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256r1.getCurvePoint({ keyBytes: publicKey }); * ``` * * @param params - The parameters for the curve point decoding operation. - * @param params.keyBytes - The key for which to get the elliptic curve points. + * @param params.keyBytes - The key for which to get the elliptic curve point. * Can be either a private key or a public key. * The key should be passed as a `Uint8Array`. * @@ -826,15 +828,15 @@ export class Secp256r1 { * each being a Uint8Array representing the x and y coordinates of the key point on the * elliptic curve. */ - private static async getCurvePoints({ keyBytes }: { + private static async getCurvePoint({ keyBytes }: { keyBytes: Uint8Array; - }): Promise<{ x: Uint8Array, y: Uint8Array }> { + }): Promise> { // If key is a private key, first compute the public key. if (keyBytes.byteLength === 32) { keyBytes = secp256r1.getPublicKey(keyBytes); } - // Decode Weierstrass points from key bytes. + // Decode Weierstrass affine point from key bytes. const point = secp256r1.ProjectivePoint.fromHex(keyBytes); // Get x- and y-coordinate values and convert to Uint8Array. diff --git a/packages/crypto/src/primitives/xchacha20-poly1305.ts b/packages/crypto/src/primitives/xchacha20-poly1305.ts index 510758ee7..6d13ad081 100644 --- a/packages/crypto/src/primitives/xchacha20-poly1305.ts +++ b/packages/crypto/src/primitives/xchacha20-poly1305.ts @@ -15,7 +15,7 @@ import { computeJwkThumbprint, isOctPrivateJwk } from '../jose/jwk.js'; * a strong level of security for message authentication, verifying the integrity and * authenticity of the data during decryption. */ -const POLY1305_TAG_LENGTH = 16; +export const POLY1305_TAG_LENGTH = 16; /** * The `XChaCha20Poly1305` class provides a suite of utilities for cryptographic operations @@ -132,27 +132,25 @@ export class XChaCha20Poly1305 { * ``` * * @param params - The parameters for the decryption operation. - * @param params.data - The encrypted data to decrypt, represented as a Uint8Array. + * @param params.data - The encrypted data to decrypt including the authentication tag, + * represented as a Uint8Array. * @param params.key - The key to use for decryption, represented in JWK format. * @param params.nonce - The nonce used during the encryption process. - * @param params.tag - The authentication tag generated during encryption. * @param params.additionalData - Optional additional authenticated data. * * @returns A Promise that resolves to the decrypted data as a Uint8Array. */ - public static async decrypt({ data, key, nonce, tag, additionalData }: { + public static async decrypt({ data, key, nonce, additionalData }: { additionalData?: Uint8Array; data: Uint8Array; key: Jwk; nonce: Uint8Array; - tag: Uint8Array; }): Promise { // Convert the private key from JWK format to bytes. const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey: key }); const xc20p = xchacha20poly1305(privateKeyBytes, nonce, additionalData); - const ciphertext = new Uint8Array([...data, ...tag]); - const plaintext = xc20p.decrypt(ciphertext); + const plaintext = xc20p.decrypt(data); return plaintext; } @@ -195,17 +193,15 @@ export class XChaCha20Poly1305 { data: Uint8Array; key: Jwk; nonce: Uint8Array; - }): Promise<{ ciphertext: Uint8Array, tag: Uint8Array }> { + }): Promise { + // }): Promise<{ ciphertext: Uint8Array, tag: Uint8Array }> { // Convert the private key from JWK format to bytes. const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey: key }); const xc20p = xchacha20poly1305(privateKeyBytes, nonce, additionalData); - const cipherOutput = xc20p.encrypt(data); - - const ciphertext = cipherOutput.subarray(0, -POLY1305_TAG_LENGTH); - const tag = cipherOutput.subarray(-POLY1305_TAG_LENGTH); + const ciphertext = xc20p.encrypt(data); - return { ciphertext, tag }; + return ciphertext; } /** diff --git a/packages/crypto/src/types/params-kms.ts b/packages/crypto/src/types/params-kms.ts index 705a32f98..a44acc1ce 100644 --- a/packages/crypto/src/types/params-kms.ts +++ b/packages/crypto/src/types/params-kms.ts @@ -75,7 +75,12 @@ export interface KmsGenerateKeyParams { algorithm: AlgorithmIdentifier; } +/** + * Parameters for computing the Key URI of a public key. Intended for use with a Key Management + * System. + */ export interface KmsGetKeyUriParams { + /** A {@link Jwk} containing the public key for which the Key URI will be computed. */ key: Jwk; } @@ -136,7 +141,9 @@ export interface KmsWrapKeyParams { wrapAlgorithm: AlgorithmIdentifier; } - +/** + * Parameters for unwrapping a key using a KMS. Intended for use with a Key Management System. + */ export interface KmsUnwrapKeyParams { /** The wrapped key in a byte array. */ wrappedKey: Uint8Array; diff --git a/packages/crypto/tests/local-kms-crypto.spec.ts b/packages/crypto/tests/local-key-manager.spec.ts similarity index 77% rename from packages/crypto/tests/local-kms-crypto.spec.ts rename to packages/crypto/tests/local-key-manager.spec.ts index 224288f16..c3f434802 100644 --- a/packages/crypto/tests/local-kms-crypto.spec.ts +++ b/packages/crypto/tests/local-key-manager.spec.ts @@ -6,28 +6,28 @@ import type { Jwk } from '../src/jose/jwk.js'; import type { KeyIdentifier } from '../src/types/identifier.js'; import { EcdsaAlgorithm } from '../src/algorithms/ecdsa.js'; -import { LocalKmsCrypto } from '../src/local-kms-crypto.js'; +import { LocalKeyManager } from '../src/local-key-manager.js'; -describe('LocalKmsCrypto', () => { - let crypto: LocalKmsCrypto; +describe('LocalKeyManager', () => { + let keyManager: LocalKeyManager; beforeEach(() => { - crypto = new LocalKmsCrypto(); + keyManager = new LocalKeyManager(); }); describe('constructor', () => { it('initializes with default parameters', () => { - const crypto = new LocalKmsCrypto(); - expect(crypto).to.exist; - expect(crypto).to.be.an.instanceOf(LocalKmsCrypto); + const keyManager = new LocalKeyManager(); + expect(keyManager).to.exist; + expect(keyManager).to.be.an.instanceOf(LocalKeyManager); }); it('initializes with a custom in-memory key store', () => { const keyStore = new MemoryStore(); - const crypto = new LocalKmsCrypto({ keyStore }); + const keyManager = new LocalKeyManager({ keyStore }); - expect(crypto).to.exist; - expect(crypto).to.be.an.instanceOf(LocalKmsCrypto); + expect(keyManager).to.exist; + expect(keyManager).to.be.an.instanceOf(LocalKeyManager); }); }); @@ -37,7 +37,7 @@ describe('LocalKmsCrypto', () => { const data = new Uint8Array([0, 1, 2, 3, 4]); // Test the method. - const digest = await crypto.digest({ algorithm: 'SHA-256', data }); + const digest = await keyManager.digest({ algorithm: 'SHA-256', data }); // Validate the result. expect(digest).to.exist; @@ -50,7 +50,7 @@ describe('LocalKmsCrypto', () => { const expectedOutput = Convert.hex('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad').toUint8Array(); // Test the method. - const digest = await crypto.digest({ algorithm: 'SHA-256', data }); + const digest = await keyManager.digest({ algorithm: 'SHA-256', data }); // Validate the result. expect(digest).to.exist; @@ -62,9 +62,9 @@ describe('LocalKmsCrypto', () => { describe('exportKey()', () => { it('exports a private key as a JWK', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); + const keyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); - const jwk = await crypto.exportKey({ keyUri }); + const jwk = await keyManager.exportKey({ keyUri }); expect(jwk).to.exist; expect(jwk).to.be.an('object'); @@ -76,7 +76,7 @@ describe('LocalKmsCrypto', () => { const keyUri = 'urn:jwk:does-not-exist'; try { - await crypto.exportKey({ keyUri }); + await keyManager.exportKey({ keyUri }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -89,7 +89,7 @@ describe('LocalKmsCrypto', () => { describe('generateKey()', () => { it('generates a key and returns a key URI', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); + const keyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); expect(keyUri).to.exist; expect(keyUri).to.be.a.string; @@ -97,7 +97,7 @@ describe('LocalKmsCrypto', () => { }); it(`supports generating 'secp256k1' keys`, async () => { - const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); + const keyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); expect(keyUri).to.exist; expect(keyUri).to.be.a.string; @@ -105,7 +105,7 @@ describe('LocalKmsCrypto', () => { }); it(`supports generating 'Ed25519' keys`, async () => { - const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); + const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); expect(keyUri).to.exist; expect(keyUri).to.be.a.string; @@ -119,7 +119,7 @@ describe('LocalKmsCrypto', () => { // Test the method. try { // @ts-expect-error because an unsupported algorithm is being tested. - await crypto.generateKey({ algorithm }); + await keyManager.generateKey({ algorithm }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -134,11 +134,11 @@ describe('LocalKmsCrypto', () => { // Setup. const mockKeyGenerator = { generateKey: sinon.stub() }; // @ts-expect-error because we're accessing a private property. - crypto._algorithmInstances.set(EcdsaAlgorithm, mockKeyGenerator); // Replace the algorithm instance with the mock. + keyManager._algorithmInstances.set(EcdsaAlgorithm, mockKeyGenerator); // Replace the algorithm instance with the mock. // Test the method. try { - await crypto.generateKey({ algorithm: 'secp256k1' }); + await keyManager.generateKey({ algorithm: 'secp256k1' }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { @@ -164,7 +164,7 @@ describe('LocalKmsCrypto', () => { }; // Test the method. - const keyUri = await crypto.getKeyUri({ key }); + const keyUri = await keyManager.getKeyUri({ key }); // Validate the result. expect(keyUri).to.exist; @@ -184,7 +184,7 @@ describe('LocalKmsCrypto', () => { const expectedKeyUri = 'urn:jwk:' + expectedThumbprint; // Test the method. - const keyUri = await crypto.getKeyUri({ key }); + const keyUri = await keyManager.getKeyUri({ key }); expect(keyUri).to.equal(expectedKeyUri); }); @@ -192,9 +192,9 @@ describe('LocalKmsCrypto', () => { describe('getPublicKey()', () => { it('computes the public key and returns a JWK', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); + const keyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); - const publicKey = await crypto.getPublicKey({ keyUri }); + const publicKey = await keyManager.getPublicKey({ keyUri }); expect(publicKey).to.exist; expect(publicKey).to.be.an('object'); @@ -202,9 +202,9 @@ describe('LocalKmsCrypto', () => { }); it('supports ECDSA using secp256k1 curve and SHA-256', async () => { - const keyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); + const keyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); - const publicKey = await crypto.getPublicKey({ keyUri }); + const publicKey = await keyManager.getPublicKey({ keyUri }); expect(publicKey).to.exist; expect(publicKey).to.be.an('object'); @@ -218,10 +218,10 @@ describe('LocalKmsCrypto', () => { it('supports EdDSA using Ed25519 curve', async () => { // Setup. - const keyUri = await crypto.generateKey({ algorithm: 'Ed25519' }); + const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' }); // Test the method. - const publicKey = await crypto.getPublicKey({ keyUri }); + const publicKey = await keyManager.getPublicKey({ keyUri }); expect(publicKey).to.exist; expect(publicKey).to.be.an('object'); @@ -238,7 +238,7 @@ describe('LocalKmsCrypto', () => { it('imports a private key and return a key URI', async () => { // Setup. const memoryStore = new MemoryStore(); - const crypto = new LocalKmsCrypto({ keyStore: memoryStore }); + const keyManager = new LocalKeyManager({ keyStore: memoryStore }); const privateKey: Jwk = { kty : 'EC', crv : 'secp256k1', @@ -251,7 +251,7 @@ describe('LocalKmsCrypto', () => { const expectedKeyUri = 'urn:jwk:' + expectedThumbprint; // Test the method. - const keyUri = await crypto.importKey({ key: privateKey }); + const keyUri = await keyManager.importKey({ key: privateKey }); // Validate the result. expect(keyUri).to.equal(expectedKeyUri); @@ -262,7 +262,7 @@ describe('LocalKmsCrypto', () => { it('does not modify the kid property, if provided', async () => { // Setup. const memoryStore = new MemoryStore(); - const crypto = new LocalKmsCrypto({ keyStore: memoryStore }); + const keyManager = new LocalKeyManager({ keyStore: memoryStore }); const privateKey: Jwk = { kty : 'EC', crv : 'secp256k1', @@ -273,7 +273,7 @@ describe('LocalKmsCrypto', () => { }; // Test the method. - const keyUri = await crypto.importKey({ key: privateKey }); + const keyUri = await keyManager.importKey({ key: privateKey }); // Validate the result. const storedKey = await memoryStore.get(keyUri); @@ -283,7 +283,7 @@ describe('LocalKmsCrypto', () => { it('adds the kid property, if missing', async () => { // Setup. const memoryStore = new MemoryStore(); - const crypto = new LocalKmsCrypto({ keyStore: memoryStore }); + const keyManager = new LocalKeyManager({ keyStore: memoryStore }); const privateKey: Jwk = { kty : 'EC', crv : 'secp256k1', @@ -293,7 +293,7 @@ describe('LocalKmsCrypto', () => { }; // Test the method. - const keyUri = await crypto.importKey({ key: privateKey }); + const keyUri = await keyManager.importKey({ key: privateKey }); // Validate the result. const storedKey = await memoryStore.get(keyUri); @@ -312,7 +312,7 @@ describe('LocalKmsCrypto', () => { const privateKeyCopy = structuredClone(privateKey); // Test the method. - await crypto.importKey({ key: privateKey }); + await keyManager.importKey({ key: privateKey }); // Validate the result. expect(privateKey).to.deep.equal(privateKeyCopy); @@ -325,7 +325,7 @@ describe('LocalKmsCrypto', () => { // Test the method. try { - await crypto.importKey({ key: invalidJwk }); + await keyManager.importKey({ key: invalidJwk }); expect.fail('Should have thrown an error'); } catch (error: any) { @@ -345,7 +345,7 @@ describe('LocalKmsCrypto', () => { // Test the method. try { - await crypto.importKey({ key: publicKey }); + await keyManager.importKey({ key: publicKey }); expect.fail('Should have thrown an error'); } catch (error: any) { @@ -358,11 +358,11 @@ describe('LocalKmsCrypto', () => { describe('sign()', () => { it('generates signatures as Uint8Array', async () => { // Setup. - const privateKeyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); + const privateKeyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); const data = new Uint8Array([0, 1, 2, 3, 4]); // Test the method. - const signature = await crypto.sign({ keyUri: privateKeyUri, data }); + const signature = await keyManager.sign({ keyUri: privateKeyUri, data }); // Validate the result. expect(signature).to.be.a('Uint8Array'); @@ -372,13 +372,13 @@ describe('LocalKmsCrypto', () => { describe('verify()', () => { it('returns true for a valid signature', async () => { // Setup. - const privateKeyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); - const publicKey = await crypto.getPublicKey({ keyUri: privateKeyUri }); + const privateKeyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); + const publicKey = await keyManager.getPublicKey({ keyUri: privateKeyUri }); const data = new Uint8Array([0, 1, 2, 3, 4]); - const signature = await crypto.sign({ keyUri: privateKeyUri, data }); + const signature = await keyManager.sign({ keyUri: privateKeyUri, data }); // Test the method. - const isValid = await crypto.verify({ key: publicKey, signature, data }); + const isValid = await keyManager.verify({ key: publicKey, signature, data }); // Validate the result. expect(isValid).to.be.true; @@ -386,13 +386,13 @@ describe('LocalKmsCrypto', () => { it('returns false for an invalid signature', async () => { // Setup. - const privateKeyUri = await crypto.generateKey({ algorithm: 'secp256k1' }); - const publicKey = await crypto.getPublicKey({ keyUri: privateKeyUri }); + const privateKeyUri = await keyManager.generateKey({ algorithm: 'secp256k1' }); + const publicKey = await keyManager.getPublicKey({ keyUri: privateKeyUri }); const data = new Uint8Array([0, 1, 2, 3, 4]); const signature = new Uint8Array(64); // Test the method. - const isValid = await crypto.verify({ key: publicKey, signature, data }); + const isValid = await keyManager.verify({ key: publicKey, signature, data }); // Validate the result. expect(isValid).to.be.false; @@ -407,7 +407,7 @@ describe('LocalKmsCrypto', () => { // Test the method. try { - await crypto.verify({ key, signature, data }); + await keyManager.verify({ key, signature, data }); expect.fail('Expected an error to be thrown.'); } catch (error: any) { diff --git a/packages/crypto/tests/primitives/concat-kdf.spec.ts b/packages/crypto/tests/primitives/concat-kdf.spec.ts index 3b96692be..da6c7732b 100644 --- a/packages/crypto/tests/primitives/concat-kdf.spec.ts +++ b/packages/crypto/tests/primitives/concat-kdf.spec.ts @@ -14,7 +14,7 @@ describe('ConcatKdf', () => { const input = { sharedSecret : Convert.base64Url(inputSharedSecret).toUint8Array(), keyDataLen : 128, - otherInfo : { + fixedInfo : { algorithmId : 'A128GCM', partyUInfo : 'Alice', partyVInfo : 'Bob', @@ -34,11 +34,11 @@ describe('ConcatKdf', () => { const inputBase = { sharedSecret : new Uint8Array([1, 2, 3]), keyDataLen : 256, - otherInfo : {} + fixedInfo : {} }; // String input. - const inputString = { ...inputBase, otherInfo: { + const inputString = { ...inputBase, fixedInfo: { algorithmId : 'A128GCM', partyUInfo : 'Alice', partyVInfo : 'Bob', @@ -49,7 +49,7 @@ describe('ConcatKdf', () => { expect(derivedKeyingMaterial.byteLength).to.equal(32); // TypedArray input. - const inputTypedArray = { ...inputBase, otherInfo: { + const inputTypedArray = { ...inputBase, fixedInfo: { algorithmId : 'A128GCM', partyUInfo : Convert.string('Alice').toUint8Array(), partyVInfo : Convert.string('Bob').toUint8Array(), @@ -72,7 +72,7 @@ describe('ConcatKdf', () => { ConcatKdf.deriveKey({ sharedSecret : new Uint8Array([1, 2, 3]), keyDataLen : 128, - otherInfo : { + fixedInfo : { algorithmId : 'A128GCM', partyUInfo : 'Alice', partyVInfo : 'Bob', @@ -84,7 +84,7 @@ describe('ConcatKdf', () => { }); }); - describe('computeOtherInfo()', () => { + describe('computeFixedInfo()', () => { it('returns concatenated and formatted Uint8Array', () => { const input = { algorithmId : 'A128GCM', @@ -95,11 +95,11 @@ describe('ConcatKdf', () => { }; const output = 'AAAAB0ExMjhHQ00AAAAFQWxpY2UAAAADQm9iAAAAgAAAACtnSTBHQUlMQmR1N1Q1M2FrckZtTXlHY3NGM241ZE83TW13TkJIS1c1U1Yw'; - // @ts-expect-error because computeOtherInfo() is a private method. - const otherInfo = ConcatKdf.computeOtherInfo(input); + // @ts-expect-error because computeFixedInfo() is a private method. + const fixedInfo = ConcatKdf.computeFixedInfo(input); const expectedResult = Convert.base64Url(output).toUint8Array(); - expect(otherInfo).to.deep.equal(expectedResult); + expect(fixedInfo).to.deep.equal(expectedResult); }); it('matches RFC 7518 ECDH-ES key agreement computation example', async () => { @@ -112,11 +112,11 @@ describe('ConcatKdf', () => { }; const output = 'AAAAB0ExMjhHQ00AAAAFQWxpY2UAAAADQm9iAAAAgA'; - // @ts-expect-error because computeOtherInfo() is a private method. - const otherInfo = ConcatKdf.computeOtherInfo(input); + // @ts-expect-error because computeFixedInfo() is a private method. + const fixedInfo = ConcatKdf.computeFixedInfo(input); const expectedResult = Convert.base64Url(output).toUint8Array(); - expect(otherInfo).to.deep.equal(expectedResult); + expect(fixedInfo).to.deep.equal(expectedResult); }); }); }); \ No newline at end of file diff --git a/packages/crypto/tests/primitives/secp256k1.spec.ts b/packages/crypto/tests/primitives/secp256k1.spec.ts index d9ab948d5..ebc3da158 100644 --- a/packages/crypto/tests/primitives/secp256k1.spec.ts +++ b/packages/crypto/tests/primitives/secp256k1.spec.ts @@ -326,12 +326,12 @@ describe('Secp256k1', () => { }); }); - describe('getCurvePoints()', () => { + describe('getCurvePoint()', () => { for (const vector of secp256k1GetCurvePoints.vectors) { it(vector.description, async () => { const keyBytes = Convert.hex(vector.input.keyBytes).toUint8Array(); - // @ts-expect-error because getCurvePoints() is a private method. - const points = await Secp256k1.getCurvePoints({ keyBytes }); + // @ts-expect-error because getCurvePoint() is a private method. + const points = await Secp256k1.getCurvePoint({ keyBytes }); expect(points.x).to.deep.equal(Convert.hex(vector.output.x).toUint8Array()); expect(points.y).to.deep.equal(Convert.hex(vector.output.y).toUint8Array()); }); @@ -339,8 +339,8 @@ describe('Secp256k1', () => { it('throws error with invalid input key length', async () => { await expect( - // @ts-expect-error because getCurvePoints() is a private method. - Secp256k1.getCurvePoints({ keyBytes: new Uint8Array(16) }) + // @ts-expect-error because getCurvePoint() is a private method. + Secp256k1.getCurvePoint({ keyBytes: new Uint8Array(16) }) ).to.eventually.be.rejectedWith(Error, 'Point of length 16 was invalid. Expected 33 compressed bytes or 65 uncompressed bytes'); }); }); diff --git a/packages/crypto/tests/primitives/secp256r1.spec.ts b/packages/crypto/tests/primitives/secp256r1.spec.ts index ddb7746aa..53abcaa67 100644 --- a/packages/crypto/tests/primitives/secp256r1.spec.ts +++ b/packages/crypto/tests/primitives/secp256r1.spec.ts @@ -326,12 +326,12 @@ describe('Secp256r1', () => { }); }); - describe('getCurvePoints()', () => { + describe('getCurvePoint()', () => { // for (const vector of secp256k1GetCurvePoints.vectors) { // it(vector.description, async () => { // const keyBytes = Convert.hex(vector.input.keyBytes).toUint8Array(); - // // @ts-expect-error because getCurvePoints() is a private method. - // const points = await Secp256r1.getCurvePoints({ keyBytes }); + // // @ts-expect-error because getCurvePoint() is a private method. + // const points = await Secp256r1.getCurvePoint({ keyBytes }); // expect(points.x).to.deep.equal(Convert.hex(vector.output.x).toUint8Array()); // expect(points.y).to.deep.equal(Convert.hex(vector.output.y).toUint8Array()); // }); @@ -339,8 +339,8 @@ describe('Secp256r1', () => { it('throws error with invalid input key length', async () => { await expect( - // @ts-expect-error because getCurvePoints() is a private method. - Secp256r1.getCurvePoints({ keyBytes: new Uint8Array(16) }) + // @ts-expect-error because getCurvePoint() is a private method. + Secp256r1.getCurvePoint({ keyBytes: new Uint8Array(16) }) ).to.eventually.be.rejectedWith(Error, 'Point of length 16 was invalid. Expected 33 compressed bytes or 65 uncompressed bytes'); }); }); diff --git a/packages/crypto/tests/primitives/xchacha20-poly1305.spec.ts b/packages/crypto/tests/primitives/xchacha20-poly1305.spec.ts index f40556e56..ea401f7a0 100644 --- a/packages/crypto/tests/primitives/xchacha20-poly1305.spec.ts +++ b/packages/crypto/tests/primitives/xchacha20-poly1305.spec.ts @@ -4,7 +4,7 @@ import chaiAsPromised from 'chai-as-promised'; import type { Jwk } from '../../src/jose/jwk.js'; -import { XChaCha20Poly1305 } from '../../src/primitives/xchacha20-poly1305.js'; +import { POLY1305_TAG_LENGTH, XChaCha20Poly1305 } from '../../src/primitives/xchacha20-poly1305.js'; chai.use(chaiAsPromised); @@ -35,11 +35,12 @@ describe('XChaCha20Poly1305', () => { describe('decrypt()', () => { it('returns Uint8Array plaintext with length matching input', async () => { + const ciphertext = Convert.hex('789e9689e5208d7fd9e1').toUint8Array(); + const tag = Convert.hex('09701fb9f36ab77a0f136ca539229a34').toUint8Array(); const plaintext = await XChaCha20Poly1305.decrypt({ - data : Convert.hex('789e9689e5208d7fd9e1').toUint8Array(), + data : new Uint8Array([...ciphertext, ...tag]), key : await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes: new Uint8Array(32) }), nonce : new Uint8Array(24), - tag : Convert.hex('09701fb9f36ab77a0f136ca539229a34').toUint8Array() }); expect(plaintext).to.be.an('Uint8Array'); expect(plaintext.byteLength).to.equal(10); @@ -49,11 +50,14 @@ describe('XChaCha20Poly1305', () => { const privateKeyBytes = Convert.hex('79c99798ac67300bbb2704c95c341e3245f3dcb21761b98e52ff45b24f304fc4').toUint8Array(); const privateKey = await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes }); + const ciphertext = Convert.hex('80246ca517c0fb5860c19090a7e7a2b030dde4882520102cbc64fad937916596ca9d').toUint8Array(); + const tag = Convert.hex('9e10a121d990e6a290f6b534516aa32f').toUint8Array(); + const nonce = Convert.hex('b33ffd3096479bcfbc9aee49417688a0a2554f8d95389419').toUint8Array(); + const input = { - data : Convert.hex('80246ca517c0fb5860c19090a7e7a2b030dde4882520102cbc64fad937916596ca9d').toUint8Array(), - key : privateKey, - nonce : Convert.hex('b33ffd3096479bcfbc9aee49417688a0a2554f8d95389419').toUint8Array(), - tag : Convert.hex('9e10a121d990e6a290f6b534516aa32f').toUint8Array() + data : new Uint8Array([...ciphertext, ...tag]), + key : privateKey, + nonce }; const output = Convert.string(`Are You There Bob? It's Me, Alice.`).toUint8Array(); @@ -61,7 +65,6 @@ describe('XChaCha20Poly1305', () => { data : input.data, key : input.key, nonce : input.nonce, - tag : input.tag }); expect(plaintext).to.deep.equal(output); @@ -70,10 +73,9 @@ describe('XChaCha20Poly1305', () => { it('throws an error if an invalid tag is given', async () => { await expect( XChaCha20Poly1305.decrypt({ - data : new Uint8Array(10), + data : new Uint8Array([...new Uint8Array(10), ...new Uint8Array(16)]), key : await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes: new Uint8Array(32) }), - nonce : new Uint8Array(24), - tag : new Uint8Array(16) + nonce : new Uint8Array(24) }) ).to.eventually.be.rejectedWith(Error, 'invalid tag'); }); @@ -81,35 +83,38 @@ describe('XChaCha20Poly1305', () => { describe('encrypt()', () => { it('returns Uint8Array ciphertext and tag', async () => { - const { ciphertext, tag } = await XChaCha20Poly1305.encrypt({ + const ciphertext = await XChaCha20Poly1305.encrypt({ data : new Uint8Array(10), key : await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes: new Uint8Array(32) }), nonce : new Uint8Array(24) }); expect(ciphertext).to.be.an('Uint8Array'); - expect(ciphertext.byteLength).to.equal(10); - expect(tag).to.be.an('Uint8Array'); - expect(tag.byteLength).to.equal(16); + expect(ciphertext.byteLength).to.equal(10 + POLY1305_TAG_LENGTH); }); it('accepts additional authenticated data', async () => { - const { ciphertext: ciphertextAad, tag: tagAad } = await XChaCha20Poly1305.encrypt({ + const ciphertextAad = await XChaCha20Poly1305.encrypt({ additionalData : new Uint8Array(64), data : new Uint8Array(10), key : await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes: new Uint8Array(32) }), nonce : new Uint8Array(24) }); - const { ciphertext, tag } = await XChaCha20Poly1305.encrypt({ + const ciphertext = await XChaCha20Poly1305.encrypt({ data : new Uint8Array(10), key : await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes: new Uint8Array(32) }), nonce : new Uint8Array(24) }); - expect(ciphertextAad.byteLength).to.equal(10); - expect(ciphertext.byteLength).to.equal(10); - expect(ciphertextAad).to.deep.equal(ciphertext); - expect(tagAad).to.not.deep.equal(tag); + const ciphertextWithAad = ciphertextAad.slice(0, -POLY1305_TAG_LENGTH); + const tagWithAad = ciphertextAad.slice(-POLY1305_TAG_LENGTH); + const ciphertextWithoutAad = ciphertext.slice(0, -POLY1305_TAG_LENGTH); + const tagWithoutAad = ciphertext.slice(-POLY1305_TAG_LENGTH); + + expect(ciphertextWithAad.byteLength).to.equal(10); + expect(ciphertextWithoutAad.byteLength).to.equal(10); + expect(ciphertextWithAad).to.deep.equal(ciphertextWithoutAad); + expect(tagWithAad).to.not.deep.equal(tagWithoutAad); }); it('passes test vectors', async () => { @@ -126,13 +131,16 @@ describe('XChaCha20Poly1305', () => { tag : Convert.hex('9e10a121d990e6a290f6b534516aa32f').toUint8Array() }; - const { ciphertext, tag } = await XChaCha20Poly1305.encrypt({ + const ciphertext = await XChaCha20Poly1305.encrypt({ data : input.data, key : input.key, nonce : input.nonce }); - expect(ciphertext).to.deep.equal(output.ciphertext); + const ciphertextOnly = ciphertext.slice(0, -POLY1305_TAG_LENGTH); + const tag = ciphertext.slice(-POLY1305_TAG_LENGTH); + + expect(ciphertextOnly).to.deep.equal(output.ciphertext); expect(tag).to.deep.equal(output.tag); }); }); diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 77a4ff0cd..60e30d33d 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -11,7 +11,7 @@ import type { import bencode from 'bencode'; import { Convert } from '@web5/common'; -import { CryptoApi, computeJwkThumbprint, Ed25519, LocalKmsCrypto, Secp256k1, Secp256r1 } from '@web5/crypto'; +import { CryptoApi, computeJwkThumbprint, Ed25519, LocalKeyManager, Secp256k1, Secp256r1 } from '@web5/crypto'; import { AUTHORITATIVE_ANSWER, decode as dnsPacketDecode, encode as dnsPacketEncode } from '@dnsquery/dns-packet'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidMetadata, PortableDid } from './did-method.js'; @@ -384,7 +384,7 @@ const AlgorithmToKeyTypeMap = { * const did = await DidDht.create(); * * // DID Creation with a KMS - * const keyManager = new LocalKmsCrypto(); + * const keyManager = new LocalKeyManager(); * const did = await DidDht.create({ keyManager }); * * // DID Resolution @@ -452,7 +452,7 @@ export class DidDht extends DidMethod { * const did = await DidDht.create(); * * // DID Creation with a KMS - * const keyManager = new LocalKmsCrypto(); + * const keyManager = new LocalKeyManager(); * const did = await DidDht.create({ keyManager }); * ``` * @@ -463,7 +463,7 @@ export class DidDht extends DidMethod { * @returns A Promise resolving to a {@link Did} object representing the new DID. */ public static async create({ - keyManager = new LocalKmsCrypto(), + keyManager = new LocalKeyManager(), options = {} }: { keyManager?: TKms; @@ -593,16 +593,6 @@ export class DidDht extends DidMethod { * handles the inclusion of these keys in the DID Document and specified verification * relationships. * - * @param params - The parameters for the `fromKeys` operation. - * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to - * generate keys and sign data. If not given, a new - * {@link LocalKmsCrypto} instance will be created and used. - * @param params.verificationMethods - An array containing the verification method metadata and - * key material in JWK format. - * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. - * @throws An error if the `verificationMethods` array does not contain any keys, lacks an - * Identity Key, or any verification method is missing a public or private key. - * * @example * ```ts * // Example with an existing key in JWK format. @@ -613,9 +603,17 @@ export class DidDht extends DidMethod { * }]; * const did = await DidDht.fromKeys({ verificationMethods }); * ``` + * + * @param params - The parameters for the `fromKeys` operation. + * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to + * generate keys and sign data. If not given, a new + * {@link @web5/crypto#LocalKeyManager} instance will be created and used. + * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. + * @throws An error if the `verificationMethods` array does not contain any keys, lacks an + * Identity Key, or any verification method is missing a public or private key. */ public static async fromKeys({ - keyManager = new LocalKmsCrypto(), + keyManager = new LocalKeyManager(), uri, verificationMethods, options = {} @@ -736,7 +734,7 @@ export class DidDht extends DidMethod { * ``` * * @param didUri - The DID to be resolved. - * @param _options - Optional parameters for resolving the DID. Unused by this DID method. + * @param options - Optional parameters for resolving the DID. Unused by this DID method. * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. */ public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise { @@ -782,7 +780,6 @@ export class DidDht extends DidMethod { * * @param params - The parameters for the DID object creation. * @param params.keyManager - The Key Management System to manage keys. - * @param params.verificationMethods - An array of verification methods containing public keys. * @param params.options - Additional options for DID creation. * @returns A Promise resolving to a `Did` object. */ diff --git a/packages/dids/src/methods/did-ion.ts b/packages/dids/src/methods/did-ion.ts index 1403d0aa8..16a0e78da 100644 --- a/packages/dids/src/methods/did-ion.ts +++ b/packages/dids/src/methods/did-ion.ts @@ -1,8 +1,14 @@ -import type { KeyIdentifier } from '@web5/crypto'; +import type { KeyIdentifier, PrivateKeyJwk, PublicKeyJwk } from '@web5/crypto'; import type { PortableDid } from '../methods/did-method.js'; export interface DidIonKeySet extends PortableDid { recoveryKeyUri?: KeyIdentifier; updateKeyUri?: KeyIdentifier; +} + +/** Object representing an asymmetric key pair in JWK format. */ +export type JwkKeyPair = { + publicKeyJwk: PublicKeyJwk; + privateKeyJwk: PrivateKeyJwk; } \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index a450e3f9a..4a460da04 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -9,7 +9,7 @@ import type { } from '@web5/crypto'; import { Convert } from '@web5/common'; -import { LocalKmsCrypto } from '@web5/crypto'; +import { LocalKeyManager } from '@web5/crypto'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidMetadata, PortableDid } from './did-method.js'; import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; @@ -54,7 +54,7 @@ export interface DidJwkCreateOptions extends DidCreateOptions { */ algorithm?: TKms extends CryptoApi ? InferKeyGeneratorAlgorithm - : InferKeyGeneratorAlgorithm; + : InferKeyGeneratorAlgorithm; /** * Alternatively, specify the algorithm to be used for key generation of the single verification @@ -92,7 +92,7 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * const did = await DidJwk.create(); * * // DID Creation with a KMS - * const keyManager = new LocalKmsCrypto(); + * const keyManager = new LocalKeyManager(); * const did = await DidJwk.create({ keyManager }); * * // DID Resolution @@ -156,7 +156,7 @@ export class DidJwk extends DidMethod { * const did = await DidJwk.create(); * * // DID Creation with a KMS - * const keyManager = new LocalKmsCrypto(); + * const keyManager = new LocalKeyManager(); * const did = await DidJwk.create({ keyManager }); * ``` * @@ -167,7 +167,7 @@ export class DidJwk extends DidMethod { * @returns A Promise resolving to a {@link Did} object representing the new DID. */ public static async create({ - keyManager = new LocalKmsCrypto(), + keyManager = new LocalKeyManager(), options = {} }: { keyManager?: TKms; @@ -292,13 +292,12 @@ export class DidJwk extends DidMethod { * @param params - The parameters for the `fromKeys` operation. * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to * generate keys and sign data. If not given, a new - * {@link LocalKmsCrypto} instance will be created and used. - * @param params.verificationMethods - An array containing the key material in JWK format. + * {@link @web5/crypto#LocalKeyManager} instance will be created and used. * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. * @throws An error if the `verificationMethods` array does not contain exactly one entry. */ public static async fromKeys({ - keyManager = new LocalKmsCrypto(), + keyManager = new LocalKeyManager(), verificationMethods }: { keyManager?: CryptoApi & KeyImporterExporter; diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index 58efe0df5..f677cd306 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -5,7 +5,7 @@ import { Jose, Ed25519, utils as cryptoUtils, - LocalKmsCrypto, + LocalKeyManager, } from '@web5/crypto'; import type { Did, DidCreateOptions, DidCreateVerificationMethod, PortableDid } from './did-method.js'; @@ -53,7 +53,7 @@ export interface DidKeyCreateOptions extends DidCreateOptions { */ algorithm?: TKms extends CryptoApi ? InferKeyGeneratorAlgorithm - : InferKeyGeneratorAlgorithm; + : InferKeyGeneratorAlgorithm; /** * Optionally enable encryption key derivation during DID creation. @@ -163,7 +163,7 @@ export class DidKey extends DidMethod { * are mutually exclusive. */ public static async create({ - keyManager = new LocalKmsCrypto(), + keyManager = new LocalKeyManager(), options = {} }: { keyManager?: TKms; diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index c3d213888..00a27e374 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -2,7 +2,7 @@ import type { Jwk, Signer, CryptoApi, - LocalKmsCrypto, + LocalKeyManager, EnclosedSignParams, EnclosedVerifyParams, InferKeyGeneratorAlgorithm, @@ -89,7 +89,7 @@ export interface DidCreateVerificationMethod extends Pick - : InferKeyGeneratorAlgorithm; + : InferKeyGeneratorAlgorithm; /** * Optionally specify the purposes for which a verification method is intended to be used in a DID @@ -354,9 +354,9 @@ export class DidMethod { * verification method. If not given, each DID method implementation will select a default * verification method from the DID Document. * - * @param params - The parameters for the `getSigningMethod` operation. - * @param params.didDocument - DID Document to get the verification method from. - * @param params.methodId - ID of the verification method to use for signing. + * @param _params - The parameters for the `getSigningMethod` operation. + * @param _params.didDocument - DID Document to get the verification method from. + * @param _params.methodId - ID of the verification method to use for signing. * @returns Verification method to use for signing. */ public static async getSigningMethod(_params: { diff --git a/packages/dids/src/types/did-core.ts b/packages/dids/src/types/did-core.ts index 5e68965ed..4a4f2b97f 100644 --- a/packages/dids/src/types/did-core.ts +++ b/packages/dids/src/types/did-core.ts @@ -551,7 +551,7 @@ export enum DidVerificationRelationship { * Credentials. This relationship is typically used when the DID subject is the issuer of a * credential. * - * @see {@link hthttps://www.w3.org/TR/did-core/#assertion | DID Core Specification, § Assertion} + * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, § Assertion} */ assertionMethod = 'assertionMethod', diff --git a/packages/dids/tests/methods/did-dht.spec.ts b/packages/dids/tests/methods/did-dht.spec.ts index de610a7b2..3894a465a 100644 --- a/packages/dids/tests/methods/did-dht.spec.ts +++ b/packages/dids/tests/methods/did-dht.spec.ts @@ -3,7 +3,7 @@ import type { Jwk } from '@web5/crypto'; import sinon from 'sinon'; import { expect } from 'chai'; import { Convert } from '@web5/common'; -import { LocalKmsCrypto } from '@web5/crypto'; +import { LocalKeyManager } from '@web5/crypto'; import type { DidResolutionResult } from '../../src/index.js'; import type { PortableDid } from '../../src/methods/did-method.js'; @@ -403,11 +403,11 @@ describe('DidDht', () => { describe('fromKeyManager()', () => { let didUri: string; - let keyManager: LocalKmsCrypto; + let keyManager: LocalKeyManager; let privateKey: Jwk; before(() => { - keyManager = new LocalKmsCrypto(); + keyManager = new LocalKeyManager(); }); beforeEach(() => { @@ -534,7 +534,7 @@ describe('DidDht', () => { }); it('returns a DID with a getSigner function that can sign and verify data', async () => { - const keyManager = new LocalKmsCrypto(); + const keyManager = new LocalKeyManager(); // Create a DID to use for the test. const testDid = await DidDht.create({ keyManager }); @@ -560,7 +560,7 @@ describe('DidDht', () => { }); it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { - const keyManager = new LocalKmsCrypto(); + const keyManager = new LocalKeyManager(); // Create a DID to use for the test. const testDid = await DidDht.create({ keyManager }); diff --git a/packages/dids/tests/methods/did-jwk.spec.ts b/packages/dids/tests/methods/did-jwk.spec.ts index 47f12c5b9..676f425a8 100644 --- a/packages/dids/tests/methods/did-jwk.spec.ts +++ b/packages/dids/tests/methods/did-jwk.spec.ts @@ -3,7 +3,7 @@ import type { UnwrapPromise } from '@web5/common'; import sinon from 'sinon'; import { expect } from 'chai'; -import { LocalKmsCrypto } from '@web5/crypto'; +import { LocalKeyManager } from '@web5/crypto'; import type { DidDocument } from '../../src/types/did-core.js'; import type { PortableDid, PortableDidVerificationMethod } from '../../src/methods/did-method.js'; @@ -13,10 +13,10 @@ import { DidJwk } from '../../src/methods/did-jwk.js'; import DidJwkResolveTestVector from '../../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; describe('DidJwk', () => { - let keyManager: LocalKmsCrypto; + let keyManager: LocalKeyManager; before(() => { - keyManager = new LocalKmsCrypto(); + keyManager = new LocalKeyManager(); }); describe('create()', () => { @@ -132,11 +132,11 @@ describe('DidJwk', () => { describe('fromKeyManager()', () => { let didUri: string; - let keyManager: LocalKmsCrypto; + let keyManager: LocalKeyManager; let privateKey: Jwk; before(() => { - keyManager = new LocalKmsCrypto(); + keyManager = new LocalKeyManager(); }); beforeEach(() => { @@ -393,7 +393,7 @@ describe('DidJwk', () => { portableDid.verificationMethods[0].publicKeyJwk!.use = 'sig'; // Import the private key into a key manager. - const keyManager = new LocalKmsCrypto(); + const keyManager = new LocalKeyManager(); await keyManager.importKey({ key: portableDid.verificationMethods![0].privateKeyJwk! }); // Create the DID using the key set. diff --git a/packages/dids/tests/methods/did-method.spec.ts b/packages/dids/tests/methods/did-method.spec.ts index 3733db1b0..c7b688302 100644 --- a/packages/dids/tests/methods/did-method.spec.ts +++ b/packages/dids/tests/methods/did-method.spec.ts @@ -2,7 +2,7 @@ import type { CryptoApi, Jwk } from '@web5/crypto'; import sinon from 'sinon'; import { expect } from 'chai'; -import { LocalKmsCrypto } from '@web5/crypto'; +import { LocalKeyManager } from '@web5/crypto'; import type { Did } from '../../src/methods/did-method.js'; import type { DidDocument, DidVerificationMethod } from '../../src/types/did-core.js'; @@ -21,10 +21,10 @@ class DidTest extends DidMethod { } describe('DidMethod', () => { - let keyManager: LocalKmsCrypto; + let keyManager: LocalKeyManager; before(() => { - keyManager = new LocalKmsCrypto(); + keyManager = new LocalKeyManager(); }); describe('getSigner()', () => { From b7b8d79cb75321021e4ad4dbe6d65111e248d131 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sat, 27 Jan 2024 08:28:50 -0500 Subject: [PATCH 26/39] Fix Ed25519.validatePublicKey method signature Signed-off-by: Frank Hinek --- packages/crypto/src/primitives/ed25519.ts | 18 +++++++++--------- .../crypto/tests/primitives/ed25519.spec.ts | 14 ++++++-------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/packages/crypto/src/primitives/ed25519.ts b/packages/crypto/src/primitives/ed25519.ts index ee1f804cf..22b0aa97f 100644 --- a/packages/crypto/src/primitives/ed25519.ts +++ b/packages/crypto/src/primitives/ed25519.ts @@ -52,7 +52,7 @@ import { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/j * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey }); * * // Key Validation - * const isPublicKeyValid = Ed25519.validatePublicKey({ publicKeyBytes }); + * const isPublicKeyValid = await Ed25519.validatePublicKey({ publicKeyBytes }); * ``` */ export class Ed25519 { @@ -262,7 +262,7 @@ export class Ed25519 { const ed25519PublicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey }); // Verify Edwards public key is valid. - const isValid = Ed25519.validatePublicKey({ publicKey: ed25519PublicKeyBytes }); + const isValid = await Ed25519.validatePublicKey({ publicKeyBytes: ed25519PublicKeyBytes }); if (!isValid) { throw new Error('Ed25519: Invalid public key.'); } @@ -481,23 +481,23 @@ export class Ed25519 { * * @example * ```ts - * const publicKey = new Uint8Array([...]); // A public key in byte format - * const isValid = Ed25519.validatePublicKey({ publicKey }); + * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format + * const isValid = await Ed25519.validatePublicKey({ publicKeyBytes }); * console.log(isValid); // true if the key is valid on the Edwards curve, false otherwise * ``` * * @param params - The parameters for the public key validation. - * @param params.publicKey - The public key to validate, represented as a Uint8Array. + * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array. * * @returns A Promise that resolves to a boolean indicating whether the key * corresponds to a valid point on the Edwards curve. */ - public static validatePublicKey({ publicKey }: { - publicKey: Uint8Array; - }): boolean { + public static async validatePublicKey({ publicKeyBytes }: { + publicKeyBytes: Uint8Array; + }): Promise { try { // Decode Edwards points from key bytes. - const point = ed25519.ExtendedPoint.fromHex(publicKey); + const point = ed25519.ExtendedPoint.fromHex(publicKeyBytes); // Check if points are on the Twisted Edwards curve. point.assertValidity(); diff --git a/packages/crypto/tests/primitives/ed25519.spec.ts b/packages/crypto/tests/primitives/ed25519.spec.ts index 8cf2efccf..efab724c8 100644 --- a/packages/crypto/tests/primitives/ed25519.spec.ts +++ b/packages/crypto/tests/primitives/ed25519.spec.ts @@ -337,22 +337,20 @@ describe('Ed25519', () => { describe('validatePublicKey()', () => { it('returns true for valid public keys', async () => { - const publicKey = Convert.hex('a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c').toUint8Array(); - const isValid = await Ed25519.validatePublicKey({ publicKey }); + const publicKeyBytes = Convert.hex('a12c2beb77265f2aac953b5009349d94155a03ada416aad451319480e983ca4c').toUint8Array(); + const isValid = await Ed25519.validatePublicKey({ publicKeyBytes }); expect(isValid).to.be.true; }); it('returns false for invalid public keys', async () => { - const key = Convert.hex('02fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f').toUint8Array(); - // @ts-expect-error because validatePublicKey() is a private method. - const isValid = await Ed25519.validatePublicKey({ key }); + const publicKeyBytes = Convert.hex('02fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f').toUint8Array(); + const isValid = await Ed25519.validatePublicKey({ publicKeyBytes }); expect(isValid).to.be.false; }); it('returns false if a private key is given', async () => { - const key = Convert.hex('0a23a20072891237aa0864b5765139514908787878cd77135a0059881d313f00').toUint8Array(); - // @ts-expect-error because validatePublicKey() is a private method. - const isValid = await Ed25519.validatePublicKey({ key }); + const publicKeyBytes = Convert.hex('0a23a20072891237aa0864b5765139514908787878cd77135a0059881d313f00').toUint8Array(); + const isValid = await Ed25519.validatePublicKey({ publicKeyBytes }); expect(isValid).to.be.false; }); }); From 11b69edf8d1e685b6f5ceb8d674fe3a10b8f234d Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Sat, 27 Jan 2024 09:19:24 -0500 Subject: [PATCH 27/39] Refactor of DID Key Signed-off-by: Frank Hinek --- packages/crypto/src/index.ts | 1 - packages/crypto/src/jose.ts | 205 ---- packages/crypto/src/utils.ts | 63 -- .../tests/fixtures/test-vectors/jose.ts | 135 --- .../crypto/tests/fixtures/test-vectors/jwk.ts | 47 + packages/crypto/tests/jose.spec.ts | 168 --- packages/crypto/tests/jose/jwk.spec.ts | 2 +- packages/crypto/tests/utils.spec.ts | 92 -- packages/dids/src/methods/did-dht.ts | 6 +- packages/dids/src/methods/did-jwk.ts | 5 +- packages/dids/src/methods/did-key.ts | 994 +++++++++++++++++- packages/dids/tests/methods/did-key.spec.ts | 468 +++++++++ 12 files changed, 1494 insertions(+), 692 deletions(-) delete mode 100644 packages/crypto/src/jose.ts delete mode 100644 packages/crypto/tests/fixtures/test-vectors/jose.ts create mode 100644 packages/crypto/tests/fixtures/test-vectors/jwk.ts delete mode 100644 packages/crypto/tests/jose.spec.ts create mode 100644 packages/dids/tests/methods/did-key.spec.ts diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts index 59a2deeb7..2e272861b 100644 --- a/packages/crypto/src/index.ts +++ b/packages/crypto/src/index.ts @@ -1,4 +1,3 @@ -export * from './jose.js'; export * from './local-key-manager.js'; export * as utils from './utils.js'; diff --git a/packages/crypto/src/jose.ts b/packages/crypto/src/jose.ts deleted file mode 100644 index c9e32d712..000000000 --- a/packages/crypto/src/jose.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { Multicodec, MulticodecCode, MulticodecDefinition } from '@web5/common'; - -import type { Jwk } from './jose/jwk.js'; - -import { keyToMultibaseId } from './utils.js'; -import { X25519 } from './primitives/x25519.js'; -import { Ed25519 } from './primitives/ed25519.js'; -import { Secp256k1 } from './primitives/secp256k1.js'; - -/** - * A mapping from multicodec names to their corresponding JOSE (JSON Object Signing and Encryption) - * representations. This mapping facilitates the conversion of multicodec key formats to - * JWK (JSON Web Key) formats. - * - * @example - * ```ts - * const joseKey = multicodecToJoseMapping['ed25519-pub']; - * // Returns a partial JWK for an Ed25519 public key - * ``` - * - * @remarks - * The keys of this object are multicodec names, such as 'ed25519-pub', 'ed25519-priv', etc. - * The values are objects representing the corresponding JWK properties for that key type. - */ -const multicodecToJoseMapping: { [key: string]: Jwk } = { - 'ed25519-pub' : { crv: 'Ed25519', kty: 'OKP', x: '' }, - 'ed25519-priv' : { crv: 'Ed25519', kty: 'OKP', x: '', d: '' }, - 'secp256k1-pub' : { crv: 'secp256k1', kty: 'EC', x: '', y: ''}, - 'secp256k1-priv' : { crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' }, - 'x25519-pub' : { crv: 'X25519', kty: 'OKP', x: '' }, - 'x25519-priv' : { crv: 'X25519', kty: 'OKP', x: '', d: '' }, -}; - -/** - * A mapping from JOSE property descriptors to multicodec names. - * This mapping is used to convert keys in JWK (JSON Web Key) format to multicodec format. - * - * @example - * ```ts - * const multicodecName = joseToMulticodecMapping['Ed25519:public']; - * // Returns 'ed25519-pub', the multicodec name for an Ed25519 public key - * ``` - * - * @remarks - * The keys of this object are strings that describe the JOSE key type and usage, - * such as 'Ed25519:public', 'Ed25519:private', etc. - * The values are the corresponding multicodec names used to represent these key types. - */ -const joseToMulticodecMapping: { [key: string]: string } = { - 'Ed25519:public' : 'ed25519-pub', - 'Ed25519:private' : 'ed25519-priv', - 'secp256k1:public' : 'secp256k1-pub', - 'secp256k1:private' : 'secp256k1-priv', - 'X25519:public' : 'x25519-pub', - 'X25519:private' : 'x25519-priv', -}; - -/** - * The `Jose` class provides utility functions for converting between JOSE (JSON Object Signing and - * Encryption) formats and multicodec representations. - */ -export class Jose { - /** - * Converts a JWK (JSON Web Key) to a Multicodec code and name. - * - * @example - * ```ts - * const jwk: Jwk = { crv: 'Ed25519', kty: 'OKP', x: '...' }; - * const { code, name } = await Jose.jwkToMulticodec({ jwk }); - * ``` - * - * @param params - The parameters for the conversion. - * @param params.jwk - The JSON Web Key to be converted. - * @returns A promise that resolves to a Multicodec definition. - */ - public static async jwkToMulticodec({ jwk }: { - jwk: Jwk - }): Promise> { - const params: string[] = []; - - if (jwk.crv) { - params.push(jwk.crv); - if (jwk.d) { - params.push('private'); - } else { - params.push('public'); - } - } - - const lookupKey = params.join(':'); - const name = joseToMulticodecMapping[lookupKey]; - - if (name === undefined) { - throw new Error(`Unsupported JOSE to Multicodec conversion: '${lookupKey}'`); - } - - const code = Multicodec.getCodeFromName({ name }); - - return { code, name }; - } - - /** - * Converts a public key in JWK (JSON Web Key) format to a multibase identifier. - * - * @remarks - * Note: All secp public keys are converted to compressed point encoding - * before the multibase identifier is computed. - * - * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}: - * Public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1, - * secp256k1r1, secp384r1, etc.) are always represented with compressed point - * encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.). - * - * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}: - * "As a compressed point encoding representation is not defined for JWK - * elliptic curve points, the uncompressed point encoding defined there - * MUST be used. The x and y values represented MUST both be exactly - * 256 bits, with any leading zeros preserved." - * - * @example - * ```ts - * const publicKey = { crv: 'Ed25519', kty: 'OKP', x: '...' }; - * const multibaseId = await Jose.publicKeyToMultibaseId({ publicKey }); - * ``` - * - * @param params - The parameters for the conversion. - * @param params.publicKey - The public key in JWK format. - * @returns A promise that resolves to the multibase identifier. - */ - public static async publicKeyToMultibaseId({ publicKey }: { - publicKey: Jwk - }): Promise { - if (!('crv' in publicKey)) { - throw new Error(`Jose: Unsupported public key type: ${publicKey.kty}`); - } - - let publicKeyBytes: Uint8Array; - - switch (publicKey.crv) { - case 'Ed25519': { - publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey }); - break; - } - - case 'secp256k1': { - publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey }); - // Convert secp256k1 public keys to compressed format. - publicKeyBytes = await Secp256k1.compressPublicKey({ publicKeyBytes }); - break; - } - - case 'X25519': { - publicKeyBytes = await X25519.publicKeyToBytes({ publicKey }); - break; - } - - default: { - throw new Error(`Jose: Unsupported public key curve: ${publicKey.crv}`); - } - } - - // Convert the JSON Web Key (JWK) parameters to a Multicodec name. - const { name: multicodecName } = await Jose.jwkToMulticodec({ jwk: publicKey }); - - // Compute the multibase identifier based on the provided key. - const multibaseId = keyToMultibaseId({ key: publicKeyBytes, multicodecName }); - - return multibaseId; - } - - /** - * Converts a Multicodec code or name to parial JWK (JSON Web Key). - * - * @example - * ```ts - * const partialJwk = await Jose.multicodecToJose({ name: 'ed25519-pub' }); - * ``` - * - * @param params - The parameters for the conversion. - * @param params.code - Optional Multicodec code to convert. - * @param params.name - Optional Multicodec name to convert. - * @returns A promise that resolves to a JOSE format key. - */ - public static async multicodecToJose({ code, name }: { - code?: MulticodecCode, - name?: string - }): Promise { - // Either code or name must be specified, but not both. - if (!(name ? !code : code)) { - throw new Error(`Either 'name' or 'code' must be defined, but not both.`); - } - - // If name is undefined, lookup by code. - name = (name === undefined ) ? Multicodec.getNameFromCode({ code: code! }) : name; - - const lookupKey = name; - const jose = multicodecToJoseMapping[lookupKey]; - - if (jose === undefined) { - throw new Error(`Unsupported Multicodec to JOSE conversion`); - } - - return { ...jose }; - } -} \ No newline at end of file diff --git a/packages/crypto/src/utils.ts b/packages/crypto/src/utils.ts index fc3fcdeee..3dce127de 100644 --- a/packages/crypto/src/utils.ts +++ b/packages/crypto/src/utils.ts @@ -1,5 +1,4 @@ import { crypto } from '@noble/hashes/crypto'; -import { Convert, Multicodec } from '@web5/common'; import { randomBytes as nobleRandomBytes } from '@noble/hashes/utils'; /** @@ -64,39 +63,6 @@ export function checkValidProperty(params: { } } -/** - * Converts a cryptographic key to a multibase identifier. - * - * @remarks - * This method provides a way to represent a cryptographic key as a multibase identifier. - * It takes a `Uint8Array` representing the key, and either the multicodec code or multicodec name - * as input. The method first adds the multicodec prefix to the key, then encodes it into Base58 - * format. Finally, it converts the Base58 encoded key into a multibase identifier. - * - * @example - * ```ts - * const key = new Uint8Array([...]); // Cryptographic key as Uint8Array - * const multibaseId = keyToMultibaseId({ key, multicodecName: 'ed25519-pub' }); - * ``` - * - * @param params - The parameters for the conversion. - * @param params.key - The cryptographic key as a Uint8Array. - * @param params.multicodecCode - Optional multicodec code to prefix the key with. - * @param params.multicodecName - Optional multicodec name corresponding to the code. - * @returns The multibase identifier as a string. - */ -export function keyToMultibaseId({ key, multicodecCode, multicodecName }: { - key: Uint8Array, - multicodecCode?: number, - multicodecName?: string -}): string { - const prefixedKey = Multicodec.addPrefix({ code: multicodecCode, data: key, name: multicodecName }); - const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc(); - const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase(); - - return multibaseKeyId; -} - /** * Checks if the Web Crypto API is supported in the current runtime environment. * @@ -132,35 +98,6 @@ export function isWebCryptoSupported(): boolean { } } -/** - * Converts a multibase identifier to a cryptographic key. - * - * @remarks - * This function decodes a multibase identifier back into a cryptographic key. It first decodes the - * identifier from multibase format into Base58 format, and then converts it into a `Uint8Array`. - * Afterward, it removes the multicodec prefix, extracting the raw key data along with the - * multicodec code and name. - * - * @example - * ```ts - * const multibaseKeyId = '...'; // Multibase identifier of the key - * const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId }); - * ``` - * - * @param params - The parameters for the conversion. - * @param params.multibaseKeyId - The multibase identifier string of the key. - * @returns An object containing the key as a `Uint8Array` and its multicodec code and name. - */ -export function multibaseIdToKey({ multibaseKeyId }: { - multibaseKeyId: string -}): { key: Uint8Array, multicodecCode: number, multicodecName: string } { - const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc(); - const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array(); - const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey }); - - return { key: data, multicodecCode: code, multicodecName: name }; -} - /** * Generates secure pseudorandom values of the specified length using * `crypto.getRandomValues`, which defers to the operating system. diff --git a/packages/crypto/tests/fixtures/test-vectors/jose.ts b/packages/crypto/tests/fixtures/test-vectors/jose.ts deleted file mode 100644 index 131f589de..000000000 --- a/packages/crypto/tests/fixtures/test-vectors/jose.ts +++ /dev/null @@ -1,135 +0,0 @@ -export const joseToMulticodecTestVectors = [ - { - output : { code: 237, name: 'ed25519-pub' }, - input : { - alg : 'EdDSA', - crv : 'Ed25519', - kty : 'OKP', - x : 'lSPJrpccK4uv3f7IUCVYDz5qcUhSjiPHFyRcr5Z5VYg', - }, - }, - { - output : { code: 4864, name: 'ed25519-priv' }, - input : { - d : 'fbGqifMN3h7tjLMd2gi5dggG-A2s7paNkBbdFAyGZyU', - alg : 'EdDSA', - crv : 'Ed25519', - kty : 'OKP', - x : 'lSPJrpccK4uv3f7IUCVYDz5qcUhSjiPHFyRcr5Z5VYg', - }, - }, - { - output : { code: 231, name: 'secp256k1-pub' }, - input : { - alg : 'ES256K', - crv : 'secp256k1', - kty : 'EC', - x : 'hEpfKD1BpSyoP9CYULUxD8JoTGB6Y8NNxe2cX0p_bQY', - y : 'SNP8nyU4iDWeu7nfcjpJ04htOgF8u94pFUzBYiPw75g', - }, - }, - { - output : { code: 4865, name: 'secp256k1-priv' }, - input : { - d : 'KvnTJGCOHzsUHEaIj1gy5uOE22K-3Shpl6NYLG7TRGQ', - alg : 'ES256K', - crv : 'secp256k1', - kty : 'EC', - x : 'hEpfKD1BpSyoP9CYULUxD8JoTGB6Y8NNxe2cX0p_bQY', - y : 'SNP8nyU4iDWeu7nfcjpJ04htOgF8u94pFUzBYiPw75g', - }, - }, - { - output : { code: 236, name: 'x25519-pub' }, - input : { - crv : 'X25519', - kty : 'OKP', - x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', - }, - }, - { - output : { code: 4866, name: 'x25519-priv' }, - input : { - d : 'MJf4AAqcwfBC68Wkb8nRbmnIdHb07zYM7vU_TAOgmtM', - crv : 'X25519', - kty : 'OKP', - x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', - }, - }, -]; - -export const jwkToThumbprintTestVectors = [ - { - input: { - kty : 'RSA', - n : '0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw', - e : 'AQAB', - alg : 'RS256', - kid : '2011-04-29', - }, - output: 'NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs', - }, - { - input: { - alg : 'A128CBC', - kty : 'oct', - k : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', - }, - output: 'legaImFEtXYAJYZ8_ZGbZnx-bhc_9nN53pxGpOum3Io', - }, - { - input: { - alg : 'ES256K', - crv : 'secp256k1', - kty : 'EC', - x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', - y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', - }, - output: 'dwzDb6KNsqS3QMTqH0jfBHcoHJzYZBc5scB5n5VLe1E', - }, - { - input: { - crv : 'X25519', - kty : 'OKP', - x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', - }, - output: 'KCfBQ0EA2cWr1Kbt-mnlj8LQ9C2AJfcuEm8mtgOe7wQ', - }, - { - input: { - d : 'MJf4AAqcwfBC68Wkb8nRbmnIdHb07zYM7vU_TAOgmtM', - crv : 'X25519', - kty : 'OKP', - x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', - }, - output: 'lQN1EkHZz4VkAcVGD4gsc0JBcLwvkUprOxkiO4kpbbs', - }, -]; - -export const jwkToMultibaseIdTestVectors = [ - { - input: { - crv : 'secp256k1', - kty : 'EC', - x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', - y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', - }, - output: 'zQ3sheTFzDvGpXAc9AXtwGF3MW1CusKovnwM4pSsUamqKCyLB', - }, - { - input: { - crv : 'X25519', - kty : 'OKP', - x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', - }, - output: 'z6LSjQhGhqqYgrFsNFoZL9wzuKpS1xQ7YNE6fnLgSyW2hUt2', - }, - { - input: { - crv : 'Ed25519', - kty : 'OKP', - x : 'wwk7wOlocpOHDopgc0cZVCnl_7zFrp-JpvZe9vr5500' - }, - output: 'z6MksabiHWJ5wQqJGDzxw1EiV5zi6BE6QRENTnHBcKHSqLaQ', - }, -]; diff --git a/packages/crypto/tests/fixtures/test-vectors/jwk.ts b/packages/crypto/tests/fixtures/test-vectors/jwk.ts new file mode 100644 index 000000000..2f32a0937 --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/jwk.ts @@ -0,0 +1,47 @@ +export const jwkToThumbprintTestVectors = [ + { + input: { + kty : 'RSA', + n : '0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw', + e : 'AQAB', + alg : 'RS256', + kid : '2011-04-29', + }, + output: 'NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs', + }, + { + input: { + alg : 'A128CBC', + kty : 'oct', + k : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', + }, + output: 'legaImFEtXYAJYZ8_ZGbZnx-bhc_9nN53pxGpOum3Io', + }, + { + input: { + alg : 'ES256K', + crv : 'secp256k1', + kty : 'EC', + x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', + y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', + }, + output: 'dwzDb6KNsqS3QMTqH0jfBHcoHJzYZBc5scB5n5VLe1E', + }, + { + input: { + crv : 'X25519', + kty : 'OKP', + x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', + }, + output: 'KCfBQ0EA2cWr1Kbt-mnlj8LQ9C2AJfcuEm8mtgOe7wQ', + }, + { + input: { + d : 'MJf4AAqcwfBC68Wkb8nRbmnIdHb07zYM7vU_TAOgmtM', + crv : 'X25519', + kty : 'OKP', + x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', + }, + output: 'lQN1EkHZz4VkAcVGD4gsc0JBcLwvkUprOxkiO4kpbbs', + }, +]; \ No newline at end of file diff --git a/packages/crypto/tests/jose.spec.ts b/packages/crypto/tests/jose.spec.ts deleted file mode 100644 index 3bb2cc327..000000000 --- a/packages/crypto/tests/jose.spec.ts +++ /dev/null @@ -1,168 +0,0 @@ -import chai, { expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; -import { MulticodecCode, MulticodecDefinition } from '@web5/common'; - -import type { Jwk, PublicKeyJwk } from '../src/jose/jwk.js'; - -import { Jose } from '../src/jose.js'; -import { - joseToMulticodecTestVectors, - jwkToMultibaseIdTestVectors, -} from './fixtures/test-vectors/jose.js'; - -chai.use(chaiAsPromised); - -describe('Jose', () => { - describe('joseToMulticodec()', () => { - it('converts JOSE to Multicodec', async () => { - let multicoded: MulticodecDefinition; - for (const vector of joseToMulticodecTestVectors) { - multicoded = await Jose.jwkToMulticodec({ - jwk: vector.input as Jwk, - }); - expect(multicoded).to.deep.equal(vector.output); - } - }); - - it('throws an error if unsupported JOSE has been passed', async () => { - await expect( - // @ts-expect-error because parameters are intentionally omitted to trigger an error. - Jose.jwkToMulticodec({ jwk: { crv: '123' } }) - ).to.eventually.be.rejectedWith(Error, `Unsupported JOSE to Multicodec conversion: '123:public'`); - }); - }); - - describe('publicKeyToMultibaseId()', () => { - it('passes all test vectors', async () => { - let multibaseId: string; - - for (const vector of jwkToMultibaseIdTestVectors) { - multibaseId = await Jose.publicKeyToMultibaseId({ publicKey: vector.input as PublicKeyJwk}); - expect(multibaseId).to.equal(vector.output); - } - }); - - it('throws an error for an unsupported public key type', async () => { - await expect( - Jose.publicKeyToMultibaseId({ - publicKey: { - kty : 'RSA', - n : 'r0YDzIV4GPJ1wFb1Gftdd3C3VE6YeknVq1C7jGypq5WTTmX0yRDBqzL6mBR3_c-mKRuE5Z5VMGniA1lFnFmv8m0A2engKfALXHPJqoL6WzqN1SyjSM2aI6v8JVTj4H0RdYV9R4jxIB-zK5X-ZyL6CwHx-3dKZkCvZSEp8b-5I8c2Fz8E8Hl7qKkD_qEz6ZOmKVhJLGiEag1qUQYJv2TcRdiyZfwwVsV3nI3IcVfMCTjDZTw2jI0YHJgLi7-MkP4DO7OJ4D4AFtL-7CkZ7V2xG0piBz4b02_-ZGnBZ5zHJxGoUZnTY6HX4V9bPQI_ME8qCjFXf-TcwCfDFcwMm70L2Q', - e : 'AQAB', - alg : 'RS256' - } - }) - ).to.eventually.be.rejectedWith(Error, `Unsupported public key type`); - }); - - it('throws an error for an unsupported public key curve', async () => { - await expect( - Jose.publicKeyToMultibaseId({ - publicKey: { - kty : 'EC', - crv : 'P-256', - x : 'SVqB4JcUD6lsfvqMr-OKUNUphdNn64Eay60978ZlL74', - y : 'lf0u0pMj4lGAzZix5u4Cm5CMQIgMNpkwy163wtKYVKI' - } - }) - ).to.eventually.be.rejectedWith(Error, `Unsupported public key curve`); - }); - }); - - describe('multicodecToJose()', () => { - it('converts ed25519 public key multicodec to JWK', async () => { - const result = await Jose.multicodecToJose({ name: 'ed25519-pub' }); - expect(result).to.deep.equal({ - crv : 'Ed25519', - kty : 'OKP', - x : '' // x value would be populated with actual key material in real use - }); - }); - - it('converts ed25519 private key multicodec to JWK', async () => { - const result = await Jose.multicodecToJose({ name: 'ed25519-priv' }); - expect(result).to.deep.equal({ - crv : 'Ed25519', - kty : 'OKP', - x : '', // x value would be populated with actual key material in real use - d : '' // d value would be populated with actual key material in real use - }); - }); - - it('converts secp256k1 public key multicodec to JWK', async () => { - const result = await Jose.multicodecToJose({ name: 'secp256k1-pub' }); - expect(result).to.deep.equal({ - crv : 'secp256k1', - kty : 'EC', - x : '', // x value would be populated with actual key material in real use - y : '' // y value would be populated with actual key material in real use - }); - }); - - it('converts secp256k1 private key multicodec to JWK', async () => { - const result = await Jose.multicodecToJose({ name: 'secp256k1-priv' }); - expect(result).to.deep.equal({ - crv : 'secp256k1', - kty : 'EC', - x : '', // x value would be populated with actual key material in real use - y : '', // y value would be populated with actual key material in real use - d : '' // d value would be populated with actual key material in real use - }); - }); - - it('converts x25519 public key multicodec to JWK', async () => { - const result = await Jose.multicodecToJose({ name: 'x25519-pub' }); - expect(result).to.deep.equal({ - crv : 'X25519', - kty : 'OKP', - x : '' // x value would be populated with actual key material in real use - }); - }); - - it('converts x25519 private key multicodec to JWK', async () => { - const result = await Jose.multicodecToJose({ name: 'x25519-priv' }); - expect(result).to.deep.equal({ - crv : 'X25519', - kty : 'OKP', - x : '', // x value would be populated with actual key material in real use - d : '' // d value would be populated with actual key material in real use - }); - }); - - it('throws an error when name is undefined and code is not provided', async () => { - try { - await Jose.multicodecToJose({}); - expect.fail('Should have thrown an error for undefined name and code'); - } catch (e: any) { - expect(e.message).to.equal('Either \'name\' or \'code\' must be defined, but not both.'); - } - }); - - it('throws an error when both name and code are provided', async () => { - try { - await Jose.multicodecToJose({ name: 'ed25519-pub', code: 0xed }); - expect.fail('Should have thrown an error for both name and code being defined'); - } catch (e: any) { - expect(e.message).to.equal('Either \'name\' or \'code\' must be defined, but not both.'); - } - }); - - it('throws an error for unsupported multicodec name', async () => { - try { - await Jose.multicodecToJose({ name: 'unsupported-key-type' }); - expect.fail('Should have thrown an error for unsupported multicodec name'); - } catch (e: any) { - expect(e.message).to.include('Unsupported Multicodec to JOSE conversion'); - } - }); - - it('throws an error for unsupported multicodec code', async () => { - try { - await Jose.multicodecToJose({ code: 0x9999 }); - expect.fail('Should have thrown an error for unsupported multicodec code'); - } catch (e: any) { - expect(e.message).to.include('Unsupported multicodec'); - } - }); - }); -}); \ No newline at end of file diff --git a/packages/crypto/tests/jose/jwk.spec.ts b/packages/crypto/tests/jose/jwk.spec.ts index 83c147b43..d2f65edd8 100644 --- a/packages/crypto/tests/jose/jwk.spec.ts +++ b/packages/crypto/tests/jose/jwk.spec.ts @@ -13,7 +13,7 @@ import { isOkpPrivateJwk, computeJwkThumbprint, } from '../../src/jose/jwk.js'; -import { jwkToThumbprintTestVectors } from '../fixtures/test-vectors/jose.js'; +import { jwkToThumbprintTestVectors } from '../fixtures/test-vectors/jwk.js'; chai.use(chaiAsPromised); diff --git a/packages/crypto/tests/utils.spec.ts b/packages/crypto/tests/utils.spec.ts index cdc967c3c..2bdc3e555 100644 --- a/packages/crypto/tests/utils.spec.ts +++ b/packages/crypto/tests/utils.spec.ts @@ -4,8 +4,6 @@ import * as sinon from 'sinon'; import { randomUuid, randomBytes, - keyToMultibaseId, - multibaseIdToKey, checkValidProperty, isWebCryptoSupported, checkRequiredProperty, @@ -85,96 +83,6 @@ describe('Crypto Utils', () => { }); }); - describe('keyToMultibaseId()', () => { - it('returns a multibase encoded string', () => { - const input = { - key : new Uint8Array(32), - multicodecName : 'ed25519-pub', - }; - const encoded = keyToMultibaseId({ key: input.key, multicodecName: input.multicodecName }); - expect(encoded).to.be.a.string; - expect(encoded.substring(0, 1)).to.equal('z'); - expect(encoded.substring(1, 4)).to.equal('6Mk'); - }); - - it('passes test vectors', () => { - let input: { key: Uint8Array, multicodecName: string }; - let output: string; - let encoded: string; - - // Test Vector 1. - input = { - key : (new Uint8Array(32)).fill(0), - multicodecName : 'ed25519-pub', - }; - output = 'z6MkeTG3bFFSLYVU7VqhgZxqr6YzpaGrQtFMh1uvqGy1vDnP'; - encoded = keyToMultibaseId({ key: input.key, multicodecName: input.multicodecName }); - expect(encoded).to.equal(output); - - // Test Vector 2. - input = { - key : (new Uint8Array(32)).fill(1), - multicodecName : 'ed25519-pub', - }; - output = 'z6MkeXBLjYiSvqnhFb6D7sHm8yKm4jV45wwBFRaatf1cfZ76'; - encoded = keyToMultibaseId({ key: input.key, multicodecName: input.multicodecName }); - expect(encoded).to.equal(output); - - // Test Vector 3. - input = { - key : (new Uint8Array(32)).fill(9), - multicodecName : 'ed25519-pub', - }; - output = 'z6Mkf4XhsxSXfEAWNK6GcFu7TyVs21AfUTRjiguqMhNQeDgk'; - encoded = keyToMultibaseId({ key: input.key, multicodecName: input.multicodecName }); - expect(encoded).to.equal(output); - }); - }); - - describe('multibaseIdToKey()', () => { - it('converts secp256k1-pub multibase identifiers', () => { - const multibaseKeyId = 'zQ3shMrXA3Ah8h5asMM69USP8qRDnPaCLRV3nPmitAXVfWhgp'; - - const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId }); - - expect(key).to.exist; - expect(key).to.be.a('Uint8Array'); - expect(key).to.have.length(33); - expect(multicodecCode).to.exist; - expect(multicodecCode).to.equal(231); - expect(multicodecName).to.exist; - expect(multicodecName).to.equal('secp256k1-pub'); - }); - - it('converts ed25519-pub multibase identifiers', () => { - const multibaseKeyId = 'z6MkizSHspkM891CAnYZis1TJkB4fWwuyVjt4pV93rWPGYwW'; - - const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId }); - - expect(key).to.exist; - expect(key).to.be.a('Uint8Array'); - expect(key).to.have.length(32); - expect(multicodecCode).to.exist; - expect(multicodecCode).to.equal(237); - expect(multicodecName).to.exist; - expect(multicodecName).to.equal('ed25519-pub'); - }); - - it('converts x25519-pub multibase identifiers', () => { - const multibaseKeyId = 'z6LSfsF6tQA7j56WSzNPT4yrzZprzGEK8137DMeAVLgGBJEz'; - - const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId }); - - expect(key).to.exist; - expect(key).to.be.a('Uint8Array'); - expect(key).to.have.length(32); - expect(multicodecCode).to.exist; - expect(multicodecCode).to.equal(236); - expect(multicodecName).to.exist; - expect(multicodecName).to.equal('x25519-pub'); - }); - }); - describe('randomBytes()', () => { it('returns a Uint8Array of the specified length', () => { const length = 16; diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 60e30d33d..5aebdc951 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -783,11 +783,7 @@ export class DidDht extends DidMethod { * @param params.options - Additional options for DID creation. * @returns A Promise resolving to a `Did` object. */ - private static async fromPublicKeys({ - keyManager, - verificationMethods, - options - }: { + private static async fromPublicKeys({ keyManager, verificationMethods, options }: { keyManager: CryptoApi; options: DidDhtCreateOptions; } & PortableDid): Promise { diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 4a460da04..90b7104fc 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -444,10 +444,7 @@ export class DidJwk extends DidMethod { * @param params.publicKey - The public key of the DID in JWK format. * @returns A Promise resolving to a `Did` object representing the DID formed from the provided public key. */ - private static async fromPublicKey({ - keyManager, - publicKey - }: { + private static async fromPublicKey({ keyManager, publicKey }: { keyManager: CryptoApi; publicKey: Jwk; }): Promise { diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index f677cd306..8493e8507 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -1,22 +1,53 @@ -import type { CryptoApi, InferKeyGeneratorAlgorithm, Jwk } from '@web5/crypto'; +import type { MulticodecCode, MulticodecDefinition, RequireOnly } from '@web5/common'; +import type { AsymmetricKeyConverter, CryptoApi, InferKeyGeneratorAlgorithm, Jwk } from '@web5/crypto'; -import { universalTypeOf } from '@web5/common'; +import { Convert, Multicodec, universalTypeOf } from '@web5/common'; import { - Jose, + X25519, Ed25519, - utils as cryptoUtils, + Secp256k1, + Secp256r1, LocalKeyManager, } from '@web5/crypto'; -import type { Did, DidCreateOptions, DidCreateVerificationMethod, PortableDid } from './did-method.js'; +import type { Did, DidCreateOptions, DidCreateVerificationMethod, DidMetadata, PortableDid } from './did-method.js'; import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js'; +import { DidUri } from '../did-uri.js'; import { DidMethod } from './did-method.js'; +import { DidError, DidErrorCode } from '../did-error.js'; import { getVerificationMethodTypes } from '../utils.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../resolver/did-resolver.js'; +/** + * Represents a cryptographic key with associated multicodec metadata. + * + * The `KeyWithMulticodec` type encapsulates a cryptographic key along with optional multicodec + * information. It is primarily used in functions that convert between cryptographic keys and their + * string representations, ensuring that the key's format and encoding are preserved and understood + * across different systems and applications. + */ +export type KeyWithMulticodec = { + /** + * A `Uint8Array` representing the raw bytes of the cryptographic key. This is the primary data of + * the type and is essential for cryptographic operations. + */ + keyBytes: Uint8Array, + /** + * An optional number representing the multicodec code. This code uniquely identifies the encoding + * format or protocol associated with the key. The presence of this code is crucial for decoding + * the key correctly in different contexts. + */ + multicodecCode?: number, - + /** + * An optional string representing the human-readable name of the multicodec. This name provides + * an easier way to identify the encoding format or protocol of the key, especially when the + * numerical code is not immediately recognizable. + */ + multicodecName?: string +}; /** * Defines the set of options available when creating a new Decentralized Identifier (DID) with the @@ -55,6 +86,15 @@ export interface DidKeyCreateOptions extends DidCreateOptions { ? InferKeyGeneratorAlgorithm : InferKeyGeneratorAlgorithm; + /** + * Optionally specify an array of JSON-LD context links for the @context property of the DID + * document. + * + * The @context property provides a JSON-LD processor with the information necessary to interpret + * the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'. + */ + defaultContext?: string; + /** * Optionally enable encryption key derivation during DID creation. * @@ -72,10 +112,20 @@ export interface DidKeyCreateOptions extends DidCreateOptions { */ enableEncryptionKeyDerivation?: boolean; + /** + * Optionally enable experimental public key types during DID creation. + * By default, this option is set to `false`, which means experimental public key types are not + * supported. + * + * Note: This implementation of the DID Key method does not support any experimental public key + * types. + */ + enableExperimentalPublicKeyTypes?: boolean; + /** * Optionally specify the format of the public key to be used for DID creation. */ - publicKeyFormat?: keyof typeof DidKey.VERIFICATION_METHOD_TYPES; + publicKeyFormat?: keyof typeof DidKeyVerificationMethodType; /** * Alternatively, specify the algorithm to be used for key generation of the single verification @@ -84,6 +134,61 @@ export interface DidKeyCreateOptions extends DidCreateOptions { verificationMethods?: [DidCreateVerificationMethod]; } +/** + * Enumerates the types of keys that can be used in a DID DHT document. + * + * The DID DHT method supports various cryptographic key types. These key types are essential for + * the creation and management of DIDs and their associated cryptographic operations like signing + * and encryption. The registered key types are published in the DID DHT Registry and each is + * assigned a unique numerical value for use by client and gateway implementations. + * + * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}. + */ +export enum DidKeyRegisteredKeyType { + /** + * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature + * Algorithm) and Curve25519. + */ + Ed25519 = 'Ed25519', + + /** + * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized + * systems. + */ + secp256k1 = 'secp256k1', + + /** + * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations + * and is widely supported in various cryptographic libraries and standards. + */ + secp256r1 = 'secp256r1', + + /** + * X25519: A Diffie-Hellman key exchange algorithm using Curve25519. + */ + X25519 = 'X25519' +} + +export const DidKeyVerificationMethodType: Record = { + Ed25519VerificationKey2020 : 'https://w3id.org/security/suites/ed25519-2020/v1', + JsonWebKey2020 : 'https://w3id.org/security/suites/jws-2020/v1', + X25519KeyAgreementKey2020 : 'https://w3id.org/security/suites/x25519-2020/v1', +}; + +/** + * Private helper that maps algorithm identifiers to their corresponding DID Key + * {@link DidKeyRegisteredKeyType | registered key type}. + */ +const AlgorithmToKeyTypeMap = { + Ed25519 : DidKeyRegisteredKeyType.Ed25519, + ES256K : DidKeyRegisteredKeyType.secp256k1, + ES256 : DidKeyRegisteredKeyType.secp256r1, + 'P-256' : DidKeyRegisteredKeyType.secp256r1, + secp256k1 : DidKeyRegisteredKeyType.secp256k1, + secp256r1 : DidKeyRegisteredKeyType.secp256r1, + X25519 : DidKeyRegisteredKeyType.X25519 +} as const; + /** * The `DidKey` class provides an implementation of the 'did:key' DID method. * @@ -126,12 +231,6 @@ export class DidKey extends DidMethod { */ public static methodName = 'key'; - public static readonly VERIFICATION_METHOD_TYPES = { - 'Ed25519VerificationKey2020' : 'https://w3id.org/security/suites/ed25519-2020/v1', - 'JsonWebKey2020' : 'https://w3id.org/security/suites/jws-2020/v1', - 'X25519KeyAgreementKey2020' : 'https://w3id.org/security/suites/x25519-2020/v1', - } as const; - /** * Creates a new DID using the `did:key` method formed from either a newly generated key or an * existing key set. @@ -173,44 +272,903 @@ export class DidKey extends DidMethod { throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`); } - let { - // Default to not deriving an encryption key. + // Default to Ed25519 key generation if an algorithm is not given. + const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519'; + + // Generate a new key using the specified `algorithm`. + const keyUri = await keyManager.generateKey({ algorithm }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Create the DID object from the generated key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidKey.fromPublicKey({ keyManager, publicKey, options }); + + return did; + } + + /** + * Given the W3C DID Document of a `did:key` DID, return the verification method that will be used + * for signing messages and credentials. With DID Key, the first verification method in the DID + * Document is always used. + * + * Note that for DID Key, only one verification method intended for signing can exist so + * specifying `methodId` could be considered redundant or unnecessary. The option is provided for + * consistency with other DID method implementations. + * + * @param params - The parameters for the `getSigningMethod` operation. + * @param params.didDocument - DID Document to get the verification method from. + * @param params.methodId - ID of the verification method to use for signing. + * @returns Verification method to use for signing. + */ + public static async getSigningMethod({ didDocument }: { + didDocument: DidDocument; + methodId?: string; + }): Promise { + // Verify the DID method is supported. + const parsedDid = DidUri.parse(didDocument.id); + if (parsedDid && parsedDid.method !== this.methodName) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`); + } + + // Get the ID of the first verification method intended for signing. + const [ methodId ] = didDocument.authentication ?? []; + + // Get the verification method with the specified ID. + const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id === methodId); + + return verificationMethod; + } + + /** + * Resolves a `did:key` identifier to a DID Document. + * + * @param didUri - The DID to be resolved. + * @param options - Optional parameters for resolving the DID. + * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. + */ + public static async resolve(didUri: string, options?: DidResolutionOptions): Promise { + try { + // Attempt to expand the DID URI string to a DID document. + const didDocument = await DidKey.createDocument({ didUri, options }); + + // If the DID document was created successfully, return it. + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didDocument, + }; + + } catch (error: any) { + // Rethrow any unexpected errors that are not a `DidError`. + if (!(error instanceof DidError)) throw new Error(error); + + // Return a DID Resolution Result with the appropriate error code. + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { + error: error.code, + ...error.message && { errorMessage: error.message } + } + }; + } + } + + /** + * Expands a did:key identifier to a DID Document. + * + * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm + * + * @param options + * @returns - A DID dodcument. + */ + private static async createDocument({ didUri, options = {}}: { + didUri: string; + options?: Exclude, 'algorithm' | 'verificationMethods'> | DidResolutionOptions; + }): Promise { + const { + defaultContext = 'https://www.w3.org/ns/did/v1', enableEncryptionKeyDerivation = false, + enableExperimentalPublicKeyTypes = false, + publicKeyFormat = 'JsonWebKey2020' } = options; - // Default to Ed25519 key generation if an algorithm is not given. - const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519'; + /** + * 1. Initialize document to an empty object. + */ + const didDocument: DidDocument = { id: '' }; + + /** + * 2. Using a colon (:) as the delimiter, split the identifier into its + * components: a scheme, a method, a version, and a multibaseValue. + * If there are only three components set the version to the string + * value 1 and use the last value as the multibaseValue. + */ + const parsedDid = DidUri.parse(didUri); + if (!parsedDid) { + throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); + } + const multibaseValue = parsedDid.id; + + /** + * 3. Check the validity of the input identifier. + * The scheme MUST be the value did. The method MUST be the value key. + * The version MUST be convertible to a positive integer value. The + * multibaseValue MUST be a string and begin with the letter z. If any + * of these requirements fail, an invalidDid error MUST be raised. + */ + if (!DidKey.validateIdentifier(parsedDid)) { + throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); + } + + /** + * 4. Initialize the signatureVerificationMethod to the result of passing + * identifier, multibaseValue, and options to a + * {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}. + */ + const signatureVerificationMethod = await DidKey.createSignatureMethod({ + didUri, + multibaseValue, + options: { enableExperimentalPublicKeyTypes, publicKeyFormat } + }); + + /** + * 5. Set document.id to identifier. If document.id is not a valid DID, + * an invalidDid error MUST be raised. + * + * Note: Identifier was already confirmed to be valid in Step 3, so + * skipping the redundant validation. + */ + didDocument.id = parsedDid.uri; + + /** + * 6. Initialize the verificationMethod property in document to an array + * where the first value is the signatureVerificationMethod. + */ + didDocument.verificationMethod = [signatureVerificationMethod]; + + /** + * 7. Initialize the authentication, assertionMethod, capabilityInvocation, + * and the capabilityDelegation properties in document to an array where + * the first item is the value of the id property in + * signatureVerificationMethod. + */ + didDocument.authentication = [signatureVerificationMethod.id]; + didDocument.assertionMethod = [signatureVerificationMethod.id]; + didDocument.capabilityInvocation = [signatureVerificationMethod.id]; + didDocument.capabilityDelegation = [signatureVerificationMethod.id]; + + /** + * 8. If options.enableEncryptionKeyDerivation is set to true: + * Add the encryptionVerificationMethod value to the verificationMethod + * array. Initialize the keyAgreement property in document to an array + * where the first item is the value of the id property in + * encryptionVerificationMethod. + */ + if (enableEncryptionKeyDerivation === true) { + /** + * Although not covered by the did:key method specification, a sensible + * default will be taken to use the 'X25519KeyAgreementKey2020' + * verification method type if the given publicKeyFormat is + * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise. + */ + const encryptionPublicKeyFormat = + (publicKeyFormat === 'Ed25519VerificationKey2020') + ? 'X25519KeyAgreementKey2020' + : 'JsonWebKey2020'; + + /** + * 8.1 Initialize the encryptionVerificationMethod to the result of + * passing identifier, multibaseValue, and options to an + * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}. + */ + const encryptionVerificationMethod = await this.createEncryptionMethod({ + didUri, + multibaseValue, + options: { enableExperimentalPublicKeyTypes, publicKeyFormat: encryptionPublicKeyFormat } + }); + + /** + * 8.2 Add the encryptionVerificationMethod value to the + * verificationMethod array. + */ + didDocument.verificationMethod.push(encryptionVerificationMethod); + + /** + * 8.3. Initialize the keyAgreement property in document to an array + * where the first item is the value of the id property in + * encryptionVerificationMethod. + */ + didDocument.keyAgreement = [encryptionVerificationMethod.id]; + } + + /** + * 9. Initialize the @context property in document to the result of passing document and options to the Context + * Creation algorithm. + */ + // Set contextArray to an array that is initialized to options.defaultContext. + const contextArray = [ defaultContext ]; + + // For every object in every verification relationship listed in document, + // add a string value to the contextArray based on the object type value, + // if it doesn't already exist, according to the following table: + // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL} + const verificationMethodTypes = getVerificationMethodTypes({ didDocument }); + verificationMethodTypes.forEach((typeName: string) => { + const typeUrl = DidKeyVerificationMethodType[typeName]; + contextArray.push(typeUrl); + }); + didDocument['@context'] = contextArray; + + /** + * 10. Return document. + */ + return didDocument; + } + + /** + * Decoding a multibase-encoded multicodec value into a verification method + * that is suitable for verifying that encrypted information will be + * received by the intended recipient. + */ + private static async createEncryptionMethod({ didUri, multibaseValue, options }: { + didUri: string; + multibaseValue: string; + options: Required, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>>; + }): Promise { + const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options; + + /** + * 1. Initialize verificationMethod to an empty object. + */ + const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' }; + + /** + * 2. Set multicodecValue and raw publicKeyBytes to the result of passing multibaseValue and + * options to a Derive Encryption Key algorithm. + */ + const { + keyBytes: publicKeyBytes, + multicodecCode: multicodecValue, + } = await DidKey.deriveEncryptionKey({ multibaseValue }); + + /** + * 3. Ensure the proper key length of raw publicKeyBytes based on the multicodecValue table + * provided below: + * + * Multicodec hexadecimal value: 0xec + * + * If the byte length of raw publicKeyBytes does not match the expected public key length for + * the associated multicodecValue, an invalidPublicKeyLength error MUST be raised. + */ + const actualLength = publicKeyBytes.byteLength; + const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue]; + if (actualLength !== expectedLength) { + throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`); + } + + /** + * 4. Create the multibaseValue by concatenating the letter 'z' and the + * base58-btc encoding of the concatenation of the multicodecValue and + * the raw publicKeyBytes. + */ + const kemMultibaseValue = DidKeyUtils.keyBytesToMultibaseId({ + keyBytes : publicKeyBytes, + multicodecCode : multicodecValue + }); + + /** + * 5. Set the verificationMethod.id value by concatenating identifier, + * a hash character (#), and the multibaseValue. If verificationMethod.id + * is not a valid DID URL, an invalidDidUrl error MUST be raised. + */ + verificationMethod.id = `${didUri}#${kemMultibaseValue}`; + try { + new URL(verificationMethod.id); + } catch (error: any) { + throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.'); + } + + /** + * 6. Set the publicKeyFormat value to the options.publicKeyFormat value. + * 7. If publicKeyFormat is not known to the implementation, an + * unsupportedPublicKeyType error MUST be raised. + */ + if (!(publicKeyFormat in DidKeyVerificationMethodType)) { + throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`); + } + + /** + * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not + * Multikey, JsonWebKey2020, or X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be + * raised. + */ + const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020']; + if (enableExperimentalPublicKeyTypes === false + && !(StandardPublicKeyTypes.includes(publicKeyFormat))) { + throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`); + } + + /** + * 9. Set verificationMethod.type to the publicKeyFormat value. + */ + verificationMethod.type = publicKeyFormat; + + /** + * 10. Set verificationMethod.controller to the identifier value. + */ + verificationMethod.controller = didUri; + + /** + * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020, set the verificationMethod.publicKeyMultibase + * value to multibaseValue. + * + * Note: This implementation does not currently support the Multikey + * format. + */ + if (publicKeyFormat === 'X25519KeyAgreementKey2020') { + verificationMethod.publicKeyMultibase = kemMultibaseValue; + } + + /** + * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to + * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm. + */ + if (publicKeyFormat === 'JsonWebKey2020') { + const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue }); + verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes }); + } + + /** + * 13. Return verificationMethod. + */ + return verificationMethod; + } + + /** + * Decodes a multibase-encoded multicodec value into a verification method + * that is suitable for verifying digital signatures. + * @param options - Signature method creation algorithm inputs. + * @returns - A verification method. + */ + private static async createSignatureMethod({ didUri, multibaseValue, options }: { + didUri: string; + multibaseValue: string; + options: Required, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>> + }): Promise { + const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options; + + /** + * 1. Initialize verificationMethod to an empty object. + */ + const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' }; + + /** + * 2. Set multicodecValue and publicKeyBytes to the result of passing + * multibaseValue and options to a Decode Public Key algorithm. + */ + const { + keyBytes: publicKeyBytes, + multicodecCode: multicodecValue, + multicodecName + } = DidKeyUtils.multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue }); + + /** + * 3. Ensure the proper key length of publicKeyBytes based on the multicodecValue + * {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}. + * If the byte length of rawPublicKeyBytes does not match the expected public key length for the + * associated multicodecValue, an invalidPublicKeyLength error MUST be raised. + */ + const actualLength = publicKeyBytes.byteLength; + const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue]; + if (actualLength !== expectedLength) { + throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`); + } + + /** + * 4. Ensure the publicKeyBytes are a proper encoding of the public key type as specified by + * the multicodecValue. If an invalid public key value is detected, an invalidPublicKey error + * MUST be raised. + */ + let isValid = false; + switch (multicodecName) { + case 'secp256k1-pub': + isValid = await Secp256k1.validatePublicKey({ publicKeyBytes }); + break; + case 'ed25519-pub': + isValid = await Ed25519.validatePublicKey({ publicKeyBytes }); + break; + case 'x25519-pub': + // TODO: Validate key once/if X25519.validatePublicKey() is implemented. + // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes}) + isValid = true; + break; + } + if (!isValid) { + throw new DidError(DidErrorCode.InvalidPublicKey, 'Invalid public key detected.'); + } + + /** + * 5. Set the verificationMethod.id value by concatenating identifier, a hash character (#), and + * the multibaseValue. If verificationMethod.id is not a valid DID URL, an invalidDidUrl error + * MUST be raised. + */ + verificationMethod.id = `${didUri}#${multibaseValue}`; + try { + new URL(verificationMethod.id); + } catch (error: any) { + throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.'); + } + + /** + * 6. Set the publicKeyFormat value to the options.publicKeyFormat value. + * 7. If publicKeyFormat is not known to the implementation, an unsupportedPublicKeyType error + * MUST be raised. + */ + if (!(publicKeyFormat in DidKeyVerificationMethodType)) { + throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`); + } + + /** + * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not + * Multikey, JsonWebKey2020, or Ed25519VerificationKey2020, an invalidPublicKeyType error MUST + * be raised. + */ + const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020']; + if (enableExperimentalPublicKeyTypes === false + && !(StandardPublicKeyTypes.includes(publicKeyFormat))) { + throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`); + } + + /** + * 9. Set verificationMethod.type to the publicKeyFormat value. + */ + verificationMethod.type = publicKeyFormat; + + /** + * 10. Set verificationMethod.controller to the identifier value. + */ + verificationMethod.controller = didUri; + + /** + * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020, + * set the verificationMethod.publicKeyMultibase value to multibaseValue. + * + * Note: This implementation does not currently support the Multikey + * format. + */ + if (publicKeyFormat === 'Ed25519VerificationKey2020') { + verificationMethod.publicKeyMultibase = multibaseValue; + } - return null as any; + /** + * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to + * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm. + */ + if (publicKeyFormat === 'JsonWebKey2020') { + const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue }); + verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes}); + } + + /** + * 13. Return verificationMethod. + */ + return verificationMethod; + } + + + /** + * Transform a multibase-encoded multicodec value to public encryption key + * components that are suitable for encrypting messages to a receiver. A + * mathematical proof elaborating on the safety of performing this operation + * is available in: + * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM} + */ + private static async deriveEncryptionKey({ multibaseValue }: { + multibaseValue: string + }): Promise> { + /** + * 1. Set publicEncryptionKey to an empty object. + */ + let publicEncryptionKey: RequireOnly = { + keyBytes : new Uint8Array(), + multicodecCode : 0 + }; + + /** + * 2. Decode multibaseValue using the base58-btc multibase alphabet and + * set multicodecValue to the multicodec header for the decoded value. + * Implementers are cautioned to ensure that the multicodecValue is set + * to the result after performing varint decoding. + * + * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec + * header. + */ + const { + keyBytes: publicKeyBytes, + multicodecCode: multicodecValue + } = DidKeyUtils.multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue }); + + /** + * 4. If the multicodecValue is 0xed (Ed25519 public key), derive a public X25519 encryption key + * by using the raw publicKeyBytes and the algorithm defined in + * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP} + * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and set + * generatedPublicEncryptionKeyBytes to the result. + */ + if (multicodecValue === 0xed) { + const ed25519PublicKey = await DidKeyUtils.keyConverter('Ed25519').bytesToPublicKey({ + publicKeyBytes + }); + const generatedPublicEncryptionKey = await Ed25519.convertPublicKeyToX25519({ + publicKey: ed25519PublicKey + }); + const generatedPublicEncryptionKeyBytes = await DidKeyUtils.keyConverter('Ed25519').publicKeyToBytes({ + publicKey: generatedPublicEncryptionKey + }); + + /** + * 5. Set multicodecValue to 0xec. + * 6. Set raw public keyBytes to generatedPublicEncryptionKeyBytes. + */ + publicEncryptionKey = { + keyBytes : generatedPublicEncryptionKeyBytes, + multicodecCode : 0xec + }; + } + + /** + * 7. Return publicEncryptionKey. + */ + return publicEncryptionKey; + } + + /** + * Creates a new DID using the `did:key` method formed from a public key. + * + */ + private static async fromPublicKey({ keyManager, publicKey, options }: { + keyManager: CryptoApi; + publicKey: Jwk; + options: DidKeyCreateOptions; + }): Promise { + // Convert the public key to a byte array and encode to Base64URL format. + const multibaseId = await DidKeyUtils.publicKeyToMultibaseId({ publicKey }); + + // Attach the prefix `did:jwk` to form the complete DID URI. + const didUri = `did:${DidKey.methodName}:${multibaseId}`; + + // Expand the DID URI string to a DID didDocument. + const didResolutionResult = await DidKey.resolve(didUri, options); + const didDocument = didResolutionResult.didDocument as DidDocument; + + // DID Metadata is initially empty for this DID method. + const metadata: DidMetadata = {}; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidKey.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + } + + private static validateIdentifier(parsedDid: DidUri): boolean { + const { method, id: multibaseValue } = parsedDid; + const [ scheme ] = parsedDid.uri.split(':', 1); + + /** + * Note: The W3C DID specification makes no mention of a version value being part of the DID + * syntax. Additionally, there does not appear to be any real-world usage of the version + * number. Consequently, this implementation will ignore the version related guidance in + * the did:key specification. + */ + const version = '1'; + + return ( + scheme !== 'did' || + method !== 'key' || + Number(version) > 0 || + universalTypeOf(multibaseValue) !== 'String' || + !multibaseValue.startsWith('z') + ); } } +export class DidKeyUtils { + + /** + * A mapping from JSON Web Key (JWK) property descriptors to multicodec names. + * + * This mapping is used to convert keys in JWK (JSON Web Key) format to multicodec format. + * + * @example + * ```ts + * const multicodecName = JWK_TO_MULTICODEC['Ed25519:public']; + * // Returns 'ed25519-pub', the multicodec name for an Ed25519 public key + * ``` + * + * @remarks + * The keys of this object are strings that describe the JOSE key type and usage, + * such as 'Ed25519:public', 'Ed25519:private', etc. + * The values are the corresponding multicodec names used to represent these key types. + */ + private static JWK_TO_MULTICODEC: { [key: string]: string } = { + 'Ed25519:public' : 'ed25519-pub', + 'Ed25519:private' : 'ed25519-priv', + 'secp256k1:public' : 'secp256k1-pub', + 'secp256k1:private' : 'secp256k1-priv', + 'X25519:public' : 'x25519-pub', + 'X25519:private' : 'x25519-priv', + }; + + public static MULTICODEC_PUBLIC_KEY_LENGTH: Record = { + // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes + 0xe7: 33, + // x25519-pub - Curve25519 public key - 32 bytes + 0xec: 32, + // ed25519-pub - Ed25519 public key - 32 bytes + 0xed: 32 + }; + /** + * A mapping from multicodec names to their corresponding JOSE (JSON Object Signing and Encryption) + * representations. This mapping facilitates the conversion of multicodec key formats to + * JWK (JSON Web Key) formats. + * + * @example + * ```ts + * const joseKey = MULTICODEC_TO_JWK['ed25519-pub']; + * // Returns a partial JWK for an Ed25519 public key + * ``` + * + * @remarks + * The keys of this object are multicodec names, such as 'ed25519-pub', 'ed25519-priv', etc. + * The values are objects representing the corresponding JWK properties for that key type. + */ + private static MULTICODEC_TO_JWK: { [key: string]: Jwk } = { + 'ed25519-pub' : { crv: 'Ed25519', kty: 'OKP', x: '' }, + 'ed25519-priv' : { crv: 'Ed25519', kty: 'OKP', x: '', d: '' }, + 'secp256k1-pub' : { crv: 'secp256k1', kty: 'EC', x: '', y: ''}, + 'secp256k1-priv' : { crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' }, + 'x25519-pub' : { crv: 'X25519', kty: 'OKP', x: '' }, + 'x25519-priv' : { crv: 'X25519', kty: 'OKP', x: '', d: '' }, + }; + /** + * Converts a JWK (JSON Web Key) to a Multicodec code and name. + * + * @example + * ```ts + * const jwk: Jwk = { crv: 'Ed25519', kty: 'OKP', x: '...' }; + * const { code, name } = await Jose.jwkToMulticodec({ jwk }); + * ``` + * + * @param params - The parameters for the conversion. + * @param params.jwk - The JSON Web Key to be converted. + * @returns A promise that resolves to a Multicodec definition. + */ + public static async jwkToMulticodec({ jwk }: { + jwk: Jwk + }): Promise> { + const params: string[] = []; + if (jwk.crv) { + params.push(jwk.crv); + if (jwk.d) { + params.push('private'); + } else { + params.push('public'); + } + } + const lookupKey = params.join(':'); + const name = DidKeyUtils.JWK_TO_MULTICODEC[lookupKey]; + if (name === undefined) { + throw new Error(`Unsupported JWK to Multicodec conversion: '${lookupKey}'`); + } + const code = Multicodec.getCodeFromName({ name }); + return { code, name }; + } + /** + * Converts a cryptographic key to a multibase identifier. + * + * @remarks + * This method provides a way to represent a cryptographic key as a multibase identifier. + * It takes a `Uint8Array` representing the key, and either the multicodec code or multicodec name + * as input. The method first adds the multicodec prefix to the key, then encodes it into Base58 + * format. Finally, it converts the Base58 encoded key into a multibase identifier. + * + * @example + * ```ts + * const key = new Uint8Array([...]); // Cryptographic key as Uint8Array + * const multibaseId = keyBytesToMultibaseId({ key, multicodecName: 'ed25519-pub' }); + * ``` + * + * @param params - The parameters for the conversion. + * @param params.key - The cryptographic key as a Uint8Array. + * @param params.multicodecCode - Optional multicodec code to prefix the key with. + * @param params.multicodecName - Optional multicodec name corresponding to the code. + * @returns The multibase identifier as a string. + */ + public static keyBytesToMultibaseId({ keyBytes, multicodecCode, multicodecName }: + RequireOnly + ): string { + const prefixedKey = Multicodec.addPrefix({ + code : multicodecCode, + data : keyBytes, + name : multicodecName + }); + const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc(); + const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase(); + return multibaseKeyId; + } + /** + * Returns the appropriate public key compressor for the specified cryptographic curve. + * + * @param curve - The cryptographic curve to use for the key conversion. + * @returns A public key compressor for the specified curve. + */ + public static keyCompressor( + curve: string + ): ({ publicKeyBytes }: { publicKeyBytes: Uint8Array }) => Promise { + const compressors = { + 'P-256' : Secp256r1.compressPublicKey, + 'secp256k1' : Secp256k1.compressPublicKey + } as Record Promise>; + const compressor = compressors[curve]; + if (!compressor) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`); + return compressor; + } + /** + * Returns the appropriate key converter for the specified cryptographic curve. + * + * @param curve - The cryptographic curve to use for the key conversion. + * @returns An `AsymmetricKeyConverter` for the specified curve. + */ + public static keyConverter(curve: string): AsymmetricKeyConverter { + const converters: Record = { + 'Ed25519' : Ed25519, + 'P-256' : Secp256r1, + 'secp256k1' : Secp256k1, + 'X25519' : X25519 + }; + const converter = converters[curve]; + if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`); + return converter; + } + /** + * Converts a multibase identifier to a cryptographic key. + * + * @remarks + * This function decodes a multibase identifier back into a cryptographic key. It first decodes the + * identifier from multibase format into Base58 format, and then converts it into a `Uint8Array`. + * Afterward, it removes the multicodec prefix, extracting the raw key data along with the + * multicodec code and name. + * + * @example + * ```ts + * const multibaseKeyId = '...'; // Multibase identifier of the key + * const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId }); + * ``` + * + * @param params - The parameters for the conversion. + * @param params.multibaseKeyId - The multibase identifier string of the key. + * @returns An object containing the key as a `Uint8Array` and its multicodec code and name. + */ + public static multibaseIdToKeyBytes({ multibaseKeyId }: { + multibaseKeyId: string + }): Required { + const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc(); + const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array(); + const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey }); + return { keyBytes: data, multicodecCode: code, multicodecName: name }; + } + /** + * Converts a Multicodec code or name to parial JWK (JSON Web Key). + * + * @example + * ```ts + * const partialJwk = await Jose.multicodecToJwk({ name: 'ed25519-pub' }); + * ``` + * + * @param params - The parameters for the conversion. + * @param params.code - Optional Multicodec code to convert. + * @param params.name - Optional Multicodec name to convert. + * @returns A promise that resolves to a JOSE format key. + */ + public static async multicodecToJwk({ code, name }: { + code?: MulticodecCode, + name?: string + }): Promise { + // Either code or name must be specified, but not both. + if (!(name ? !code : code)) { + throw new Error(`Either 'name' or 'code' must be defined, but not both.`); + } + // If name is undefined, lookup by code. + name = (name === undefined ) ? Multicodec.getNameFromCode({ code: code! }) : name; + const lookupKey = name; + const jose = DidKeyUtils.MULTICODEC_TO_JWK[lookupKey]; + if (jose === undefined) { + throw new Error(`Unsupported Multicodec to JWK conversion`); + } + return { ...jose }; + } + /** + * Converts a public key in JWK (JSON Web Key) format to a multibase identifier. + * + * @remarks + * Note: All secp public keys are converted to compressed point encoding + * before the multibase identifier is computed. + * + * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}: + * Public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1, + * secp256k1r1, secp384r1, etc.) are always represented with compressed point + * encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.). + * + * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}: + * "As a compressed point encoding representation is not defined for JWK + * elliptic curve points, the uncompressed point encoding defined there + * MUST be used. The x and y values represented MUST both be exactly + * 256 bits, with any leading zeros preserved." + * + * @example + * ```ts + * const publicKey = { crv: 'Ed25519', kty: 'OKP', x: '...' }; + * const multibaseId = await Jose.publicKeyToMultibaseId({ publicKey }); + * ``` + * + * @param params - The parameters for the conversion. + * @param params.publicKey - The public key in JWK format. + * @returns A promise that resolves to the multibase identifier. + */ + public static async publicKeyToMultibaseId({ publicKey }: { + publicKey: Jwk + }): Promise { + if (!(publicKey?.crv && publicKey.crv in AlgorithmToKeyTypeMap)) { + throw new DidError(DidErrorCode.InvalidPublicKeyType, `Public key contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`); + } + + // Convert the public key from JWK format to a byte array. + let publicKeyBytes = await DidKeyUtils.keyConverter(publicKey.crv).publicKeyToBytes({ publicKey }); + + // Compress the public key if it is an elliptic curve key. + if (/^(secp256k1|P-256|P-384|P-521)$/.test(publicKey.crv)) { + publicKeyBytes = await DidKeyUtils.keyCompressor(publicKey.crv)({ publicKeyBytes }); + } + + // Convert the JSON Web Key (JWK) parameters to a Multicodec name. + const { name: multicodecName } = await DidKeyUtils.jwkToMulticodec({ jwk: publicKey }); + // Compute the multibase identifier based on the provided key. + const multibaseId = DidKeyUtils.keyBytesToMultibaseId({ + keyBytes: publicKeyBytes, + multicodecName + }); + return multibaseId; + } +} \ No newline at end of file diff --git a/packages/dids/tests/methods/did-key.spec.ts b/packages/dids/tests/methods/did-key.spec.ts new file mode 100644 index 000000000..12701b749 --- /dev/null +++ b/packages/dids/tests/methods/did-key.spec.ts @@ -0,0 +1,468 @@ +import type { Jwk } from '@web5/crypto'; + +import { expect } from 'chai'; +import { LocalKeyManager } from '@web5/crypto'; + +import { DidKey, DidKeyUtils } from '../../src/methods/did-key.js'; + +describe.only('DidKey', () => { + let keyManager: LocalKeyManager; + + before(() => { + keyManager = new LocalKeyManager(); + }); + + describe('create()', () => { + it('creates a did:key DID', async () => { + const did = await DidKey.create({ keyManager, options: { algorithm: 'Ed25519' } }); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri'); + expect(did.uri.startsWith('did:key:')).to.be.true; + expect(did.didDocument.verificationMethod).to.have.length(1); + }); + + it('uses a default key manager and key generation algorithm if neither is given', async () => { + // Create a DID with no params. + let did = await DidKey.create(); + expect(did.uri.startsWith('did:key:')).to.be.true; + + // Create a DID with an empty options object. + did = await DidKey.create({ options: {} }); + expect(did.uri.startsWith('did:key:')).to.be.true; + + // Create a DID with an empty options object and undefined key manager. + did = await DidKey.create({}); + expect(did.uri.startsWith('did:key:')).to.be.true; + }); + + it('creates a DID using the top-level algorithm property, if given', async () => { + const did = await DidKey.create({ keyManager, options: { algorithm: 'secp256k1' } }); + + // Retrieve the public key from the key manager. + const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Verify the public key is an secp256k1 key. + expect(publicKey).to.have.property('crv', 'secp256k1'); + }); + + it('creates a DID using the verificationMethods algorithm property, if given', async () => { + const did = await DidKey.create({ keyManager, options: { verificationMethods: [{ algorithm: 'secp256k1' }] } }); + + // Retrieve the public key from the key manager. + const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Verify the public key is an secp256k1 key. + expect(publicKey).to.have.property('crv', 'secp256k1'); + }); + + it('creates a DID with an Ed25519 key, by default', async () => { + const did = await DidKey.create({ keyManager }); + + // Retrieve the public key from the key manager. + const keyUri = await keyManager.getKeyUri({ key: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Verify the public key is an Ed25519 key. + expect(publicKey).to.have.property('crv', 'Ed25519'); + }); + + it('creates a DID using any signature algorithm supported by the provided KMS', async () => { + expect( + await DidKey.create({ keyManager, options: { algorithm: 'secp256k1' } }) + ).to.have.property('uri'); + + expect( + await DidKey.create({ keyManager, options: { algorithm: 'Ed25519' } }) + ).to.have.property('uri'); + }); + + it('returns a getSigner() function that creates valid signatures that can be verified', async () => { + const did = await DidKey.create({ keyManager, options: { algorithm: 'Ed25519' } }); + + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('returns a getSigner() function handles undefined params', async function () { + // Create a `did:key` DID. + const did = await DidKey.create({ keyManager, options: { algorithm: 'Ed25519' } }); + + // Simulate the creation of a signer with undefined params + const signer = await did.getSigner({ }); + + // Note: Since this test does not interact with an actual keyManager, it primarily ensures + // that the method doesn't break with undefined params. + expect(signer).to.have.property('sign'); + expect(signer).to.have.property('verify'); + }); + + it('throws an error if both algorithm and verificationMethods are provided', async () => { + try { + await DidKey.create({ + keyManager, + options: { + algorithm : 'Ed25519', + verificationMethods : [{ algorithm: 'Ed25519' }] + } + }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('options are mutually exclusive'); + } + }); + }); + + describe('DidKeyUtils', () => { + describe('joseToMulticodec()', () => { + it('supports Ed25519 public keys', async () => { + const multicoded = await DidKeyUtils.jwkToMulticodec({ + jwk: { + alg : 'EdDSA', + crv : 'Ed25519', + kty : 'OKP', + x : 'lSPJrpccK4uv3f7IUCVYDz5qcUhSjiPHFyRcr5Z5VYg', + } + }); + + expect(multicoded).to.deep.equal({ code: 237, name: 'ed25519-pub' }); + }); + + it('supports Ed25519 private keys', async () => { + const multicoded = await DidKeyUtils.jwkToMulticodec({ + jwk: { + d : 'fbGqifMN3h7tjLMd2gi5dggG-A2s7paNkBbdFAyGZyU', + alg : 'EdDSA', + crv : 'Ed25519', + kty : 'OKP', + x : 'lSPJrpccK4uv3f7IUCVYDz5qcUhSjiPHFyRcr5Z5VYg', + } + }); + + expect(multicoded).to.deep.equal({ code: 4864, name: 'ed25519-priv' }); + }); + + it('supports secp256k1 public keys', async () => { + const multicoded = await DidKeyUtils.jwkToMulticodec({ + jwk: { + alg : 'ES256K', + crv : 'secp256k1', + kty : 'EC', + x : 'hEpfKD1BpSyoP9CYULUxD8JoTGB6Y8NNxe2cX0p_bQY', + y : 'SNP8nyU4iDWeu7nfcjpJ04htOgF8u94pFUzBYiPw75g', + } + }); + + expect(multicoded).to.deep.equal({ code: 231, name: 'secp256k1-pub' }); + }); + + it('supports secp256k1 private keys', async () => { + const multicoded = await DidKeyUtils.jwkToMulticodec({ + jwk: { + d : 'KvnTJGCOHzsUHEaIj1gy5uOE22K-3Shpl6NYLG7TRGQ', + alg : 'ES256K', + crv : 'secp256k1', + kty : 'EC', + x : 'hEpfKD1BpSyoP9CYULUxD8JoTGB6Y8NNxe2cX0p_bQY', + y : 'SNP8nyU4iDWeu7nfcjpJ04htOgF8u94pFUzBYiPw75g', + } + }); + + expect(multicoded).to.deep.equal({ code: 4865, name: 'secp256k1-priv' }); + }); + + it('supports X25519 public keys', async () => { + const multicoded = await DidKeyUtils.jwkToMulticodec({ + jwk: { + crv : 'X25519', + kty : 'OKP', + x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', + } + }); + + expect(multicoded).to.deep.equal({ code: 236, name: 'x25519-pub' }); + }); + + it('supports X25519 private keys', async () => { + const multicoded = await DidKeyUtils.jwkToMulticodec({ + jwk: { + d : 'MJf4AAqcwfBC68Wkb8nRbmnIdHb07zYM7vU_TAOgmtM', + crv : 'X25519', + kty : 'OKP', + x : 'Uszsfy4vkz9MKeflgUpQot7sJhDyco2aYWCRXKTrcQg', + } + }); + + expect(multicoded).to.deep.equal({ code: 4866, name: 'x25519-priv' }); + }); + + it('throws an error if unsupported JOSE has been passed', async () => { + await expect( + // @ts-expect-error because parameters are intentionally omitted to trigger an error. + DidKeyUtils.jwkToMulticodec({ jwk: { crv: '123' } }) + ).to.eventually.be.rejectedWith(Error, `Unsupported JWK to Multicodec conversion: '123:public'`); + }); + }); + + describe('keyBytesToMultibaseId()', () => { + it('returns a multibase encoded string', () => { + const input = { + keyBytes : new Uint8Array(32), + multicodecName : 'ed25519-pub', + }; + const encoded = DidKeyUtils.keyBytesToMultibaseId({ keyBytes: input.keyBytes, multicodecName: input.multicodecName }); + expect(encoded).to.be.a.string; + expect(encoded.substring(0, 1)).to.equal('z'); + expect(encoded.substring(1, 4)).to.equal('6Mk'); + }); + + it('passes test vectors', () => { + let input: { keyBytes: Uint8Array, multicodecName: string }; + let output: string; + let encoded: string; + + // Test Vector 1. + input = { + keyBytes : (new Uint8Array(32)).fill(0), + multicodecName : 'ed25519-pub', + }; + output = 'z6MkeTG3bFFSLYVU7VqhgZxqr6YzpaGrQtFMh1uvqGy1vDnP'; + encoded = DidKeyUtils.keyBytesToMultibaseId({ keyBytes: input.keyBytes, multicodecName: input.multicodecName }); + expect(encoded).to.equal(output); + + // Test Vector 2. + input = { + keyBytes : (new Uint8Array(32)).fill(1), + multicodecName : 'ed25519-pub', + }; + output = 'z6MkeXBLjYiSvqnhFb6D7sHm8yKm4jV45wwBFRaatf1cfZ76'; + encoded = DidKeyUtils.keyBytesToMultibaseId({ keyBytes: input.keyBytes, multicodecName: input.multicodecName }); + expect(encoded).to.equal(output); + + // Test Vector 3. + input = { + keyBytes : (new Uint8Array(32)).fill(9), + multicodecName : 'ed25519-pub', + }; + output = 'z6Mkf4XhsxSXfEAWNK6GcFu7TyVs21AfUTRjiguqMhNQeDgk'; + encoded = DidKeyUtils.keyBytesToMultibaseId({ keyBytes: input.keyBytes, multicodecName: input.multicodecName }); + expect(encoded).to.equal(output); + }); + }); + + describe('multicodecToJwk()', () => { + it('converts ed25519 public key multicodec to JWK', async () => { + const result = await DidKeyUtils.multicodecToJwk({ name: 'ed25519-pub' }); + expect(result).to.deep.equal({ + crv : 'Ed25519', + kty : 'OKP', + x : '' // x value would be populated with actual key material in real use + }); + }); + + it('converts ed25519 private key multicodec to JWK', async () => { + const result = await DidKeyUtils.multicodecToJwk({ name: 'ed25519-priv' }); + expect(result).to.deep.equal({ + crv : 'Ed25519', + kty : 'OKP', + x : '', // x value would be populated with actual key material in real use + d : '' // d value would be populated with actual key material in real use + }); + }); + + it('converts secp256k1 public key multicodec to JWK', async () => { + const result = await DidKeyUtils.multicodecToJwk({ name: 'secp256k1-pub' }); + expect(result).to.deep.equal({ + crv : 'secp256k1', + kty : 'EC', + x : '', // x value would be populated with actual key material in real use + y : '' // y value would be populated with actual key material in real use + }); + }); + + it('converts secp256k1 private key multicodec to JWK', async () => { + const result = await DidKeyUtils.multicodecToJwk({ name: 'secp256k1-priv' }); + expect(result).to.deep.equal({ + crv : 'secp256k1', + kty : 'EC', + x : '', // x value would be populated with actual key material in real use + y : '', // y value would be populated with actual key material in real use + d : '' // d value would be populated with actual key material in real use + }); + }); + + it('converts x25519 public key multicodec to JWK', async () => { + const result = await DidKeyUtils.multicodecToJwk({ name: 'x25519-pub' }); + expect(result).to.deep.equal({ + crv : 'X25519', + kty : 'OKP', + x : '' // x value would be populated with actual key material in real use + }); + }); + + it('converts x25519 private key multicodec to JWK', async () => { + const result = await DidKeyUtils.multicodecToJwk({ name: 'x25519-priv' }); + expect(result).to.deep.equal({ + crv : 'X25519', + kty : 'OKP', + x : '', // x value would be populated with actual key material in real use + d : '' // d value would be populated with actual key material in real use + }); + }); + + it('throws an error when name is undefined and code is not provided', async () => { + try { + await DidKeyUtils.multicodecToJwk({}); + expect.fail('Should have thrown an error for undefined name and code'); + } catch (e: any) { + expect(e.message).to.equal('Either \'name\' or \'code\' must be defined, but not both.'); + } + }); + + it('throws an error when both name and code are provided', async () => { + try { + await DidKeyUtils.multicodecToJwk({ name: 'ed25519-pub', code: 0xed }); + expect.fail('Should have thrown an error for both name and code being defined'); + } catch (e: any) { + expect(e.message).to.equal('Either \'name\' or \'code\' must be defined, but not both.'); + } + }); + + it('throws an error for unsupported multicodec name', async () => { + try { + await DidKeyUtils.multicodecToJwk({ name: 'unsupported-key-type' }); + expect.fail('Should have thrown an error for unsupported multicodec name'); + } catch (e: any) { + expect(e.message).to.include('Unsupported Multicodec to JWK conversion'); + } + }); + + it('throws an error for unsupported multicodec code', async () => { + try { + await DidKeyUtils.multicodecToJwk({ code: 0x9999 }); + expect.fail('Should have thrown an error for unsupported multicodec code'); + } catch (e: any) { + expect(e.message).to.include('Unsupported multicodec'); + } + }); + }); + + describe('multibaseIdToKeyBytes()', () => { + it('converts secp256k1-pub multibase identifiers', () => { + const multibaseKeyId = 'zQ3shMrXA3Ah8h5asMM69USP8qRDnPaCLRV3nPmitAXVfWhgp'; + + const { keyBytes, multicodecCode, multicodecName } = DidKeyUtils.multibaseIdToKeyBytes({ multibaseKeyId }); + + expect(keyBytes).to.exist; + expect(keyBytes).to.be.a('Uint8Array'); + expect(keyBytes).to.have.length(33); + expect(multicodecCode).to.exist; + expect(multicodecCode).to.equal(231); + expect(multicodecName).to.exist; + expect(multicodecName).to.equal('secp256k1-pub'); + }); + + it('converts ed25519-pub multibase identifiers', () => { + const multibaseKeyId = 'z6MkizSHspkM891CAnYZis1TJkB4fWwuyVjt4pV93rWPGYwW'; + + const { keyBytes, multicodecCode, multicodecName } = DidKeyUtils.multibaseIdToKeyBytes({ multibaseKeyId }); + + expect(keyBytes).to.exist; + expect(keyBytes).to.be.a('Uint8Array'); + expect(keyBytes).to.have.length(32); + expect(multicodecCode).to.exist; + expect(multicodecCode).to.equal(237); + expect(multicodecName).to.exist; + expect(multicodecName).to.equal('ed25519-pub'); + }); + + it('converts x25519-pub multibase identifiers', () => { + const multibaseKeyId = 'z6LSfsF6tQA7j56WSzNPT4yrzZprzGEK8137DMeAVLgGBJEz'; + + const { keyBytes, multicodecCode, multicodecName } = DidKeyUtils.multibaseIdToKeyBytes({ multibaseKeyId }); + + expect(keyBytes).to.exist; + expect(keyBytes).to.be.a('Uint8Array'); + expect(keyBytes).to.have.length(32); + expect(multicodecCode).to.exist; + expect(multicodecCode).to.equal(236); + expect(multicodecName).to.exist; + expect(multicodecName).to.equal('x25519-pub'); + }); + }); + + describe('publicKeyToMultibaseId()', () => { + it('supports Ed25519', async () => { + const publicKey: Jwk = { + crv : 'Ed25519', + kty : 'OKP', + x : 'wwk7wOlocpOHDopgc0cZVCnl_7zFrp-JpvZe9vr5500' + }; + + const multibaseId = await DidKeyUtils.publicKeyToMultibaseId({ publicKey }); + + expect(multibaseId).to.equal('z6MksabiHWJ5wQqJGDzxw1EiV5zi6BE6QRENTnHBcKHSqLaQ'); + }); + + it('supports secp256k1', async () => { + const publicKey: Jwk = { + crv : 'secp256k1', + kty : 'EC', + x : '_TihFv5t24hjWsRcdZBeEJa65hQB5aiOYmG6mMu1RZA', + y : 'UfiOGckhJuh9f3-Yi7g-jTILYP6vEWOSF1drwjBHebA', + }; + + const multibaseId = await DidKeyUtils.publicKeyToMultibaseId({ publicKey }); + + expect(multibaseId).to.equal('zQ3sheTFzDvGpXAc9AXtwGF3MW1CusKovnwM4pSsUamqKCyLB'); + }); + + it('supports X25519', async () => { + const publicKey: Jwk = { + crv : 'X25519', + kty : 'OKP', + x : 'cuY-fEu_V1s4b8HbGzy_9VOaNtxiUPzLn6KOATdz0ks', + }; + + const multibaseId = await DidKeyUtils.publicKeyToMultibaseId({ publicKey }); + + expect(multibaseId).to.equal('z6LSjQhGhqqYgrFsNFoZL9wzuKpS1xQ7YNE6fnLgSyW2hUt2'); + }); + + it('throws an error for an unsupported public key type', async () => { + await expect( + DidKeyUtils.publicKeyToMultibaseId({ + publicKey: { + kty : 'RSA', + n : 'r0YDzIV4GPJ1wFb1Gftdd3C3VE6YeknVq1C7jGypq5WTTmX0yRDBqzL6mBR3_c-mKRuE5Z5VMGniA1lFnFmv8m0A2engKfALXHPJqoL6WzqN1SyjSM2aI6v8JVTj4H0RdYV9R4jxIB-zK5X-ZyL6CwHx-3dKZkCvZSEp8b-5I8c2Fz8E8Hl7qKkD_qEz6ZOmKVhJLGiEag1qUQYJv2TcRdiyZfwwVsV3nI3IcVfMCTjDZTw2jI0YHJgLi7-MkP4DO7OJ4D4AFtL-7CkZ7V2xG0piBz4b02_-ZGnBZ5zHJxGoUZnTY6HX4V9bPQI_ME8qCjFXf-TcwCfDFcwMm70L2Q', + e : 'AQAB', + alg : 'RS256' + } + }) + ).to.eventually.be.rejectedWith(Error, `unsupported key type`); + }); + + it('throws an error for an unsupported public key curve', async () => { + await expect( + DidKeyUtils.publicKeyToMultibaseId({ + publicKey: { + kty : 'EC', + crv : 'BLS12381_G1', + x : 'mIT3NuXBB_VeJUaV15hwBbMtBrMaTWcN4gnDfkzX-VuUZg3vnpB9RxxaC6vkTgJ2' + } + }) + ).to.eventually.be.rejectedWith(Error, `unsupported key type`); + }); + }); + }); +}); From 7ec833e19d3b58288c37d01aaff971caa6aac5c5 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Mon, 29 Jan 2024 09:26:26 -0500 Subject: [PATCH 28/39] Complete implementation of DID Key Signed-off-by: Frank Hinek --- packages/dids/old/src/did-key.ts | 787 ------------------ packages/dids/old/tests/did-key.spec.ts | 108 --- packages/dids/src/methods/did-dht.ts | 75 -- packages/dids/src/methods/did-jwk.ts | 82 +- packages/dids/src/methods/did-key.ts | 179 +++- packages/dids/src/methods/did-method.ts | 92 +- .../tests/fixtures/test-vectors/did-key.ts | 318 ------- packages/dids/tests/methods/did-jwk.spec.ts | 2 +- packages/dids/tests/methods/did-key.spec.ts | 334 +++++++- .../dids/tests/methods/did-method.spec.ts | 13 + 10 files changed, 599 insertions(+), 1391 deletions(-) delete mode 100644 packages/dids/old/src/did-key.ts delete mode 100644 packages/dids/old/tests/did-key.spec.ts delete mode 100644 packages/dids/tests/fixtures/test-vectors/did-key.ts diff --git a/packages/dids/old/src/did-key.ts b/packages/dids/old/src/did-key.ts deleted file mode 100644 index 3dccc0a94..000000000 --- a/packages/dids/old/src/did-key.ts +++ /dev/null @@ -1,787 +0,0 @@ -import type { PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto'; - -import { universalTypeOf } from '@web5/common'; -import { - Jose, - Ed25519, - Secp256k1, - EcdsaAlgorithm, - EdDsaAlgorithm, - utils as cryptoUtils, -} from '@web5/crypto'; - -import type { - DidMethod, - DidDocument, - PortableDid, - VerificationMethod, - DidResolutionResult, - DidResolutionOptions, - PortableDidVerificationMethod, -} from './types.js'; - -import { getVerificationMethodTypes, parseDid } from './utils.js'; - -const SupportedCryptoAlgorithms = [ - 'Ed25519', - 'secp256k1' -] as const; - -const SupportedPublicKeyFormats = [ - 'Ed25519VerificationKey2020', - 'JsonWebKey2020', - 'X25519KeyAgreementKey2020' -]; - -const VERIFICATION_METHOD_TYPES: Record = { - 'Ed25519VerificationKey2020' : 'https://w3id.org/security/suites/ed25519-2020/v1', - 'JsonWebKey2020' : 'https://w3id.org/security/suites/jws-2020/v1', - 'X25519KeyAgreementKey2020' : 'https://w3id.org/security/suites/x25519-2020/v1', -} as const; - -export type DidVerificationMethodType = keyof typeof VERIFICATION_METHOD_TYPES; - -const MULTICODEC_PUBLIC_KEY_LENGTH: Record = { - // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes - 0xe7: 33, - - // x25519-pub - Curve25519 public key - 32 bytes - 0xec: 32, - - // ed25519-pub - Ed25519 public key - 32 bytes - 0xed: 32 -}; - -export type DidKeyCreateOptions = { - enableEncryptionKeyDerivation?: boolean; - keyAlgorithm?: typeof SupportedCryptoAlgorithms[number]; - keySet?: DidKeyKeySet; - publicKeyFormat?: DidVerificationMethodType; -} - -export type DidKeyCreateDocumentOptions = { - defaultContext?: string; - did: string; - enableEncryptionKeyDerivation?: boolean; - enableExperimentalPublicKeyTypes?: boolean; - publicKeyFormat?: DidVerificationMethodType; -} - -export type DidKeyDeriveEncryptionKeyResult = { - key: Uint8Array; - multicodecCode: number; -} - -export type DidKeyIdentifier = { - fragment: string; - method: string; - multibaseValue: string; - scheme: string; - version: string; -} - -export type DidKeyKeySet = { - verificationMethodKeys?: PortableDidVerificationMethod[]; -} - -export class DidKeyMethod implements DidMethod { - /** - * Name of the DID method - */ - public static methodName = 'key'; - - public static async create(options?: DidKeyCreateOptions): Promise { - let { - enableEncryptionKeyDerivation = false, - keyAlgorithm, - keySet, - publicKeyFormat = 'JsonWebKey2020' - } = options ?? { }; - - // If keySet not given, generate a default key set. - if (keySet === undefined) { - keySet = await DidKeyMethod.generateKeySet({ keyAlgorithm }); - } - - const portableDid: Partial = {}; - let multibaseId = ''; - - if (keySet.verificationMethodKeys?.[0]?.publicKeyJwk) { - // Compute the multibase identifier based on the JSON Web Key. - const publicKeyJwk = keySet.verificationMethodKeys[0].publicKeyJwk; - multibaseId = await Jose.jwkToMultibaseId({ key: publicKeyJwk }); - } - - if (!multibaseId) { - throw new Error('DidKeyMethod: Failed to create DID with given input.'); - } - - // Concatenate the DID identifier. - portableDid.did = `did:key:${multibaseId}`; - - // Expand the DID identifier to a DID document. - portableDid.document = await DidKeyMethod.createDocument({ - did: portableDid.did, - publicKeyFormat, - enableEncryptionKeyDerivation - }); - - // Return the given or generated key set. - portableDid.keySet = keySet; - - return portableDid as PortableDid; - } - - /** - * Expands a did:key identifier to a DID Document. - * - * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm - * - * @param options - * @returns - A DID dodcument. - */ - public static async createDocument(options: DidKeyCreateDocumentOptions): Promise { - const { - defaultContext = 'https://www.w3.org/ns/did/v1', - did, - enableEncryptionKeyDerivation = false, - enableExperimentalPublicKeyTypes = false, - publicKeyFormat = 'JsonWebKey2020' - } = options; - - /** - * 1. Initialize document to an empty object. - */ - const document: Partial = {}; - - /** - * 2. Using a colon (:) as the delimiter, split the identifier into its - * components: a scheme, a method, a version, and a multibaseValue. - * If there are only three components set the version to the string - * value 1 and use the last value as the multibaseValue. - * - * Note: The W3C DID specification makes no mention of a version value - * being part of the DID syntax. Additionally, there does not - * appear to be any real-world usage of the version number. - * Consequently, this implementation will ignore the version - * related guidance in the did:key specification. - */ - let multibaseValue: string; - try { - ({ id: multibaseValue } = parseDid({ didUrl: did })); - } catch (error: any) { - throw new Error(`invalidDid: Unknown format: ${did}`); - } - - /** - * 3. Check the validity of the input identifier. - * The scheme MUST be the value did. The method MUST be the value key. - * The version MUST be convertible to a positive integer value. The - * multibaseValue MUST be a string and begin with the letter z. If any - * of these requirements fail, an invalidDid error MUST be raised. - */ - if (!DidKeyMethod.validateIdentifier({ did })) { - throw new Error(`invalidDid: Invalid identifier format: ${did}`); - } - - /** - * 4. Initialize the signatureVerificationMethod to the result of passing - * identifier, multibaseValue, and options to a - * {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}. - */ - const signatureVerificationMethod = await DidKeyMethod.createSignatureMethod({ - did, - enableExperimentalPublicKeyTypes, - multibaseValue, - publicKeyFormat - }); - - /** - * 5. Set document.id to identifier. If document.id is not a valid DID, - * an invalidDid error MUST be raised. - * - * Note: Identifier was already confirmed to be valid in Step 3, so - * skipping the redundant validation. - */ - document.id = did; - - /** - * 6. Initialize the verificationMethod property in document to an array - * where the first value is the signatureVerificationMethod. - */ - document.verificationMethod = [signatureVerificationMethod]; - - /** - * 7. Initialize the authentication, assertionMethod, capabilityInvocation, - * and the capabilityDelegation properties in document to an array where - * the first item is the value of the id property in - * signatureVerificationMethod. - */ - document.authentication = [signatureVerificationMethod.id]; - document.assertionMethod = [signatureVerificationMethod.id]; - document.capabilityInvocation = [signatureVerificationMethod.id]; - document.capabilityDelegation = [signatureVerificationMethod.id]; - - /** - * 8. If options.enableEncryptionKeyDerivation is set to true: - * Add the encryptionVerificationMethod value to the verificationMethod - * array. Initialize the keyAgreement property in document to an array - * where the first item is the value of the id property in - * encryptionVerificationMethod. - */ - if (enableEncryptionKeyDerivation === true) { - /** - * Although not covered by the did:key method specification, a sensible - * default will be taken to use the 'X25519KeyAgreementKey2020' - * verification method type if the given publicKeyFormat is - * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise. - */ - const encryptionPublicKeyFormat = - (publicKeyFormat === 'Ed25519VerificationKey2020') - ? 'X25519KeyAgreementKey2020' - : 'JsonWebKey2020'; - - /** - * 8.1 Initialize the encryptionVerificationMethod to the result of - * passing identifier, multibaseValue, and options to an - * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}. - */ - const encryptionVerificationMethod = await this.createEncryptionMethod({ - did, - enableExperimentalPublicKeyTypes, - multibaseValue, - publicKeyFormat: encryptionPublicKeyFormat - }); - - /** - * 8.2 Add the encryptionVerificationMethod value to the - * verificationMethod array. - */ - document.verificationMethod.push(encryptionVerificationMethod); - - /** - * 8.3. Initialize the keyAgreement property in document to an array - * where the first item is the value of the id property in - * encryptionVerificationMethod. - */ - document.keyAgreement = [encryptionVerificationMethod.id]; - } - - /** - * 9. Initialize the @context property in document to the result of passing - * document and options to the Context Creation algorithm. - */ - // Set contextArray to an array that is initialized to - // options.defaultContext. - const contextArray = [defaultContext]; - - // For every object in every verification relationship listed in document, - // add a string value to the contextArray based on the object type value, - // if it doesn't already exist, according to the following table: - // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL} - const verificationMethodTypes = getVerificationMethodTypes({ didDocument: document }); - verificationMethodTypes.forEach((typeName: string) => { - const typeUrl = VERIFICATION_METHOD_TYPES[typeName]; - contextArray.push(typeUrl); - }); - document['@context'] = contextArray; - - /** - * 10. Return document. - */ - return document as DidDocument; - } - - /** - * Decoding a multibase-encoded multicodec value into a verification method - * that is suitable for verifying that encrypted information will be - * received by the intended recipient. - */ - public static async createEncryptionMethod(options: { - did: string, - enableExperimentalPublicKeyTypes: boolean, - multibaseValue: string, - publicKeyFormat: DidVerificationMethodType - }): Promise { - const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options; - - /** - * 1. Initialize verificationMethod to an empty object. - */ - const verificationMethod: Partial = {}; - - /** - * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing - * multibaseValue and options to a Derive Encryption Key algorithm. - */ - const { - key: rawPublicKeyBytes, - multicodecCode: multicodecValue, - } = await DidKeyMethod.deriveEncryptionKey({ multibaseValue }); - - /** - * 3. Ensure the proper key length of rawPublicKeyBytes based on the - * multicodecValue table provided below: - * - * Multicodec hexadecimal value: 0xec - * - * If the byte length of rawPublicKeyBytes - * does not match the expected public key length for the associated - * multicodecValue, an invalidPublicKeyLength error MUST be raised. - */ - const actualLength = rawPublicKeyBytes.byteLength; - const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue]; - if (actualLength !== expectedLength) { - throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`); - } - - /** - * 4. Create the multibaseValue by concatenating the letter 'z' and the - * base58-btc encoding of the concatenation of the multicodecValue and - * the rawPublicKeyBytes. - */ - const kemMultibaseValue = cryptoUtils.keyToMultibaseId({ - key : rawPublicKeyBytes, - multicodecCode : multicodecValue - }); - - /** - * 5. Set the verificationMethod.id value by concatenating identifier, - * a hash character (#), and the multibaseValue. If verificationMethod.id - * is not a valid DID URL, an invalidDidUrl error MUST be raised. - */ - verificationMethod.id = `${did}#${kemMultibaseValue}`; - try { - new URL(verificationMethod.id); - } catch (error: any) { - throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.'); - } - - /** - * 6. Set the publicKeyFormat value to the options.publicKeyFormat value. - * 7. If publicKeyFormat is not known to the implementation, an - * unsupportedPublicKeyType error MUST be raised. - */ - if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) { - throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`); - } - - /** - * 8. If options.enableExperimentalPublicKeyTypes is set to false and - * publicKeyFormat is not Multikey, JsonWebKey2020, or - * X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be - * raised. - */ - const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020']; - if (enableExperimentalPublicKeyTypes === false - && !(StandardPublicKeyTypes.includes(publicKeyFormat))) { - throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`); - } - - /** - * 9. Set verificationMethod.type to the publicKeyFormat value. - */ - verificationMethod.type = publicKeyFormat; - - /** - * 10. Set verificationMethod.controller to the identifier value. - * If verificationMethod.controller is not a valid DID, an invalidDid - * error MUST be raised. - */ - verificationMethod.controller = did; - if (!DidKeyMethod.validateIdentifier({ did })) { - throw new Error(`invalidDid: Invalid identifier format: ${did}`); - } - - /** - * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020, - * set the verificationMethod.publicKeyMultibase value to multibaseValue. - * - * Note: This implementation does not currently support the Multikey - * format. - */ - if (publicKeyFormat === 'X25519KeyAgreementKey2020') { - verificationMethod.publicKeyMultibase = kemMultibaseValue; - } - - /** - * 12. If publicKeyFormat is JsonWebKey2020, set the - * verificationMethod.publicKeyJwk value to the result of passing - * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm. - */ - if (publicKeyFormat === 'JsonWebKey2020') { - const jwkParams = await Jose.multicodecToJose({ code: multicodecValue }); - const jsonWebKey = await Jose.keyToJwk({ - keyMaterial : rawPublicKeyBytes, - keyType : 'public', - ...jwkParams - }); - // Ensure that "d" is NOT present. - if ('x' in jsonWebKey && !('d' in jsonWebKey)) { - verificationMethod.publicKeyJwk = jsonWebKey; - } - } - - /** - * 13. Return verificationMethod. - */ - return verificationMethod as VerificationMethod; - } - - /** - * Transform a multibase-encoded multicodec value to public encryption key - * components that are suitable for encrypting messages to a receiver. A - * mathematical proof elaborating on the safety of performing this operation - * is available in: - * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM} - */ - public static async deriveEncryptionKey(options: { - multibaseValue: string - }): Promise { - const { multibaseValue } = options; - - /** - * 1. Set publicEncryptionKey to an empty object. - */ - let publicEncryptionKey: Partial = {}; - - /** - * 2. Decode multibaseValue using the base58-btc multibase alphabet and - * set multicodecValue to the multicodec header for the decoded value. - * Implementers are cautioned to ensure that the multicodecValue is set - * to the result after performing varint decoding. - * - * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec - * header. - */ - const { - key: rawPublicKeyBytes, - multicodecCode: multicodecValue - } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue }); - - /** - * 4. If the multicodecValue is 0xed, derive a public X25519 encryption key - * by using the rawPublicKeyBytes and the algorithm defined in - * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP} - * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and - * set generatedPublicEncryptionKeyBytes to the result. - */ - if (multicodecValue === 0xed) { - const generatedPublicEncryptionKeyBytes = await Ed25519.convertPublicKeyToX25519({ - publicKey: rawPublicKeyBytes - }); - - /** - * 5. Set multicodecValue in publicEncryptionKey to 0xec. - * - * 6. Set rawPublicKeyBytes in publicEncryptionKey to - * generatedPublicEncryptionKeyBytes. - */ - publicEncryptionKey = { - key : generatedPublicEncryptionKeyBytes, - multicodecCode : 0xec - }; - } - - /** - * 7. Return publicEncryptionKey. - */ - return publicEncryptionKey as DidKeyDeriveEncryptionKeyResult; - } - - /** - * Decodes a multibase-encoded multicodec value into a verification method - * that is suitable for verifying digital signatures. - * @param options - Signature method creation algorithm inputs. - * @returns - A verification method. - */ - public static async createSignatureMethod(options: { - did: string, - enableExperimentalPublicKeyTypes: boolean, - multibaseValue: string, - publicKeyFormat: DidVerificationMethodType - }): Promise { - const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options; - - /** - * 1. Initialize verificationMethod to an empty object. - */ - const verificationMethod: Partial = {}; - - /** - * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing - * multibaseValue and options to a Decode Public Key algorithm. - */ - const { - key: rawPublicKeyBytes, - multicodecCode: multicodecValue, - multicodecName - } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue }); - - /** - * 3. Ensure the proper key length of rawPublicKeyBytes based on the - * multicodecValue {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}. - * If the byte length of rawPublicKeyBytes does not match the expected - * public key length for the associated multicodecValue, an - * invalidPublicKeyLength error MUST be raised. - */ - const actualLength = rawPublicKeyBytes.byteLength; - const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue]; - if (actualLength !== expectedLength) { - throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`); - } - - /** - * 4. Ensure the rawPublicKeyBytes are a proper encoding of the public - * key type as specified by the multicodecValue. This validation is often - * done by a cryptographic library when importing the public key by, - * for example, ensuring that an Elliptic Curve public key is a specific - * coordinate that exists on the elliptic curve. If an invalid public key - * value is detected, an invalidPublicKey error MUST be raised. - */ - let isValid = false; - switch (multicodecName) { - case 'secp256k1-pub': - isValid = await Secp256k1.validatePublicKey({ key: rawPublicKeyBytes }); - break; - case 'ed25519-pub': - isValid = await Ed25519.validatePublicKey({ key: rawPublicKeyBytes }); - break; - case 'x25519-pub': - // TODO: Validate key once/if X25519.validatePublicKey() is implemented. - // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes}) - isValid = true; - break; - } - if (!isValid) { - throw new Error('invalidPublicKey: Invalid public key detected.'); - } - - /** - * 5. Set the verificationMethod.id value by concatenating identifier, - * a hash character (#), and the multibaseValue. If verificationMethod.id - * is not a valid DID URL, an invalidDidUrl error MUST be raised. - */ - verificationMethod.id = `${did}#${multibaseValue}`; - try { - new URL(verificationMethod.id); - } catch (error: any) { - throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.'); - } - - /** - * 6. Set the publicKeyFormat value to the options.publicKeyFormat value. - * 7. If publicKeyFormat is not known to the implementation, an - * unsupportedPublicKeyType error MUST be raised. - */ - if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) { - throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`); - } - - /** - * 8. If options.enableExperimentalPublicKeyTypes is set to false and - * publicKeyFormat is not Multikey, JsonWebKey2020, or - * Ed25519VerificationKey2020, an invalidPublicKeyType error MUST be - * raised. - */ - const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020']; - if (enableExperimentalPublicKeyTypes === false - && !(StandardPublicKeyTypes.includes(publicKeyFormat))) { - throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`); - } - - /** - * 9. Set verificationMethod.type to the publicKeyFormat value. - */ - verificationMethod.type = publicKeyFormat; - - /** - * 10. Set verificationMethod.controller to the identifier value. - * If verificationMethod.controller is not a valid DID, an invalidDid - * error MUST be raised. - */ - verificationMethod.controller = did; - if (!DidKeyMethod.validateIdentifier({ did })) { - throw new Error(`invalidDid: Invalid identifier format: ${did}`); - } - - /** - * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020, - * set the verificationMethod.publicKeyMultibase value to multibaseValue. - * - * Note: This implementation does not currently support the Multikey - * format. - */ - if (publicKeyFormat === 'Ed25519VerificationKey2020') { - verificationMethod.publicKeyMultibase = multibaseValue; - } - - /** - * 12. If publicKeyFormat is JsonWebKey2020, set the - * verificationMethod.publicKeyJwk value to the result of passing - * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm. - */ - if (publicKeyFormat === 'JsonWebKey2020') { - const jwkParams = await Jose.multicodecToJose({ code: multicodecValue }); - const jsonWebKey = await Jose.keyToJwk({ - keyMaterial : rawPublicKeyBytes, - keyType : 'public', - ...jwkParams - }); - // Ensure that "d" is NOT present. - if ('x' in jsonWebKey && !('d' in jsonWebKey)) { - verificationMethod.publicKeyJwk = jsonWebKey; - } - } - - /** - * 13. Return verificationMethod. - */ - return verificationMethod as VerificationMethod; - } - - public static async generateKeySet(options?: { - keyAlgorithm?: typeof SupportedCryptoAlgorithms[number] - }): Promise { - // Generate Ed25519 keys, by default. - const { keyAlgorithm = 'Ed25519' } = options ?? {}; - - let keyPair: Web5Crypto.CryptoKeyPair; - - switch (keyAlgorithm) { - case 'Ed25519': { - keyPair = await new EdDsaAlgorithm().generateKey({ - algorithm : { name: 'EdDSA', namedCurve: 'Ed25519' }, - extractable : true, - keyUsages : ['sign', 'verify'] - }); - break; - } - - case 'secp256k1': { - keyPair = await new EcdsaAlgorithm().generateKey({ - algorithm : { name: 'ECDSA', namedCurve: 'secp256k1' }, - extractable : true, - keyUsages : ['sign', 'verify'] - }); - break; - } - - default: { - throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`); - } - } - - const publicKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.publicKey }) as PublicKeyJwk; - const privateKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.privateKey }) as PrivateKeyJwk; - - const keySet: DidKeyKeySet = { - verificationMethodKeys: [{ - publicKeyJwk, - privateKeyJwk, - relationships: ['authentication'] - }] - }; - - return keySet; - } - - /** - * Given the W3C DID Document of a `did:key` DID, return the identifier of - * the verification method key that will be used for signing messages and - * credentials, by default. - * - * @param document = DID Document to get the default signing key from. - * @returns Verification method identifier for the default signing key. - */ - public static async getDefaultSigningKey(options: { - didDocument: DidDocument - }): Promise { - const { didDocument } = options; - - if (didDocument.authentication - && Array.isArray(didDocument.authentication) - && didDocument.authentication.length > 0 - && typeof didDocument.authentication[0] === 'string') { - - const [verificationMethodId] = didDocument.authentication; - const signingKeyId = verificationMethodId; - - return signingKeyId; - } - } - - public static async resolve(options: { - didUrl: string, - resolutionOptions?: DidResolutionOptions - }): Promise { - const { didUrl, resolutionOptions: _ } = options; - // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution - - const parsedDid = parseDid({ didUrl }); - if (!parsedDid) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'invalidDid', - errorMessage : `Cannot parse DID: ${didUrl}` - } - }; - } - - if (parsedDid.method !== 'key') { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'methodNotSupported', - errorMessage : `Method not supported: ${parsedDid.method}` - } - }; - } - - const didDocument = await DidKeyMethod.createDocument({ did: parsedDid.did }); - - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument, - didDocumentMetadata : {}, - didResolutionMetadata : { - did: { - didString : parsedDid.did, - methodSpecificId : parsedDid.id, - method : parsedDid.method - } - } - }; - } - - public static validateIdentifier(options: { - did: string - }): boolean { - const { did } = options; - - const { method, id: multibaseValue } = parseDid({ didUrl: did }); - const [scheme] = did.split(':', 1); - - /** - * Note: The W3C DID specification makes no mention of a version value - * being part of the DID syntax. Additionally, there does not - * appear to be any real-world usage of the version number. - * Consequently, this implementation will ignore the version - * related guidance in the did:key specification. - */ - const version = '1'; - - return ( - scheme !== 'did' || - method !== 'key' || - parseInt(version) > 0 || - universalTypeOf(multibaseValue) !== 'String' || - !multibaseValue.startsWith('z') - ); - } -} \ No newline at end of file diff --git a/packages/dids/old/tests/did-key.spec.ts b/packages/dids/old/tests/did-key.spec.ts deleted file mode 100644 index 682d2dbe4..000000000 --- a/packages/dids/old/tests/did-key.spec.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { expect } from 'chai'; - -import type { DidKeyCreateOptions, DidKeyCreateDocumentOptions } from '../src/did-key.js'; - -import { DidKeyMethod } from '../src/did-key.js'; -import { didKeyCreateTestVectors, didKeyCreateDocumentTestVectors, } from './fixtures/test-vectors/did-key.js'; -import { DidDocument } from '../src/types.js'; - -describe('DidKeyMethod', () => { - describe('create()', () => { - it('creates a DID with Ed25519 keys, by default', async () => { - const portableDid = await DidKeyMethod.create(); - - // Verify expected result. - expect(portableDid).to.have.property('did'); - expect(portableDid).to.have.property('document'); - expect(portableDid).to.have.property('keySet'); - expect(portableDid.keySet).to.have.property('verificationMethodKeys'); - expect(portableDid.keySet.verificationMethodKeys).to.have.length(1); - expect(portableDid.keySet.verificationMethodKeys?.[0]).to.have.property('publicKeyJwk'); - expect(portableDid.keySet.verificationMethodKeys?.[0]).to.have.property('privateKeyJwk'); - expect(portableDid.keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('alg', 'EdDSA'); - expect(portableDid.keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('crv', 'Ed25519'); - }); - - it('creates a DID with secp256k1 keys, if specified', async () => { - const portableDid = await DidKeyMethod.create({ keyAlgorithm: 'secp256k1' }); - - // Verify expected result. - expect(portableDid).to.have.property('did'); - expect(portableDid).to.have.property('document'); - expect(portableDid).to.have.property('keySet'); - expect(portableDid.keySet).to.have.property('verificationMethodKeys'); - expect(portableDid.keySet.verificationMethodKeys).to.have.length(1); - expect(portableDid.keySet.verificationMethodKeys?.[0]).to.have.property('publicKeyJwk'); - expect(portableDid.keySet.verificationMethodKeys?.[0]).to.have.property('privateKeyJwk'); - expect(portableDid.keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('alg', 'ES256K'); - expect(portableDid.keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('crv', 'secp256k1'); - }); - - for (const vector of didKeyCreateTestVectors ) { - it(`passes test vector ${vector.id}`, async () => { - const portableDid = await DidKeyMethod.create(vector.input as DidKeyCreateOptions); - - expect(portableDid).to.deep.equal(vector.output); - }); - } - }); - - describe('createDocument()', () => { - it('accepts an alternate default context', async () => { - const didDocument = await DidKeyMethod.createDocument({ - did : 'did:key:z6MkjVM3rLLh9KCFBfKPNA5oEBq6KXXsPu72FDX7cZzYJN3y', - defaultContext : 'https://www.w3.org/ns/did/v99', - publicKeyFormat : 'JsonWebKey2020' - }); - - expect(didDocument['@context']).to.include('https://www.w3.org/ns/did/v99'); - }); - - for (const vector of didKeyCreateDocumentTestVectors ) { - it(`passes test vector ${vector.id}`, async () => { - const didDocument = await DidKeyMethod.createDocument(vector.input as DidKeyCreateDocumentOptions); - expect(didDocument).to.deep.equal(vector.output); - }); - } - }); - - describe('getDefaultSigningKey()', () => { - it('returns the did:key default signing key, when present', async () => { - const partialDidDocument = { - authentication: [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ] - } as unknown as DidDocument; - - const defaultSigningKeyId = await DidKeyMethod.getDefaultSigningKey({ - didDocument: partialDidDocument - }); - - expect(defaultSigningKeyId).to.equal('did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk'); - }); - - it('returns undefined if the did:key default signing key is not present', async () => { - const partialDidDocument = { - authentication: [{ - id : 'did:key:z6LSgmjjYTAffdKWLmBbYxe5d5fgLzuZxi6PEbHZNt3Cifvg#z6LSgmjjYTAffdKWLmBbYxe5d5fgLzuZxi6PEbHZNt3Cifvg', - type : 'JsonWebKey2020', - controller : 'did:key:z6LSgmjjYTAffdKWLmBbYxe5d5fgLzuZxi6PEbHZNt3Cifvg', - publicKeyJwk : { - kty : 'OKP', - crv : 'X25519', - x : 'S7cqN2_-PIPK6fVjR6PrQ1YZyyw61ajVnAJClFcXVhk' - } - }], - keyAgreement: [ - 'did:key:z6LSqCkip7X19obTwRpWc8ZLLCiXLzVQBFpcBAsTW38m6Rzs#z6LSqCkip7X19obTwRpWc8ZLLCiXLzVQBFpcBAsTW38m6Rzs' - ] - } as unknown as DidDocument; - - const defaultSigningKeyId = await DidKeyMethod.getDefaultSigningKey({ - didDocument: partialDidDocument - }); - - expect(defaultSigningKeyId).to.be.undefined; - }); - }); -}); \ No newline at end of file diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 5aebdc951..9d7f614f8 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -502,81 +502,6 @@ export class DidDht extends DidMethod { return did; } - /** - * Instantiates a `Did` object from an existing DID using keys in an external Key Management - * System (KMS). - * - * This method returns a `Did` object by resolving an existing `did:dht` DID URI and verifying - * that all associated keys are present in the provided key manager. - * - * @remarks - * The method verifies the presence of key material for every verification method in the DID - * document within the given KMS. If any key is missing, an error is thrown. - * - * This approach ensures that the resulting `Did` object is fully operational with the provided - * key manager and that all cryptographic operations related to the DID can be performed. - * - * @param params - The parameters for the `fromKeyManager` operation. - * @param params.didUri - The URI of the DID to be instantiated. - * @param params.keyManager - The Key Management System to be used for key management operations. - * @returns A Promise resolving to the instantiated `Did` object. - * @throws An error if any key in the DID document is not present in the provided KMS. - * - * @example - * ```ts - * // Assuming keyManager already contains the key material for the DID. - * const didUri = 'did:dht:example'; - * const did = await DidDht.fromKeyManager({ didUri, keyManager }); - * // The 'did' is now an instance of Did, linked with the provided keyManager. - * ``` - */ - public static async fromKeyManager({ didUri, keyManager }: { - didUri: string; - keyManager: CryptoApi; - }): Promise { - // Resolve the DID URI to a DID document and document metadata. - const { didDocument, didDocumentMetadata, didResolutionMetadata } = await DidDht.resolve(didUri); - - // If the given DID isn't "did:dht", throw an error. - if (didResolutionMetadata.error === DidErrorCode.MethodNotSupported) { - throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`); - } - - // Verify the DID Resolution Result includes a DID document containing verification methods. - if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { - throw new Error(`DID document for '${didUri}' is missing verification methods`); - } - - // Validate that the key material for every verification method in the DID document is present - // in the provided key manager. - for (let vm of didDocument.verificationMethod) { - if (!vm.publicKeyJwk) { - throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); - } - - // Compute the key URI of the verification method's public key. - const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk }); - - // Verify that the key is present in the key manager. If not, an error is thrown. - await keyManager.getPublicKey({ keyUri }); - } - - // Define DID Metadata, including the registered DID types and published state. - const metadata: DidMetadata = { - ...didDocumentMetadata?.published && { published: didDocumentMetadata.published }, - ...didDocumentMetadata?.types && { types: didDocumentMetadata.types } - }; - - // Define a function that returns a signer for the DID. - const getSigner = async (params?: { keyUri?: string }) => await DidDht.getSigner({ - didDocument, - keyManager, - keyUri: params?.keyUri - }); - - return { didDocument, getSigner, keyManager, metadata, uri: didUri }; - } - /** * Instantiates a `Did` object for the `did:dht` method from a given {@link PortableDid}. * diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 90b7104fc..40559ed5e 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -128,8 +128,11 @@ export interface DidJwkCreateOptions extends DidCreateOptions { * }] * }); * - * // Export a DID's key to a key set - * const keySet = await DidJwk.toKeys({ did }); + * // Convert a DID object to a portable format + * const portableDid = await DidJwk.toKeys({ did }); + * + * // Reconstruct a DID object from a portable format + * const did = await DidJwk.fromKeys(portableDid); * ``` */ export class DidJwk extends DidMethod { @@ -192,79 +195,7 @@ export class DidJwk extends DidMethod { } /** - * Instantiates a `Did` object from an existing DID using keys in an external Key Management - * System (KMS). - * - * This method returns a `Did` object by resolving an existing `did:jwk` DID URI and verifying - * that all associated keys are present in the provided key manager. - * - * @remarks - * The method verifies the presence of key material for every verification method in the DID - * document within the given KMS. If any key is missing, an error is thrown. - * - * This approach ensures that the resulting `Did` object is fully operational with the provided - * key manager and that all cryptographic operations related to the DID can be performed. - * - * @example - * ```ts - * // Assuming keyManager already contains the key material for the DID. - * const didUri = 'did:jwk:example'; - * const did = await DidJwk.fromKeyManager({ didUri, keyManager }); - * // The 'did' is now an instance of Did, linked with the provided keyManager. - * ``` - * - * @param params - The parameters for the `fromKeyManager` operation. - * @param params.didUri - The URI of the DID to be instantiated. - * @param params.keyManager - The Key Management System to be used for key management operations. - * @returns A Promise resolving to the instantiated `Did` object. - * @throws An error if any key in the DID document is not present in the provided KMS. - */ - public static async fromKeyManager({ didUri, keyManager }: { - didUri: string; - keyManager: CryptoApi; - }): Promise { - // Resolve the DID URI to a DID Document. - const { didDocument, didResolutionMetadata } = await DidJwk.resolve(didUri); - - // If the given DID isn't "did:jwk", throw an error. - if (didResolutionMetadata.error === DidErrorCode.MethodNotSupported) { - throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`); - } - - // Validate that the DID Resolution Result includes a DID document containing verification methods. - if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { - throw new Error(`DID document for '${didUri}' is missing verification methods`); - } - - // Validate that the key material for every verification method in the DID document is present - // in the provided key manager. - for (let vm of didDocument.verificationMethod) { - if (!vm.publicKeyJwk) { - throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); - } - - // Compute the key URI of the verification method's public key. - const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk }); - - // Verify that the key is present in the key manager. If not, an error is thrown. - await keyManager.getPublicKey({ keyUri }); - } - - // DID Metadata is initially empty for this DID method. - const metadata: DidMetadata = {}; - - // Define a function that returns a signer for the DID. - const getSigner = async (params?: { keyUri?: string }) => await DidJwk.getSigner({ - didDocument, - keyManager, - keyUri: params?.keyUri - }); - - return { didDocument, getSigner, keyManager, metadata, uri: didUri }; - } - - /** - * Instantiates a `Did` object for the `did:dht` method from a given {@link PortableDid}. + * Instantiates a `Did` object for the `did:jwk` method from a given {@link PortableDid}. * * This method allows for the creation of a `Did` object using pre-existing key material, * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly @@ -301,6 +232,7 @@ export class DidJwk extends DidMethod { verificationMethods }: { keyManager?: CryptoApi & KeyImporterExporter; + options?: unknown; } & PortableDid): Promise { if (!verificationMethods || verificationMethods.length !== 1) { throw new Error(`Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index 8493e8507..6e58b6bc2 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -1,5 +1,5 @@ import type { MulticodecCode, MulticodecDefinition, RequireOnly } from '@web5/common'; -import type { AsymmetricKeyConverter, CryptoApi, InferKeyGeneratorAlgorithm, Jwk } from '@web5/crypto'; +import type { AsymmetricKeyConverter, CryptoApi, InferKeyGeneratorAlgorithm, Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams } from '@web5/crypto'; import { Convert, Multicodec, universalTypeOf } from '@web5/common'; import { @@ -169,11 +169,11 @@ export enum DidKeyRegisteredKeyType { X25519 = 'X25519' } -export const DidKeyVerificationMethodType: Record = { +export const DidKeyVerificationMethodType = { Ed25519VerificationKey2020 : 'https://w3id.org/security/suites/ed25519-2020/v1', JsonWebKey2020 : 'https://w3id.org/security/suites/jws-2020/v1', X25519KeyAgreementKey2020 : 'https://w3id.org/security/suites/x25519-2020/v1', -}; +} as const; /** * Private helper that maps algorithm identifiers to their corresponding DID Key @@ -192,7 +192,13 @@ const AlgorithmToKeyTypeMap = { /** * The `DidKey` class provides an implementation of the 'did:key' DID method. * - * !TODO: Add the rest of the class documentation. + * Features: + * - DID Creation: Create new `did:key` DIDs. + * - DID Key Management: Instantiate a DID object from an existing verification method key set or + * or a key in a Key Management System (KMS). If supported by the KMS, a DID's + * key can be exported to a portable DID format. + * - DID Resolution: Resolve a `did:key` to its corresponding DID Document. + * - Signature Operations: Sign and verify messages using keys associated with a DID. * * @remarks * The `did:key` DID method uses a single public key to generate a DID and does not rely @@ -221,8 +227,54 @@ const AlgorithmToKeyTypeMap = { * * @see {@link https://w3c-ccg.github.io/did-method-key/ | DID Key Specification} * - * @example - * !TODO: Add examples. +* @example + * ```ts + * // DID Creation + * const did = await DidKey.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKeyManager(); + * const did = await DidKey.create({ keyManager }); + * + * // DID Resolution + * const resolutionResult = await DidKey.resolve({ did: did.uri }); + * + * // Signature Operations + * const signer = await did.getSigner(); + * const signature = await signer.sign({ data: new TextEncoder().encode('Message') }); + * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature }); + * + * // Key Management + * + * // Instantiate a DID object from an existing key in a KMS + * const did = await DidKey.fromKeyManager({ + * didUri: 'did:key:z6MkpUzNmYVTGpqhStxK8yRKXWCRNm1bGYz8geAg2zmjYHKX', + * keyManager + * }); + * + * // Instantiate a DID object from an existing verification method key + * const did = await DidKey.fromKeys({ + * verificationMethods: [{ + * publicKeyJwk: { + * kty: 'OKP', + * crv: 'Ed25519', + * x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4' + * }, + * privateKeyJwk: { + * kty: 'OKP', + * crv: 'Ed25519', + * x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4', + * d: 'bdcGE4KzEaekOwoa-ee3gAm1a991WvNj_Eq3WKyqTnE' + * } + * }] + * }); + * + * // Convert a DID object to a portable format + * const portableDid = await DidKey.toKeys({ did }); + * + * // Reconstruct a DID object from a portable format + * const did = await DidKey.fromKeys(portableDid); + * ``` */ export class DidKey extends DidMethod { @@ -232,8 +284,7 @@ export class DidKey extends DidMethod { public static methodName = 'key'; /** - * Creates a new DID using the `did:key` method formed from either a newly generated key or an - * existing key set. + * Creates a new DID using the `did:key` method formed from a newly generated key. * * @remarks * The DID URI is formed by @@ -245,21 +296,28 @@ export class DidKey extends DidMethod { * This method can optionally derive an encryption key from the public key used to create the DID * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be * used for encrypted communication, in addition to signature verification. To enable this - * feature, first specify an `algorithm` of `Ed25519` or provide a `keySet` referencing an - * `Ed25519` key and then set the `enableEncryptionKeyDerivation` option to `true`. + * feature, specify an `algorithm` of `Ed25519` as either a top-level option or in a + * `verificationMethod` and set the `enableEncryptionKeyDerivation` option to `true`. * * Notes: * - If no `options` are given, by default a new Ed25519 key will be generated. - * - The `algorithm` and `keySet` options are mutually exclusive. If both are given, an - * error will be thrown. - * - If a `keySet` is given, it must contain exactly one key. + * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given, + * an error will be thrown. + * + * @example + * ```ts + * // DID Creation + * const did = await DidKey.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKeyManager(); + * const did = await DidKey.create({ keyManager }); + * ``` * * @param params - The parameters for the create operation. * @param params.keyManager - Key Management System (KMS) used to generate keys and sign data. * @param params.options - Optional parameters that can be specified when creating a new DID. * @returns A Promise resolving to a {@link Did} object representing the new DID. - * @throws `TypeError` if both `algorithm` and `keySet` options are provided, as they - * are mutually exclusive. */ public static async create({ keyManager = new LocalKeyManager(), @@ -286,6 +344,69 @@ export class DidKey extends DidMethod { return did; } + /** + * Instantiates a `Did` object for the `did:jwk` method from a given {@link PortableDid}. + * + * This method allows for the creation of a `Did` object using pre-existing key material, + * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly + * useful when the key material is already available and you want to construct a `Did` object + * based on these keys, instead of generating new keys. + * + * @remarks + * The `verificationMethods` array must contain exactly one key since the `did:jwk` method only + * supports a single verification method. + * + * The key material (both public and private keys) should be provided in JWK format. The method + * handles the inclusion of these keys in the DID Document and sets up the necessary verification + * relationships. + * + * @example + * ```ts + * // Example with an existing key in JWK format. + * const verificationMethods = [{ + * publicKeyJwk: { // public key in JWK format }, + * privateKeyJwk: { // private key in JWK format } + * }]; + * const did = await DidKey.fromKeys({ verificationMethods }); + * ``` + * + * @param params - The parameters for the `fromKeys` operation. + * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to + * generate keys and sign data. If not given, a new + * {@link @web5/crypto#LocalKeyManager} instance will be created and used. + * @returns A Promise resolving to a `Did` object representing the DID formed from the provided keys. + * @throws An error if the `verificationMethods` array does not contain exactly one entry. + */ + public static async fromKeys({ + keyManager = new LocalKeyManager(), + verificationMethods, + options = {} + }: { + keyManager?: CryptoApi & KeyImporterExporter; + options?: DidKeyCreateOptions; + } & PortableDid): Promise { + if (!verificationMethods || verificationMethods.length !== 1) { + throw new Error(`Only one verification method can be specified but ${verificationMethods?.length ?? 0} were given`); + } + + if (!(verificationMethods[0].privateKeyJwk && verificationMethods[0].publicKeyJwk)) { + throw new Error(`Verification method does not contain a public and private key in JWK format`); + } + + // Store the private key in the key manager. + await keyManager.importKey({ key: verificationMethods[0].privateKeyJwk }); + + // Create the DID object from the given key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidKey.fromPublicKey({ + keyManager, + publicKey: verificationMethods[0].publicKeyJwk, + options + }); + + return did; + } + /** * Given the W3C DID Document of a `did:key` DID, return the verification method that will be used * for signing messages and credentials. With DID Key, the first verification method in the DID @@ -395,6 +516,9 @@ export class DidKey extends DidMethod { * multibaseValue MUST be a string and begin with the letter z. If any * of these requirements fail, an invalidDid error MUST be raised. */ + if (parsedDid.method !== DidKey.methodName) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`); + } if (!DidKey.validateIdentifier(parsedDid)) { throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); } @@ -493,7 +617,7 @@ export class DidKey extends DidMethod { // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL} const verificationMethodTypes = getVerificationMethodTypes({ didDocument }); verificationMethodTypes.forEach((typeName: string) => { - const typeUrl = DidKeyVerificationMethodType[typeName]; + const typeUrl = DidKeyVerificationMethodType[typeName as keyof typeof DidKeyVerificationMethodType]; contextArray.push(typeUrl); }); didDocument['@context'] = contextArray; @@ -866,11 +990,11 @@ export class DidKey extends DidMethod { const version = '1'; return ( - scheme !== 'did' || - method !== 'key' || - Number(version) > 0 || - universalTypeOf(multibaseValue) !== 'String' || - !multibaseValue.startsWith('z') + scheme === 'did' && + method === 'key' && + Number(version) > 0 && + universalTypeOf(multibaseValue) === 'String' && + multibaseValue.startsWith('z') ); } } @@ -1071,15 +1195,20 @@ export class DidKeyUtils { * @param params - The parameters for the conversion. * @param params.multibaseKeyId - The multibase identifier string of the key. * @returns An object containing the key as a `Uint8Array` and its multicodec code and name. + * @throws `DidError` if the multibase identifier is invalid. */ public static multibaseIdToKeyBytes({ multibaseKeyId }: { multibaseKeyId: string }): Required { - const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc(); - const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array(); - const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey }); + try { + const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc(); + const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array(); + const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey }); - return { keyBytes: data, multicodecCode: code, multicodecName: name }; + return { keyBytes: data, multicodecCode: code, multicodecName: name }; + } catch (error: any) { + throw new DidError(DidErrorCode.InvalidDid, `Invalid multibase identifier: ${multibaseKeyId}`); + } } /** diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index 00a27e374..5843dca3c 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -17,6 +17,7 @@ import type { import { getVerificationMethodByKey } from '../utils.js'; import { DidVerificationRelationship } from '../types/did-core.js'; +import { DidError, DidErrorCode } from '../did-error.js'; /** * Represents a Decentralized Identifier (DID) along with its convenience functions. @@ -284,6 +285,82 @@ export interface PortableDidVerificationMethod extends Partial { + // Resolve the DID URI to a DID document and document metadata. + const { didDocument, didDocumentMetadata, didResolutionMetadata } = await this.resolve(didUri); + + // Verify the DID method is supported. + if (didResolutionMetadata.error === DidErrorCode.MethodNotSupported) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`); + } + + // Verify the DID Resolution Result includes a DID document containing verification methods. + if (!(didDocument && Array.isArray(didDocument.verificationMethod) && didDocument.verificationMethod.length > 0)) { + throw new Error(`DID document for '${didUri}' is missing verification methods`); + } + + // Validate that the key material for every verification method in the DID document is present + // in the provided key manager. + for (let vm of didDocument.verificationMethod) { + if (!vm.publicKeyJwk) { + throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); + } + + // Compute the key URI of the verification method's public key. + const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk }); + + // Verify that the key is present in the key manager. If not, an error is thrown. + await keyManager.getPublicKey({ keyUri }); + } + + // Define DID Metadata, including the registered DID types and published state. + // const metadata: DidMetadata = { + // ...didDocumentMetadata?.published && { published: didDocumentMetadata.published }, + // ...didDocumentMetadata?.types && { types: didDocumentMetadata.types } + // }; + const metadata: DidMetadata = didDocumentMetadata; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await this.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: didUri }; + } + /** * Given a W3C DID Document, return a {@link Signer} that can be used to sign messages, * credentials, or arbitrary data. @@ -366,6 +443,19 @@ export class DidMethod { throw new Error(`Not implemented: Classes extending DidMethod must implement getSigningMethod()`); } + /** + * MUST be implemented by all DID method implementations that extend {@link DidMethod}. + * + * Resolves a DID URI to a DID Document. + * + * @param _didUri - The DID to be resolved. + * @param _options - Optional parameters for resolving the DID. + * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. + */ + public static async resolve(_didUri: string, _options?: DidResolutionOptions): Promise { + throw new Error(`Not implemented: Classes extending DidMethod must implement resolve()`); + } + /** * Converts a `Did` object to a portable format containing the URI and verification methods * associated with the DID. @@ -387,7 +477,7 @@ export class DidMethod { * @example * ```ts * // Assuming `did` is an instance of Did - * const portableDid = await DidJwk.toKeys({ did }); + * const portableDid = await DidMethod.toKeys({ did }); * // portableDid now contains the verification methods and their associated keys. * ``` * diff --git a/packages/dids/tests/fixtures/test-vectors/did-key.ts b/packages/dids/tests/fixtures/test-vectors/did-key.ts deleted file mode 100644 index 580ac1162..000000000 --- a/packages/dids/tests/fixtures/test-vectors/did-key.ts +++ /dev/null @@ -1,318 +0,0 @@ -export const didKeyCreateDocumentTestVectors = [ - { - id : 'did.createDocument.1', - input : { - did : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - publicKeyFormat : 'JsonWebKey2020' - }, - output: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'ZuVpK6HnahBtV1Y_jhnYK-fqHAz3dXmWXT_h-J7SL6I' - } - } - ], - 'assertionMethod': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'authentication': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityDelegation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityInvocation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ] - } - }, - { - id : 'did.createDocument.2', - input : { - did : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - publicKeyFormat : 'Ed25519VerificationKey2020' - }, - output: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/ed25519-2020/v1' - ], - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'type' : 'Ed25519VerificationKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyMultibase' : 'z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - } - ], - 'assertionMethod': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'authentication': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityDelegation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityInvocation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ] - } - }, - { - id : 'did.createDocument.3', - input : { - did : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - enableEncryptionKeyDerivation : true, - publicKeyFormat : 'JsonWebKey2020' - }, - output: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'ZuVpK6HnahBtV1Y_jhnYK-fqHAz3dXmWXT_h-J7SL6I' - } - }, - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyJwk' : { - 'crv' : 'X25519', - 'kty' : 'OKP', - 'x' : 'FrLpNU0FVX4oAByhAbU71h4yb-WMr6penULFCzbMtxo', - }, - } - ], - 'assertionMethod': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'authentication': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityDelegation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityInvocation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'keyAgreement': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd' - ] - } - }, - { - id : 'did.createDocument.4', - input : { - did : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - enableEncryptionKeyDerivation : true, - publicKeyFormat : 'Ed25519VerificationKey2020' - }, - output: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/ed25519-2020/v1', - 'https://w3id.org/security/suites/x25519-2020/v1' - ], - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'type' : 'Ed25519VerificationKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyMultibase' : 'z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - }, - { - 'id' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd', - 'type' : 'X25519KeyAgreementKey2020', - 'controller' : 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D', - 'publicKeyMultibase' : 'z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd' - } - ], - 'assertionMethod': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'authentication': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityDelegation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'capabilityInvocation': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D' - ], - 'keyAgreement': [ - 'did:key:z6MkmNvXGmVuux5W63nXKEM8zoxFmDLNfe7siCKG2GM7Kd8D#z6LSdCnN59MPkRCaVvXczoipz5tMcPpjrCnvqBcHHjCDohYd' - ] - } - } -]; - -export const didKeyCreateTestVectors = [ - { - id : 'did.create.1', - input : { - keySet: { - verificationMethodKeys: [{ - 'publicKeyJwk': { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - }, - relationships: ['authentication'] - }], - }, - publicKeyAlgorithm : 'Ed25519', - publicKeyFormat : 'JsonWebKey2020' - }, - output: { - did : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - document : { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'id' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - } - } - ], - 'assertionMethod': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'authentication': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'capabilityDelegation': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'capabilityInvocation': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - }, - keySet: { - verificationMethodKeys: [{ - 'publicKeyJwk': { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - }, - relationships: ['authentication'] - }], - }, - } - }, - { - id : 'did.create.2', - input : { - enableEncryptionKeyDerivation : true, - keySet : { - verificationMethodKeys: [{ - publicKeyJwk: { - alg : 'EdDSA', - crv : 'Ed25519', - kty : 'OKP', - x : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - }, - relationships: ['authentication'] - }], - }, - publicKeyAlgorithm : 'Ed25519', - publicKeyFormat : 'JsonWebKey2020' - }, - output: { - did : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - document : { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/jws-2020/v1' - ], - 'id' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'verificationMethod' : [ - { - 'id' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'type' : 'JsonWebKey2020', - 'controller' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'publicKeyJwk' : { - 'alg' : 'EdDSA', - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - } - }, - { - 'controller' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk', - 'type' : 'JsonWebKey2020', - 'id' : 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6LSjqybG4FgDYHxo4v9tWzgTpCm9a3b9K3QYqicCabqWeHQ', - 'publicKeyJwk' : { - 'crv' : 'X25519', - 'kty' : 'OKP', - 'x' : 'eWA3oUNKm3nZN0vqiC_tClPCkBznN5R0Y9NofJkoaXM' - } - } - ], - 'assertionMethod': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'authentication': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'capabilityDelegation': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'capabilityInvocation': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk' - ], - 'keyAgreement': [ - 'did:key:z6MkrCigh4zugDVEieqt4WbtWParigHeH5TEYEuKcSyCykUk#z6LSjqybG4FgDYHxo4v9tWzgTpCm9a3b9K3QYqicCabqWeHQ' - ] - }, - keySet: { - verificationMethodKeys: [{ - publicKeyJwk: { - alg : 'EdDSA', - crv : 'Ed25519', - kty : 'OKP', - x : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - }, - relationships: ['authentication'] - }], - }, - } - } -]; \ No newline at end of file diff --git a/packages/dids/tests/methods/did-jwk.spec.ts b/packages/dids/tests/methods/did-jwk.spec.ts index 676f425a8..3cd849328 100644 --- a/packages/dids/tests/methods/did-jwk.spec.ts +++ b/packages/dids/tests/methods/did-jwk.spec.ts @@ -160,7 +160,7 @@ describe('DidJwk', () => { expect(did).to.have.property('getSigner'); expect(did).to.have.property('keyManager'); expect(did).to.have.property('metadata'); - expect(did).to.have.property('uri', 'did:jwk:eyJrdHkiOiJPS1AiLCJjcnYiOiJFZDI1NTE5IiwieCI6IjNFQmFfRUxvczJhbHZMb2pxSVZjcmJLcGlyVlhqNmNqVkQ1djJWaHdMejgifQ'); + expect(did).to.have.property('uri', didUri); }); it('returns a DID with a getSigner function that can sign and verify data', async () => { diff --git a/packages/dids/tests/methods/did-key.spec.ts b/packages/dids/tests/methods/did-key.spec.ts index 12701b749..660f03b31 100644 --- a/packages/dids/tests/methods/did-key.spec.ts +++ b/packages/dids/tests/methods/did-key.spec.ts @@ -1,11 +1,15 @@ import type { Jwk } from '@web5/crypto'; +import sinon from 'sinon'; import { expect } from 'chai'; import { LocalKeyManager } from '@web5/crypto'; +import type { PortableDid, PortableDidVerificationMethod } from '../../src/methods/did-method.js'; + +import { DidErrorCode } from '../../src/did-error.js'; import { DidKey, DidKeyUtils } from '../../src/methods/did-key.js'; -describe.only('DidKey', () => { +describe('DidKey', () => { let keyManager: LocalKeyManager; before(() => { @@ -82,6 +86,28 @@ describe.only('DidKey', () => { ).to.have.property('uri'); }); + it('supports multibase and JWK public key format', async () => { + let did = await DidKey.create({ keyManager, options: { publicKeyFormat: 'JsonWebKey2020' } }); + expect(did.didDocument.verificationMethod![0]!.publicKeyJwk).to.exist; + expect(did.didDocument.verificationMethod![0]!.publicKeyMultibase).to.not.exist; + + did = await DidKey.create({ keyManager, options: { publicKeyFormat: 'Ed25519VerificationKey2020' } }); + expect(did.didDocument.verificationMethod![0]!.publicKeyJwk).to.not.exist; + expect(did.didDocument.verificationMethod![0]!.publicKeyMultibase).to.exist; + }); + + it('accepts an alternate default context', async () => { + const did = await DidKey.create({ + options: { + defaultContext : 'https://www.w3.org/ns/did/v99', + publicKeyFormat : 'JsonWebKey2020' + } + }); + + expect(did.didDocument['@context']).to.not.include('https://www.w3.org/ns/did/v1'); + expect(did.didDocument['@context']).to.include('https://www.w3.org/ns/did/v99'); + }); + it('returns a getSigner() function that creates valid signatures that can be verified', async () => { const did = await DidKey.create({ keyManager, options: { algorithm: 'Ed25519' } }); @@ -123,6 +149,312 @@ describe.only('DidKey', () => { }); }); + describe('fromKeyManager()', () => { + let didUri: string; + let keyManager: LocalKeyManager; + let privateKey: Jwk; + + before(() => { + keyManager = new LocalKeyManager(); + }); + + beforeEach(() => { + didUri = 'did:key:z6MkqBvAA4RBFFATVs7TXxEf4FcL1QY3JntYvwAYJMptDt5D'; + + privateKey = { + kty : 'OKP', + crv : 'Ed25519', + x : 'n4JbpJYkl77eGav9miqxHJsf-hoZl7GrbcrTmLJ9NBA', + d : 'JZPFC1MVj65ZUnj1HWTUDqvdQU6W2yBdZXMrRxDSqVA' + }; + }); + + it('returns a DID Key from existing keys present in a key manager', async () => { + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); + + const did = await DidKey.fromKeyManager({ didUri, keyManager }); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', didUri); + }); + + it('returns a DID with a getSigner function that can sign and verify data', async () => { + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); + + const did = await DidKey.fromKeyManager({ didUri, keyManager }); + + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: privateKey }); + + const did = await DidKey.fromKeyManager({ didUri, keyManager }); + + // Retrieve the key URI of the verification method's public key. + const { d, ...publicKey } = privateKey; // Remove the private key component + const keyUri = await did.keyManager.getKeyUri({ key: publicKey }); + + const signer = await did.getSigner({ keyUri }); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('throws an error if the given DID URI cannot be resolved', async () => { + const didUri = 'did:key:...'; + try { + await DidKey.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } + }); + + it('throws an error if an unsupported DID method is given', async () => { + try { + await DidKey.fromKeyManager({ didUri: 'did:example:z6Mk', keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.code).to.equal(DidErrorCode.MethodNotSupported); + } + }); + + it('throws an error if the resolved DID document lacks any verification methods', async () => { + // Stub the DID resolve method to return a DID document without a verificationMethod property. + sinon.stub(DidKey, 'resolve').returns(Promise.resolve({ + didDocument : { id: 'did:key:...' }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + const didUri = 'did:key:...'; + try { + await DidKey.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } finally { + sinon.restore(); + } + + // Stub the DID resolve method to return a DID document an empty verificationMethod property. + sinon.stub(DidKey, 'resolve').returns(Promise.resolve({ + didDocument : { id: 'did:key:...', verificationMethod: [] }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + try { + await DidKey.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('missing verification methods'); + } finally { + sinon.restore(); + } + }); + + it('throws an error if the resolved DID document is missing a public key', async () => { + // Stub the DID resolution method to return a DID document with no verification methods. + sinon.stub(DidKey, 'resolve').returns(Promise.resolve({ + didDocument: { + id : 'did:key:...', + verificationMethod : [{ + id : 'did:key:...#0', + type : 'JsonWebKey2020', + controller : 'did:key:...' + }], + }, + didDocumentMetadata : {}, + didResolutionMetadata : {} + })); + + const didUri = 'did:key:...'; + try { + await DidKey.fromKeyManager({ didUri, keyManager }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public key'); + } finally { + sinon.restore(); + } + }); + }); + + describe('fromKeys()', () => { + let portableDid: PortableDid; + + beforeEach(() => { + // Define a DID to use for the test. + portableDid = { + uri : 'did:key:z6MkkGkByH7rSY3uxDEPTk1CZzPG5hvf564ABFLQzCFwyYNN', + verificationMethods : [{ + publicKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : 'VnSOQ-n7kRcYd0XGW2MNCv7DDY5py5XhNcjM7-Y1HVM' + }, + privateKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : 'VnSOQ-n7kRcYd0XGW2MNCv7DDY5py5XhNcjM7-Y1HVM', + d : 'iTD5DIOKZNkwgzsND-I8CLIXmgTxfQ1HUzl9fpMktAo' + }, + purposes: ['authentication'] + }] + }; + }); + + it('returns a DID Key from the given set of verification method keys', async () => { + const did = await DidKey.fromKeys(portableDid); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', portableDid.uri); + }); + + it('returns a DID with a getSigner function that can sign and verify data', async () => { + const did = await DidKey.fromKeys(portableDid); + const signer = await did.getSigner(); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('returns a DID with a getSigner function that accepts a specific keyUri', async () => { + const did = await DidKey.fromKeys(portableDid); + + // Retrieve the key URI of the verification method's public key. + const keyUri = await did.keyManager.getKeyUri({ key: portableDid.verificationMethods![0].publicKeyJwk! }); + + const signer = await did.getSigner({ keyUri }); + const data = new Uint8Array([1, 2, 3]); + const signature = await signer.sign({ data }); + const isValid = await signer.verify({ data, signature }); + + expect(signature).to.have.length(64); + expect(isValid).to.be.true; + }); + + it('throws an error if no verification methods are given', async () => { + try { + // @ts-expect-error - Test case where verificationMethods is undefined. + await DidKey.fromKeys({}); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is empty', async () => { + try { + await DidKey.fromKeys({ verificationMethods: [] }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + + it('throws an error if the given key set is missing a public key', async () => { + delete portableDid.verificationMethods[0].publicKeyJwk; + + try { + await DidKey.fromKeys(portableDid); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public and private key'); + } + }); + + it('throws an error if the given key set is missing a private key', async () => { + delete portableDid.verificationMethods[0].privateKeyJwk; + + try { + await DidKey.fromKeys(portableDid); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('does not contain a public and private key'); + } + }); + + it('throws an error if the key set contains two or more keys', async () => { + const verificationMethod: PortableDidVerificationMethod = { + publicKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8' + }, + privateKeyJwk: { + kty : 'OKP', + crv : 'Ed25519', + x : '3EBa_ELos2alvLojqIVcrbKpirVXj6cjVD5v2VhwLz8', + d : 'hMqv-FAvhVWz2nxobesO7TzI0-GN0kvzkUGYdnZt_TA' + }, + purposes: ['authentication'] + }; + + try { + await DidKey.fromKeys({ + verificationMethods: [verificationMethod, verificationMethod] + }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('one verification method'); + } + }); + }); + + describe('resolve()', () => { + it('derives a key agreement verification method when enableEncryptionKeyDerivation is true', async function () { + const did = 'did:key:z6MkpUzNmYVTGpqhStxK8yRKXWCRNm1bGYz8geAg2zmjYHKX'; + const resolutionResult = await DidKey.resolve(did, { enableEncryptionKeyDerivation: true }); + + expect(resolutionResult.didDocument?.verificationMethod).to.have.length(2); + expect(resolutionResult.didDocument?.verificationMethod![0]!.publicKeyJwk).to.have.property('crv', 'Ed25519'); + expect(resolutionResult.didDocument?.verificationMethod![1]!.publicKeyJwk).to.have.property('crv', 'X25519'); + expect(resolutionResult.didDocument?.verificationMethod![1]!.id).to.equal(resolutionResult.didDocument?.keyAgreement![0]); + }); + + it('returns an error due to DID parsing failing', async function () { + const invalidDidUri = 'did:invalidFormat'; + const resolutionResult = await DidKey.resolve(invalidDidUri); + expect(resolutionResult.didResolutionMetadata.error).to.equal('invalidDid'); + }); + + it('returns an error due to failing to decode the multibase identifier', async function () { + const didUriWithInvalidEncoding = 'did:key:invalidEncoding'; + const resolutionResult = await DidKey.resolve(didUriWithInvalidEncoding); + expect(resolutionResult.didResolutionMetadata.error).to.equal('invalidDid'); + }); + + it('returns an error because the DID method is not "key"', async function () { + const didUriWithDifferentMethod = 'did:notkey:eyJmb28iOiJiYXIifQ'; + const resolutionResult = await DidKey.resolve(didUriWithDifferentMethod); + expect(resolutionResult.didResolutionMetadata.error).to.equal(DidErrorCode.MethodNotSupported); + }); + }); + describe('DidKeyUtils', () => { describe('joseToMulticodec()', () => { it('supports Ed25519 public keys', async () => { diff --git a/packages/dids/tests/methods/did-method.spec.ts b/packages/dids/tests/methods/did-method.spec.ts index c7b688302..300af0d29 100644 --- a/packages/dids/tests/methods/did-method.spec.ts +++ b/packages/dids/tests/methods/did-method.spec.ts @@ -27,6 +27,19 @@ describe('DidMethod', () => { keyManager = new LocalKeyManager(); }); + describe('fromKeyManager()', () => { + it('throws an error if the DID method implementation does not provide a resolve() function', async () => { + class DidTest extends DidMethod {} + + try { + await DidTest.fromKeyManager({ didUri: 'did:method:example', keyManager }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.include('must implement resolve()'); + } + }); + }); + describe('getSigner()', () => { let keyManagerMock: any; let publicKey: Jwk; From 29a27abdd1d3bbf7c65b6c18e54ca6a81c550117 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 06:20:24 -0500 Subject: [PATCH 29/39] Add KeyCompressor type to @web5/crypto Signed-off-by: Frank Hinek --- packages/crypto/src/index.ts | 1 + packages/crypto/src/types/key-compressor.ts | 25 +++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 packages/crypto/src/types/key-compressor.ts diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts index 2e272861b..755d74f87 100644 --- a/packages/crypto/src/index.ts +++ b/packages/crypto/src/index.ts @@ -30,6 +30,7 @@ export type * from './types/cipher.js'; export type * from './types/crypto-api.js'; export type * from './types/hasher.js'; export type * from './types/identifier.js'; +export type * from './types/key-compressor.js'; export type * from './types/key-converter.js'; export type * from './types/key-deriver.js'; export type * from './types/key-generator.js'; diff --git a/packages/crypto/src/types/key-compressor.ts b/packages/crypto/src/types/key-compressor.ts new file mode 100644 index 000000000..3369c3c7c --- /dev/null +++ b/packages/crypto/src/types/key-compressor.ts @@ -0,0 +1,25 @@ +/** + * `KeyCompressor` interface for converting public keys between compressed and uncompressed form. + */ +export interface KeyCompressor { + + /** + * Converts a public key to its compressed form. + * + * @param params - The parameters for the public key compression. + * @param params.publicKeyBytes - The public key as a Uint8Array. + * + * @returns A Promise that resolves to the compressed public key as a Uint8Array. + */ + compressPublicKey(params: { publicKeyBytes: Uint8Array }): Promise; + + /** + * Converts a public key to its uncompressed form. + * + * @param params - The parameters for the public key decompression. + * @param params.publicKeyBytes - The public key as a Uint8Array. + * + * @returns A Promise that resolves to the uncompressed public key as a Uint8Array. + */ + decompressPublicKey(params: { publicKeyBytes: Uint8Array }): Promise; +} \ No newline at end of file From 64120f0108eb69cbbe9bd82bb67f75671cece011 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 06:20:49 -0500 Subject: [PATCH 30/39] Complete refactor of DidIon Signed-off-by: Frank Hinek --- packages/dids/old/src/did-ion.ts | 611 ------------- packages/dids/old/tests/did-ion.spec.ts | 805 ----------------- packages/dids/src/index.ts | 20 +- packages/dids/src/methods/did-dht.ts | 102 ++- packages/dids/src/methods/did-ion.ts | 809 +++++++++++++++++- packages/dids/src/methods/did-jwk.ts | 4 +- packages/dids/src/methods/did-key.ts | 91 +- packages/dids/src/methods/did-method.ts | 5 - packages/dids/src/resolver/did-resolver.ts | 61 +- .../dids/src/resolver/resolver-cache-level.ts | 46 +- packages/dids/src/types.ts | 54 -- packages/dids/src/types/did-core.ts | 6 +- .../fixtures/test-vectors/did-ion/create.ts | 425 +++++++++ .../fixtures/test-vectors/did-ion/resolve.ts | 56 ++ .../fixtures/test-vectors/did-ion/to-keys.ts | 81 ++ packages/dids/tests/methods/did-dht.spec.ts | 8 +- packages/dids/tests/methods/did-ion.spec.ts | 641 ++++++++++++++ packages/dids/tests/methods/did-key.spec.ts | 100 +++ 18 files changed, 2338 insertions(+), 1587 deletions(-) delete mode 100644 packages/dids/old/src/did-ion.ts delete mode 100644 packages/dids/old/tests/did-ion.spec.ts delete mode 100644 packages/dids/src/types.ts create mode 100644 packages/dids/tests/fixtures/test-vectors/did-ion/create.ts create mode 100644 packages/dids/tests/fixtures/test-vectors/did-ion/resolve.ts create mode 100644 packages/dids/tests/fixtures/test-vectors/did-ion/to-keys.ts create mode 100644 packages/dids/tests/methods/did-ion.spec.ts diff --git a/packages/dids/old/src/did-ion.ts b/packages/dids/old/src/did-ion.ts deleted file mode 100644 index 5c865280c..000000000 --- a/packages/dids/old/src/did-ion.ts +++ /dev/null @@ -1,611 +0,0 @@ -import type { JwkKeyPair, PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto'; -import type { IonDocumentModel, IonPublicKeyModel, JwkEd25519, JwkEs256k } from '@decentralized-identity/ion-sdk'; - -import { Convert, universalTypeOf } from '@web5/common'; -import IonProofOfWork from '@decentralized-identity/ion-pow-sdk'; -// import { IonProofOfWork } from '@decentralized-identity/ion-pow-sdk'; -import { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto'; -import { IonDid, IonPublicKeyPurpose, IonRequest } from '@decentralized-identity/ion-sdk'; - -import type { DidDocument, PortableDidVerificationMethod, DidMethod, DidResolutionOptions, DidResolutionResult, DidService, DwnServiceEndpoint, PortableDid } from './types.js'; - -import { getServices, isDwnServiceEndpoint, parseDid } from './utils.js'; - -export type DidIonAnchorOptions = { - challengeEnabled?: boolean; - challengeEndpoint?: string; - operationsEndpoint?: string; - keySet: DidIonKeySet; - services: DidService[]; -} - -export type DidIonCreateOptions = { - anchor?: boolean; - keyAlgorithm?: typeof SupportedCryptoAlgorithms[number]; - keySet?: DidIonKeySet; - services?: DidService[]; -} - -export type DidIonKeySet = { - recoveryKey?: JwkKeyPair; - updateKey?: JwkKeyPair; - verificationMethodKeys?: PortableDidVerificationMethod[]; -} - -enum OperationType { - Create = 'create', - Update = 'update', - Deactivate = 'deactivate', - Recover = 'recover' -} - -/** - * Data model representing a public key in the DID Document. - */ -export interface IonCreateRequestModel { - type: OperationType; - suffixData: { - deltaHash: string; - recoveryCommitment: string; - }; - delta: { - updateCommitment: string; - patches: { - action: string; - document: IonDocumentModel; - }[]; - } -} - -const SupportedCryptoAlgorithms = [ - 'Ed25519', - 'secp256k1' -] as const; - -const VerificationRelationshipToIonPublicKeyPurpose = { - assertionMethod : IonPublicKeyPurpose.AssertionMethod, - authentication : IonPublicKeyPurpose.Authentication, - capabilityDelegation : IonPublicKeyPurpose.CapabilityDelegation, - capabilityInvocation : IonPublicKeyPurpose.CapabilityInvocation, - keyAgreement : IonPublicKeyPurpose.KeyAgreement -}; - -export class DidIonMethod implements DidMethod { - /** - * Name of the DID method - */ - public static methodName = 'ion'; - - public static async anchor(options: { - services: DidService[], - keySet: DidIonKeySet, - challengeEnabled?: boolean, - challengeEndpoint?: string, - operationsEndpoint?: string - }): Promise { - const { - challengeEnabled = false, - challengeEndpoint = 'https://beta.ion.msidentity.com/api/v1.0/proof-of-work-challenge', - keySet, - services, - operationsEndpoint = 'https://ion.tbd.engineering/operations' - } = options; - - // Create ION Document. - const ionDocument = await DidIonMethod.createIonDocument({ - keySet: keySet, - services - }); - - const createRequest = await DidIonMethod.getIonCreateRequest({ - ionDocument, - recoveryPublicKeyJwk : keySet.recoveryKey.publicKeyJwk, - updatePublicKeyJwk : keySet.updateKey.publicKeyJwk - }); - - let resolutionResult: DidResolutionResult; - - if (challengeEnabled) { - const response = await IonProofOfWork.submitIonRequest( - challengeEndpoint, - operationsEndpoint, - JSON.stringify(createRequest) - ); - - if (response !== undefined && universalTypeOf(response) === 'String') { - resolutionResult = JSON.parse(response); - } - - } else { - const response = await fetch(operationsEndpoint, { - method : 'POST', - mode : 'cors', - body : JSON.stringify(createRequest), - headers : { - 'Content-Type': 'application/json' - } - }); - - if (response.ok) { - resolutionResult = await response.json(); - } - } - - return resolutionResult; - } - - public static async create(options?: DidIonCreateOptions): Promise { - let { anchor, keyAlgorithm, keySet, services } = options ?? { }; - - // Begin constructing a PortableDid. - const did: Partial = {}; - - // If any member of the key set is missing, generate the keys. - did.keySet = await DidIonMethod.generateKeySet({ keyAlgorithm, keySet }); - - // Generate Long Form DID URI. - did.did = await DidIonMethod.getLongFormDid({ - keySet: did.keySet, - services - }); - - // Get short form DID. - did.canonicalId = await DidIonMethod.getShortFormDid({ didUrl: did.did }); - - let didResolutionResult: DidResolutionResult | undefined; - if (anchor) { - // Attempt to anchor the DID. - didResolutionResult = await DidIonMethod.anchor({ - keySet: did.keySet, - services - }); - - } else { - // If anchoring was not requested, then resolve the long form DID. - didResolutionResult = await DidIonMethod.resolve({ didUrl: did.did }); - } - - // Store the DID Document. - did.document = didResolutionResult.didDocument; - - return did as PortableDid; - } - - public static async decodeLongFormDid(options: { - didUrl: string - }): Promise { - const { didUrl } = options; - - const parsedDid = parseDid({ didUrl }); - - if (!parsedDid) { - throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`); - } - - const decodedLongFormDid = Convert.base64Url( - parsedDid.id.split(':').pop() - ).toObject() as Pick; - - const createRequest: IonCreateRequestModel = { - ...decodedLongFormDid, - type: OperationType.Create - }; - - return createRequest; - } - - /** - * Generates two key pairs used for authorization and encryption purposes - * when interfacing with DWNs. The IDs of these keys are referenced in the - * service object that includes the dwnUrls provided. - */ - public static async generateDwnOptions(options: { - encryptionKeyId?: string, - serviceEndpointNodes: string[], - serviceId?: string, - signingKeyAlgorithm?: typeof SupportedCryptoAlgorithms[number] - signingKeyId?: string, - }): Promise { - const { - signingKeyAlgorithm = 'Ed25519', // Generate Ed25519 key pairs, by default. - serviceId = '#dwn', // Use default ID value, unless overridden. - signingKeyId = '#dwn-sig', // Use default key ID value, unless overridden. - encryptionKeyId = '#dwn-enc', // Use default key ID value, unless overridden. - serviceEndpointNodes } = options; - - const signingKeyPair = await DidIonMethod.generateJwkKeyPair({ - keyAlgorithm : signingKeyAlgorithm, - keyId : signingKeyId - }); - - /** Currently, `dwn-sdk-js` has only implemented support for record - * encryption using the `ECIES-ES256K` crypto algorithm. Until the - * DWN SDK supports ECIES with EdDSA, the encryption key pair must - * use secp256k1. */ - const encryptionKeyPair = await DidIonMethod.generateJwkKeyPair({ - keyAlgorithm : 'secp256k1', - keyId : encryptionKeyId - }); - - const keySet: DidIonKeySet = { - verificationMethodKeys: [ - { ...signingKeyPair, relationships: ['authentication'] }, - { ...encryptionKeyPair, relationships: ['keyAgreement'] } - ] - }; - - const serviceEndpoint: DwnServiceEndpoint = { - encryptionKeys : [encryptionKeyId], - nodes : serviceEndpointNodes, - signingKeys : [signingKeyId] - }; - - const services: DidService[] = [{ - id : serviceId, - serviceEndpoint, - type : 'DecentralizedWebNode', - }]; - - return { keySet, services }; - } - - public static async generateJwkKeyPair(options: { - keyAlgorithm: typeof SupportedCryptoAlgorithms[number], - keyId?: string - }): Promise { - const { keyAlgorithm, keyId } = options; - - let cryptoKeyPair: Web5Crypto.CryptoKeyPair; - - switch (keyAlgorithm) { - case 'Ed25519': { - cryptoKeyPair = await new EdDsaAlgorithm().generateKey({ - algorithm : { name: 'EdDSA', namedCurve: 'Ed25519' }, - extractable : true, - keyUsages : ['sign', 'verify'] - }); - break; - } - - case 'secp256k1': { - cryptoKeyPair = await new EcdsaAlgorithm().generateKey({ - algorithm : { name: 'ECDSA', namedCurve: 'secp256k1' }, - extractable : true, - keyUsages : ['sign', 'verify'] - }); - break; - } - - default: { - throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`); - } - } - - // Convert the CryptoKeyPair to JwkKeyPair. - const jwkKeyPair = await Jose.cryptoKeyToJwkPair({ keyPair: cryptoKeyPair }); - - // Set kid values. - if (keyId) { - jwkKeyPair.privateKeyJwk.kid = keyId; - jwkKeyPair.publicKeyJwk.kid = keyId; - } else { - // If a key ID is not specified, generate RFC 7638 JWK thumbprint. - const jwkThumbprint = await Jose.jwkThumbprint({ key: jwkKeyPair.publicKeyJwk }); - jwkKeyPair.privateKeyJwk.kid = jwkThumbprint; - jwkKeyPair.publicKeyJwk.kid = jwkThumbprint; - } - - return jwkKeyPair; - } - - public static async generateKeySet(options?: { - keyAlgorithm?: typeof SupportedCryptoAlgorithms[number], - keySet?: DidIonKeySet - }): Promise { - // Generate Ed25519 authentication key pair, by default. - let { keyAlgorithm = 'Ed25519', keySet = {} } = options ?? {}; - - // If keySet lacks verification method keys, generate one. - if (keySet.verificationMethodKeys === undefined) { - const authenticationkeyPair = await DidIonMethod.generateJwkKeyPair({ - keyAlgorithm, - keyId: 'dwn-sig' - }); - keySet.verificationMethodKeys = [{ - ...authenticationkeyPair, - relationships: ['authentication', 'assertionMethod'] - }]; - } - - // If keySet lacks recovery key, generate one. - if (keySet.recoveryKey === undefined) { - // Note: ION/Sidetree only supports secp256k1 recovery keys. - keySet.recoveryKey = await DidIonMethod.generateJwkKeyPair({ - keyAlgorithm : 'secp256k1', - keyId : 'ion-recovery-1' - }); - } - - // If keySet lacks update key, generate one. - if (keySet.updateKey === undefined) { - // Note: ION/Sidetree only supports secp256k1 update keys. - keySet.updateKey = await DidIonMethod.generateJwkKeyPair({ - keyAlgorithm : 'secp256k1', - keyId : 'ion-update-1' - }); - } - - // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key. - for (const key of [...keySet.verificationMethodKeys, keySet.recoveryKey, keySet.updateKey]) { - if ('publicKeyJwk' in key) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.publicKeyJwk }); - if ('privateKeyJwk' in key) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.privateKeyJwk }); - } - - return keySet; - } - - /** - * Given the W3C DID Document of a `did:ion` DID, return the identifier of - * the verification method key that will be used for signing messages and - * credentials, by default. - * - * @param document = DID Document to get the default signing key from. - * @returns Verification method identifier for the default signing key. - */ - public static async getDefaultSigningKey(options: { - didDocument: DidDocument - }): Promise { - const { didDocument } = options; - - if (!didDocument.id) { - throw new Error(`DidIonMethod: DID document is missing 'id' property`); - } - - /** If the DID document contains a DWN service endpoint in the expected - * format, return the first entry in the `signingKeys` array. */ - const [dwnService] = getServices({ didDocument, type: 'DecentralizedWebNode' }); - if (isDwnServiceEndpoint(dwnService?.serviceEndpoint)) { - const [verificationMethodId] = dwnService.serviceEndpoint.signingKeys; - const did = didDocument.id; - const signingKeyId = `${did}${verificationMethodId}`; - return signingKeyId; - } - - /** Otherwise, fallback to a naive approach of returning the first key ID - * in the `authentication` verification relationships array. */ - if (didDocument.authentication - && Array.isArray(didDocument.authentication) - && didDocument.authentication.length > 0 - && typeof didDocument.authentication[0] === 'string') { - const [verificationMethodId] = didDocument.authentication; - const did = didDocument.id; - const signingKeyId = `${did}${verificationMethodId}`; - return signingKeyId; - } - } - - public static async getLongFormDid(options: { - services: DidService[], - keySet: DidIonKeySet - }): Promise { - const { services = [], keySet } = options; - - // Create ION Document. - const ionDocument = await DidIonMethod.createIonDocument({ - keySet: keySet, - services - }); - - // Filter JWK to only those properties expected by ION/Sidetree. - const recoveryKey = DidIonMethod.jwkToIonJwk({ key: keySet.recoveryKey.publicKeyJwk }) as JwkEs256k; - const updateKey = DidIonMethod.jwkToIonJwk({ key: keySet.updateKey.publicKeyJwk }) as JwkEs256k; - - // Create an ION DID create request operation. - const did = await IonDid.createLongFormDid({ - document: ionDocument, - recoveryKey, - updateKey - }); - - return did; - } - - public static async getShortFormDid(options: { - didUrl: string - }): Promise { - const { didUrl } = options; - - const parsedDid = parseDid({ didUrl }); - - if (!parsedDid) { - throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`); - } - - const shortFormDid = parsedDid.did.split(':', 3).join(':'); - - return shortFormDid; - } - - public static async resolve(options: { - didUrl: string, - resolutionOptions?: DidResolutionOptions - }): Promise { - // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution - const { didUrl, resolutionOptions = {} } = options; - - const parsedDid = parseDid({ didUrl }); - if (!parsedDid) { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'invalidDid', - errorMessage : `Cannot parse DID: ${didUrl}` - } - }; - } - - if (parsedDid.method !== 'ion') { - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error : 'methodNotSupported', - errorMessage : `Method not supported: ${parsedDid.method}` - } - }; - } - - const { resolutionEndpoint = 'https://ion.tbd.engineering/identifiers/' } = resolutionOptions; - const normalizeUrl = (url: string): string => url.endsWith('/') ? url : url + '/'; - const resolutionUrl = `${normalizeUrl(resolutionEndpoint)}${parsedDid.did}`; - - const response = await fetch(resolutionUrl); - - let resolutionResult: DidResolutionResult | object; - try { - resolutionResult = await response.json(); - } catch (error) { - resolutionResult = {}; - } - - if (response.ok) { - return resolutionResult as DidResolutionResult; - } - - // Response was not "OK" (HTTP 4xx-5xx status code) - - // Return result if it contains DID resolution metadata. - if ('didResolutionMetadata' in resolutionResult) { - return resolutionResult; - } - - // Set default error code and message. - let error = 'internalError'; - let errorMessage = `DID resolver responded with HTTP status code: ${response.status}`; - - /** The Microsoft resolution endpoint does not return a valid DidResolutionResult - * when an ION DID is "not found" so normalization is needed. */ - if ('error' in resolutionResult && - typeof resolutionResult.error === 'object' && - 'code' in resolutionResult.error && - typeof resolutionResult.error.code === 'string' && - 'message' in resolutionResult.error && - typeof resolutionResult.error.message === 'string') { - error = resolutionResult.error.code.includes('not_found') ? 'notFound' : error; - errorMessage = resolutionResult.error.message ?? errorMessage; - } - - return { - '@context' : 'https://w3id.org/did-resolution/v1', - didDocument : undefined, - didDocumentMetadata : {}, - didResolutionMetadata : { - error, - errorMessage - } - }; - } - - private static async createIonDocument(options: { - keySet: DidIonKeySet, - services?: DidService[] - }): Promise { - const { services = [], keySet } = options; - - /** - * STEP 1: Convert key set verification method keys to ION SDK format. - */ - - const ionPublicKeys: IonPublicKeyModel[] = []; - - for (const key of keySet.verificationMethodKeys) { - // Map W3C DID verification relationship names to ION public key purposes. - const ionPurposes: IonPublicKeyPurpose[] = []; - for (const relationship of key.relationships) { - ionPurposes.push( - VerificationRelationshipToIonPublicKeyPurpose[relationship] - ); - } - - /** During certain ION operations, JWK validation will throw an error - * if key IDs provided as input are prefixed with `#`. ION operation - * outputs and DID document resolution always include the `#` prefix - * for key IDs resulting in a confusing mismatch between inputs and - * outputs. To improve the developer experience, this inconsistency - * is addressed by normalizing input key IDs before being passed - * to ION SDK methods. */ - const publicKeyId = (key.publicKeyJwk.kid.startsWith('#')) - ? key.publicKeyJwk.kid.substring(1) - : key.publicKeyJwk.kid; - - // Convert public key JWK to ION format. - const publicKey: IonPublicKeyModel = { - id : publicKeyId, - publicKeyJwk : DidIonMethod.jwkToIonJwk({ key: key.publicKeyJwk }), - purposes : ionPurposes, - type : 'JsonWebKey2020' - }; - - ionPublicKeys.push(publicKey); - } - - /** - * STEP 2: Convert service entries, if any, to ION SDK format. - */ - const ionServices = services.map(service => ({ - ...service, - id: service.id.startsWith('#') ? service.id.substring(1) : service.id - })); - - /** - * STEP 3: Format as ION document. - */ - - const ionDocumentModel: IonDocumentModel = { - publicKeys : ionPublicKeys, - services : ionServices - }; - - return ionDocumentModel; - } - - private static async getIonCreateRequest(options: { - ionDocument: IonDocumentModel, - recoveryPublicKeyJwk: PublicKeyJwk, - updatePublicKeyJwk: PublicKeyJwk - }): Promise { - const { ionDocument, recoveryPublicKeyJwk, updatePublicKeyJwk } = options; - - // Create an ION DID create request operation. - const createRequest = await IonRequest.createCreateRequest({ - document : ionDocument, - recoveryKey : DidIonMethod.jwkToIonJwk({ key: recoveryPublicKeyJwk }) as JwkEs256k, - updateKey : DidIonMethod.jwkToIonJwk({ key: updatePublicKeyJwk }) as JwkEs256k - }); - - return createRequest; - } - - private static jwkToIonJwk({ key }: { key: PrivateKeyJwk | PublicKeyJwk }): JwkEd25519 | JwkEs256k { - let ionJwk: Partial = { }; - - if ('crv' in key) { - ionJwk.crv = key.crv; - ionJwk.kty = key.kty; - ionJwk.x = key.x; - if ('d' in key) ionJwk.d = key.d; - - if ('y' in key && key.y) { - // secp256k1 JWK. - return { ...ionJwk, y: key.y} as JwkEs256k; - } - // Ed25519 JWK. - return { ...ionJwk } as JwkEd25519; - } - - throw new Error(`jwkToIonJwk: Unsupported key algorithm.`); - } -} \ No newline at end of file diff --git a/packages/dids/old/tests/did-ion.spec.ts b/packages/dids/old/tests/did-ion.spec.ts deleted file mode 100644 index e6efaf3b7..000000000 --- a/packages/dids/old/tests/did-ion.spec.ts +++ /dev/null @@ -1,805 +0,0 @@ -import type { JwkKeyPair } from '@web5/crypto'; - -import * as sinon from 'sinon'; -import chai, { expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; - -chai.use(chaiAsPromised); - -import type { - DidService, - DidDocument, - DwnServiceEndpoint, - PortableDidVerificationMethod, -} from '../src/types.js'; - -import { didIonCreateTestVectors } from './fixtures/test-vectors/did-ion.js'; -import { DidIonCreateOptions, DidIonKeySet, DidIonMethod } from '../src/did-ion.js'; - -describe('DidIonMethod', () => { - let testRecoveryKey: JwkKeyPair; - let testUpdateKey: JwkKeyPair; - let testVerificationMethodKeys: PortableDidVerificationMethod[]; - let testKeySet: DidIonKeySet; - - beforeEach(() => { - testRecoveryKey = structuredClone(didIonCreateTestVectors[0].input.keySet.recoveryKey) as JwkKeyPair; - testRecoveryKey.privateKeyJwk.kid = 'test-recovery-1'; - testRecoveryKey.publicKeyJwk.kid = 'test-recovery-1'; - - testUpdateKey = structuredClone(didIonCreateTestVectors[0].input.keySet.updateKey) as JwkKeyPair; - testUpdateKey.privateKeyJwk.kid = 'test-update-1'; - testUpdateKey.publicKeyJwk.kid = 'test-update-1'; - - testVerificationMethodKeys = structuredClone(didIonCreateTestVectors[0].input.keySet.verificationMethodKeys) as PortableDidVerificationMethod[]; - testVerificationMethodKeys[0].publicKeyJwk!.kid = 'test-kid'; - - testKeySet = { - recoveryKey : testRecoveryKey, - updateKey : testUpdateKey, - verificationMethodKeys : testVerificationMethodKeys - }; - }); - - describe('anchor()', () => { - it('accepts a custom operations endpoint', async () => { - // Setup stub so that a mocked response is returned rather than calling over the network. - const mockResult = { mock: 'data' }; - const fetchStub = sinon.stub(global, 'fetch'); - // @ts-expect-error because we're only mocking ok and json() from global.fetch(). - fetchStub.returns(Promise.resolve({ - ok : true, - json : () => Promise.resolve(mockResult) - })); - - const resolutionResult = await DidIonMethod.anchor({ - challengeEnabled : false, - keySet : testKeySet, - operationsEndpoint : 'https://ion-service.com/operations', - services : [] - }); - fetchStub.restore(); - - expect(resolutionResult).to.deep.equal(mockResult); - expect(fetchStub.calledOnceWith( - 'https://ion-service.com/operations', - sinon.match({ - method : 'POST', - mode : 'cors', - body : sinon.match.string, - headers : { - 'Content-Type': 'application/json' - } - }) - )).to.be.true; - }); - - it('supports disabling POW/challenge', async () => { - // Setup stub so that a mocked response is returned rather than calling over the network. - const mockResult = { mock: 'data' }; - const fetchStub = sinon.stub(global, 'fetch'); - // @ts-expect-error because we're only mocking ok and json() from global.fetch(). - fetchStub.returns(Promise.resolve({ - ok : true, - json : () => Promise.resolve(mockResult) - })); - - const resolutionResult = await DidIonMethod.anchor({ - challengeEnabled : false, - keySet : testKeySet, - operationsEndpoint : 'https://ion-service.com/operations', - services : [] - }); - fetchStub.restore(); - - expect(resolutionResult).to.deep.equal(mockResult); - }); - }); - - describe('create()', () => { - it('creates a DID with Ed25519 keys, by default', async () => { - const portableDid = await DidIonMethod.create(); - - // Verify expected result. - expect(portableDid).to.have.property('did'); - expect(portableDid).to.have.property('canonicalId'); - expect(portableDid).to.have.property('document'); - expect(portableDid).to.have.property('keySet'); - - const keySet = portableDid.keySet as DidIonKeySet; - - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet.verificationMethodKeys).to.have.length(1); - expect(keySet.verificationMethodKeys?.[0]).to.have.property('publicKeyJwk'); - expect(keySet.verificationMethodKeys?.[0]).to.have.property('privateKeyJwk'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('alg', 'EdDSA'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('crv', 'Ed25519'); - - expect(keySet).to.have.property('recoveryKey'); - expect(keySet.recoveryKey).to.have.property('publicKeyJwk'); - expect(keySet.recoveryKey).to.have.property('privateKeyJwk'); - - expect(keySet).to.have.property('updateKey'); - expect(keySet.recoveryKey).to.have.property('publicKeyJwk'); - expect(keySet.recoveryKey).to.have.property('privateKeyJwk'); - }); - - it('creates a DID with secp256k1 keys, if specified', async () => { - const portableDid = await DidIonMethod.create({ keyAlgorithm: 'secp256k1' }); - - // Verify expected result. - expect(portableDid).to.have.property('did'); - expect(portableDid).to.have.property('canonicalId'); - expect(portableDid).to.have.property('document'); - expect(portableDid).to.have.property('keySet'); - - const keySet = portableDid.keySet as DidIonKeySet; - - expect(keySet).to.have.property('verificationMethodKeys'); - expect(keySet.verificationMethodKeys).to.have.length(1); - expect(keySet.verificationMethodKeys?.[0]).to.have.property('publicKeyJwk'); - expect(keySet.verificationMethodKeys?.[0]).to.have.property('privateKeyJwk'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('alg', 'ES256K'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk).to.have.property('crv', 'secp256k1'); - - expect(keySet).to.have.property('recoveryKey'); - expect(keySet.recoveryKey).to.have.property('publicKeyJwk'); - expect(keySet.recoveryKey).to.have.property('privateKeyJwk'); - - expect(keySet).to.have.property('updateKey'); - expect(keySet.recoveryKey).to.have.property('publicKeyJwk'); - expect(keySet.recoveryKey).to.have.property('privateKeyJwk'); - }); - - it('uses specified key ID values for key set, if given', async () => { - const portableDid = await DidIonMethod.create({ - keyAlgorithm : 'Ed25519', - keySet : testKeySet - }); - - const keySet = portableDid.keySet as DidIonKeySet; - expect(keySet.recoveryKey?.privateKeyJwk.kid).to.equal('test-recovery-1'); - expect(keySet.recoveryKey?.publicKeyJwk.kid).to.equal('test-recovery-1'); - expect(keySet.updateKey?.privateKeyJwk.kid).to.equal('test-update-1'); - expect(keySet.updateKey?.publicKeyJwk.kid).to.equal('test-update-1'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk?.kid).to.equal('test-kid'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk?.kid).to.equal('test-kid'); - }); - - it('generates key ID values for key set, if missing', async () => { - delete testRecoveryKey.privateKeyJwk.kid; - delete testRecoveryKey.publicKeyJwk.kid; - delete testUpdateKey.privateKeyJwk.kid; - delete testUpdateKey.publicKeyJwk.kid; - delete testVerificationMethodKeys[0].publicKeyJwk!.kid; - - const portableDid = await DidIonMethod.create({ - keyAlgorithm : 'Ed25519', - keySet : testKeySet - }); - - const keySet = portableDid.keySet as DidIonKeySet; - expect(keySet.recoveryKey?.privateKeyJwk.kid).to.equal('AEOG_sxXHhCA1Fel8fpheyLxAcW89D7V86lMcJXc500'); - expect(keySet.recoveryKey?.publicKeyJwk.kid).to.equal('AEOG_sxXHhCA1Fel8fpheyLxAcW89D7V86lMcJXc500'); - expect(keySet.updateKey?.privateKeyJwk.kid).to.equal('_1CySHVtk6tNXke3t_7NLI2nvaVlH5GFyuO9HjQCRKs'); - expect(keySet.updateKey?.publicKeyJwk.kid).to.equal('_1CySHVtk6tNXke3t_7NLI2nvaVlH5GFyuO9HjQCRKs'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk?.kid).to.equal('OAPj7ObrEJFgVNA2rrkPM5A-vYVsH_lyz4LgOUdJBa8'); - expect(keySet.verificationMethodKeys?.[0].publicKeyJwk?.kid).to.equal('OAPj7ObrEJFgVNA2rrkPM5A-vYVsH_lyz4LgOUdJBa8'); - }); - - it('given key IDs are automatically prefixed with hash symbol (#) in DID document', async () => { - testVerificationMethodKeys[0].publicKeyJwk!.kid = 'noPrefixInput'; - - const portableDid = await DidIonMethod.create({ - keyAlgorithm : 'Ed25519', - keySet : testKeySet - }); - - expect(portableDid.document.authentication).includes(`#noPrefixInput`); - expect(portableDid.document.assertionMethod).includes(`#noPrefixInput`); - expect(portableDid.document.verificationMethod![0].id).to.equal(`#noPrefixInput`); - }); - - it('accepts recovery and update key IDs that include a hash symbol (#)', async () => { - testRecoveryKey.privateKeyJwk.kid = '#test-recovery-1'; - testRecoveryKey.publicKeyJwk.kid = '#test-recovery-1'; - - await expect( - DidIonMethod.create({ keySet: { recoveryKey: testRecoveryKey } }) - ).to.eventually.be.fulfilled; - - testUpdateKey.privateKeyJwk.kid = '#test-update-1'; - testUpdateKey.publicKeyJwk.kid = '#test-update-1'; - - await expect( - DidIonMethod.create({ keySet: { updateKey: testUpdateKey } }) - ).to.eventually.eventually.be.fulfilled; - }); - - it('accepts verification method key IDs that start with a hash symbol (#)', async () => { - testVerificationMethodKeys[0].publicKeyJwk!.kid = '#prefixedKid'; - - const portableDid = await DidIonMethod.create({ - keyAlgorithm : 'Ed25519', - keySet : testKeySet - }); - - expect(portableDid.document.authentication).includes(`#prefixedKid`); - expect(portableDid.document.assertionMethod).includes(`#prefixedKid`); - expect(portableDid.document.verificationMethod![0].id).to.equal(`#prefixedKid`); - }); - - it('throws an error if verification method key IDs contain a hash symbol (#)', async () => { - testVerificationMethodKeys[0].publicKeyJwk!.kid = 'test#kid'; - - await expect( - DidIonMethod.create({ keySet: { verificationMethodKeys: testVerificationMethodKeys } }) - ).to.eventually.eventually.be.rejectedWith(Error, 'IdNotUsingBase64UrlCharacterSet'); - }); - - it('creates a DID with service entries, if specified', async () => { - const dwnEndpoints = [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ]; - - const services: DidService[] = [{ - 'id' : 'dwn', - 'type' : 'DecentralizedWebNode', - 'serviceEndpoint' : { - 'nodes' : dwnEndpoints, - 'signingKeys' : ['#dwn-sig'], - 'encryptionKeys' : ['#dwn-enc'] - } - }]; - - const portableDid = await DidIonMethod.create({ services }); - - const dwnService = portableDid.document.service?.[0]; - expect(dwnService).to.have.property('type', 'DecentralizedWebNode'); - expect(dwnService?.serviceEndpoint).to.have.property('nodes'); - expect(dwnService?.serviceEndpoint).to.have.property('signingKeys'); - expect(dwnService?.serviceEndpoint).to.have.property('encryptionKeys'); - }); - - it('given service IDs are automatically prefixed with hash symbol (#) in DID document', async () => { - const dwnEndpoints = ['https://dwn.tbddev.test/dwn0']; - - const services: DidService[] = [{ - 'id' : 'dwn', - 'type' : 'DecentralizedWebNode', - 'serviceEndpoint' : { - 'nodes': dwnEndpoints - } - }]; - - const portableDid = await DidIonMethod.create({ services }); - - const dwnService = portableDid.document.service?.[0]; - expect(dwnService).to.have.property('id', '#dwn'); - }); - - it('accepts service IDs that start with a hash symbol (#)', async () => { - const services: DidService[] = [{ - 'id' : '#dwn', - 'type' : 'DecentralizedWebNode', - 'serviceEndpoint' : { } - }]; - - const portableDid = await DidIonMethod.create({ services }); - - const dwnService = portableDid.document.service?.[0]; - expect(dwnService).to.have.property('id', '#dwn'); - }); - - it('throws an error if verification method key IDs contain a hash symbol (#)', async () => { - const services = [{ - 'id' : 'foo#bar', - 'type' : 'DecentralizedWebNode', - 'serviceEndpoint' : { } - }]; - - await expect( - DidIonMethod.create({ services }) - ).to.eventually.eventually.be.rejectedWith(Error, 'IdNotUsingBase64UrlCharacterSet'); - }); - - for (const vector of didIonCreateTestVectors ) { - it(`passes test vector ${vector.id}`, async () => { - const portableDid = await DidIonMethod.create(vector.input as DidIonCreateOptions); - - expect(portableDid).to.deep.equal(vector.output); - }); - } - }); - - describe('decodeLongFormDid()', () => { - it('returns ION create request with services', async () => { - const longFormDid = 'did:ion:EiC94n5yoQEpRfmT6Co7Q4GCUWmuAK4UzDFpk5W4_BzP4A:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiSl9lek5jT2pqNTIxbWEtN18tanFWdC1JODRzendSRTJzMGFCN3h2R1ljYyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6eyJub2RlcyI6WyJodHRwczovL2R3bi50YmRkZXYudGVzdC9kd24wIl19LCJ0eXBlIjoiRGVjZW50cmFsaXplZFdlYk5vZGUifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUR2WHJNV3V0LTNIUWpsTm5JbHlKR2F0WVBsNWo2MFp3SnB4cG9wOHk2RGxBIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlEd2VVOG82clVZY1lCNHQzaHBoaXdtZFpxZWRVdm5zQ251a2xMdWVfOVFOUSIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpREhIb3E0bFhoMndjWUZNSnNuNkZBN3otVk9sTHBiU20xcnRNOXlJMUQzd3cifX0'; - - const createRequest = await DidIonMethod.decodeLongFormDid({ didUrl: longFormDid}); - - expect(createRequest).to.have.property('delta'); - expect(createRequest).to.have.property('suffixData'); - expect(createRequest).to.have.property('type', 'create'); - - expect(createRequest.delta).to.have.property('updateCommitment', 'EiDvXrMWut-3HQjlNnIlyJGatYPl5j60ZwJpxpop8y6DlA'); - expect(createRequest.suffixData).to.have.property('recoveryCommitment', 'EiDHHoq4lXh2wcYFMJsn6FA7z-VOlLpbSm1rtM9yI1D3ww'); - - expect(createRequest.delta.patches[0].document.services).to.deep.equal([{ - 'id' : 'dwn', - 'type' : 'DecentralizedWebNode', - 'serviceEndpoint' : { - 'nodes': ['https://dwn.tbddev.test/dwn0'] - } - }]); - }); - - it('returns output that matches ION create request', async () => { - const services: DidService[] = [{ - 'id' : 'dwn', - 'type' : 'DecentralizedWebNode', - 'serviceEndpoint' : { - 'nodes': ['https://dwn.tbddev.test/dwn0'] - } - }]; - - const { did } = await DidIonMethod.create({ - keySet: testKeySet, - services - }); - - // @ts-expect-error because we're intentionally accessing a private method. - const ionDocument = await DidIonMethod.createIonDocument({ - keySet: testKeySet, - services - }); - - if (!testKeySet.recoveryKey) throw new Error('Type guard'); - if (!testKeySet.updateKey) throw new Error('Type guard'); - // @ts-expect-error because we're intentionally accessing a private method. - const createRequest = await DidIonMethod.getIonCreateRequest({ - ionDocument, - recoveryPublicKeyJwk : testKeySet.recoveryKey.publicKeyJwk, - updatePublicKeyJwk : testKeySet.updateKey.publicKeyJwk - }); - - if (!did) throw Error('Type guard'); - const decodedLongFormDid = await DidIonMethod.decodeLongFormDid({ didUrl: did }); - - expect(decodedLongFormDid).to.deep.equal(createRequest); - }); - }); - - describe('generateDwnOptions()', () => { - it('returns keys and services with two DWN URLs', async () => { - const ionCreateOptions = await DidIonMethod.generateDwnOptions({ - serviceEndpointNodes: [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ]}); - - expect(ionCreateOptions).to.have.property('keySet'); - expect(ionCreateOptions.keySet.verificationMethodKeys).to.have.length(2); - const authorizationKey = ionCreateOptions.keySet.verificationMethodKeys.find(key => key.privateKeyJwk.kid === '#dwn-sig'); - expect(authorizationKey).to.exist; - const encryptionKey = ionCreateOptions.keySet.verificationMethodKeys.find(key => key.privateKeyJwk.kid === '#dwn-enc'); - expect(encryptionKey).to.exist; - - expect(ionCreateOptions).to.have.property('services'); - expect(ionCreateOptions.services).to.have.length(1); - - const [ service ] = ionCreateOptions.services; - expect(service.id).to.equal('#dwn'); - expect(service).to.have.property('serviceEndpoint'); - - const serviceEndpoint = service.serviceEndpoint as DwnServiceEndpoint; - expect(serviceEndpoint).to.have.property('nodes'); - expect(serviceEndpoint.nodes).to.have.length(2); - expect(serviceEndpoint).to.have.property('signingKeys'); - expect(serviceEndpoint.signingKeys[0]).to.equal(authorizationKey.publicKeyJwk.kid); - expect(serviceEndpoint).to.have.property('encryptionKeys'); - expect(serviceEndpoint.encryptionKeys[0]).to.equal(encryptionKey.publicKeyJwk.kid); - }); - - it('returns keys and services with one DWN URLs', async () => { - const ionCreateOptions = await DidIonMethod.generateDwnOptions({ - serviceEndpointNodes: [ - 'https://dwn.tbddev.test/dwn0' - ]}); - - const [ service ] = ionCreateOptions.services!; - expect(service.id).to.equal('#dwn'); - expect(service).to.have.property('serviceEndpoint'); - - const serviceEndpoint = service.serviceEndpoint as DwnServiceEndpoint; - expect(serviceEndpoint).to.have.property('nodes'); - expect(serviceEndpoint.nodes).to.have.length(1); - expect(serviceEndpoint).to.have.property('signingKeys'); - expect(serviceEndpoint).to.have.property('encryptionKeys'); - }); - - it('returns keys and services with 0 DWN URLs', async () => { - const ionCreateOptions = await DidIonMethod.generateDwnOptions({ serviceEndpointNodes: [] }); - - const [ service ] = ionCreateOptions.services!; - expect(service.id).to.equal('#dwn'); - expect(service).to.have.property('serviceEndpoint'); - - const serviceEndpoint = service.serviceEndpoint as DwnServiceEndpoint; - expect(serviceEndpoint).to.have.property('nodes'); - expect(serviceEndpoint.nodes).to.have.length(0); - expect(serviceEndpoint).to.have.property('signingKeys'); - expect(serviceEndpoint).to.have.property('encryptionKeys'); - }); - }); - - describe('generateJwkKeyPair()', () => { - it('generates an Ed25519 JwkKeyPair', async () => { - const jwkKeyPair = await DidIonMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519' }); - expect(jwkKeyPair).to.be.an('object'); - expect(jwkKeyPair.privateKeyJwk.kty).to.equal('OKP'); - if (!('crv' in jwkKeyPair.privateKeyJwk)) throw new Error('Type guard'); - expect(jwkKeyPair.privateKeyJwk.crv).to.equal('Ed25519'); - if (!('crv' in jwkKeyPair.publicKeyJwk)) throw new Error('Type guard'); - expect(jwkKeyPair.publicKeyJwk.kty).to.equal('OKP'); - expect(jwkKeyPair.publicKeyJwk.crv).to.equal('Ed25519'); - }); - - it('generates a secp256k1 JwkKeyPair', async () => { - const jwkKeyPair = await DidIonMethod.generateJwkKeyPair({ keyAlgorithm: 'secp256k1' }); - expect(jwkKeyPair).to.be.an('object'); - expect(jwkKeyPair.privateKeyJwk.kty).to.equal('EC'); - if (!('crv' in jwkKeyPair.privateKeyJwk)) throw new Error('Type guard'); - expect(jwkKeyPair.privateKeyJwk.crv).to.equal('secp256k1'); - expect(jwkKeyPair.publicKeyJwk.kty).to.equal('EC'); - if (!('crv' in jwkKeyPair.publicKeyJwk)) throw new Error('Type guard'); - expect(jwkKeyPair.publicKeyJwk.crv).to.equal('secp256k1'); - }); - - it('generates a JwkKeyPair with a custom key ID', async () => { - const keyId = 'custom-key-id'; - const jwkKeyPair = await DidIonMethod.generateJwkKeyPair({ keyAlgorithm: 'Ed25519', keyId }); - expect(jwkKeyPair.privateKeyJwk.kid).to.equal(keyId); - expect(jwkKeyPair.publicKeyJwk.kid).to.equal(keyId); - }); - - it('throws an error for unsupported key algorithm', async () => { - await expect( - // @ts-expect-error because an invalid algorithm is being intentionally specified. - DidIonMethod.generateJwkKeyPair({ keyAlgorithm: 'unsupported-algorithm' }) - ).to.eventually.be.rejectedWith(Error, 'Unsupported crypto algorithm'); - }); - }); - - describe('getDefaultSigningKey()', () => { - it('returns the did:ion default signing key from long form DID, when present', async () => { - const partialDidDocument: Partial = { - id : 'did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ', - service : [ - { - id : '#dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : { - encryptionKeys: [ - '#dwn-enc' - ], - nodes: [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ], - signingKeys: [ - '#dwn-sig' - ] - } - } - ], - }; - - const defaultSigningKeyId = await DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }); - - expect(defaultSigningKeyId).to.equal('did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ#dwn-sig'); - }); - - it('returns the did:ion default signing key from short form DID, when present', async () => { - const partialDidDocument: Partial = { - id : 'did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ', - service : [ - { - id : '#dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : { - encryptionKeys: [ - '#dwn-enc' - ], - nodes: [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ], - signingKeys: [ - '#dwn-sig' - ] - } - } - ], - }; - - const defaultSigningKeyId = await DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }); - - expect(defaultSigningKeyId).to.equal('did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ#dwn-sig'); - }); - - it(`returns first 'authentication' key if DID document is missing 'signingKeys'`, async () => { - const partialDidDocument: Partial = { - id : 'did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ', - 'verificationMethod' : [ - { - id : '#OAPj7ObrEJFgVNA2rrkPM5A-vYVsH_lyz4LgOUdJBa8', - type : 'JsonWebKey2020', - controller : 'did:ion:EiBP6JaGhwYye4zz-wdeXR2JWl1JclaVDPA7FDgpzM8-ig:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJPQVBqN09ickVKRmdWTkEycnJrUE01QS12WVZzSF9seXo0TGdPVWRKQmE4IiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNUMEh4ZGNTRHkwQ0t5eHV4VkZ3d3A3N3YteEJkSkVRLUVtSXhZUGR4VnV3IiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ', - publicKeyJwk : { - crv : 'Ed25519', - kty : 'OKP', - x : 'rpKnDP8F4_jwvQ7xDkkuKx165OSwcyrQvmEWl2eigIU' - } - } - ], - service: [ - { - id : '#dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : { - encryptionKeys: [ - '#dwn-enc' - ], - nodes: [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ] - } - } - ], - authentication: [ - '#OAPj7ObrEJFgVNA2rrkPM5A-vYVsH_lyz4LgOUdJBa8' - ], - }; - - const defaultSigningKeyId = await DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }); - - expect(defaultSigningKeyId).to.equal('did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ#OAPj7ObrEJFgVNA2rrkPM5A-vYVsH_lyz4LgOUdJBa8'); - }); - - it(`returns short form DID when DID has been anchored/published`, async () => { - let partialDidDocument: Partial = { - id : 'did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww', - service : [ - { - id : '#dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : { - encryptionKeys: [ - '#dwn-enc' - ], - nodes: [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ], - signingKeys: [ - '#dwn-sig' - ] - } - } - ], - }; - - let defaultSigningKeyId = await DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }); - - expect(defaultSigningKeyId).to.equal('did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww#dwn-sig'); - - partialDidDocument = { - 'id' : 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', - 'service' : [], - 'verificationMethod' : [ - { - 'id' : '#dwn-sig', - 'controller' : 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', - 'type' : 'JsonWebKey2020', - 'publicKeyJwk' : { - 'crv' : 'Ed25519', - 'kty' : 'OKP', - 'x' : 'Sy0lk6pMXC10WyIh4g8sLz1loL8ImzLcqmFW2267IXc' - } - } - ], - 'authentication': [ - '#dwn-sig' - ] - }; - - defaultSigningKeyId = await DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }); - - expect(defaultSigningKeyId).to.equal('did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ#dwn-sig'); - }); - - it(`returns undefined if DID document is missing 'signingKeys' and 'authentication'`, async () => { - const partialDidDocument: Partial = { - id : 'did:ion:EiAO3IAedMSHaGOZIuIVwLEBHd0SEuWwt2h00dbiGD7Hww:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoicnBLbkRQOEY0X2p3dlE3eERra3VLeDE2NU9Td2N5clF2bUVXbDJlaWdJVSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRFZyOHUzVWxvOGtNVUx3WEh6VUdSMFdGdy1ROU14el8zRGQyQXEwVF9KR3cifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUJOX1JaeXZka1lmb2tkRlV5MTNiWnFwR2gzdmhZU3IxVnh3MmVieE5uQzZRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlEOEQtdjlsVjdqTzZ3ajVjSXVsRXRwZEFqaHE5NEFnTm54SlozWThVUnlrZyJ9fQ', - service : [ - { - id : '#dwn', - type : 'DecentralizedWebNode', - serviceEndpoint : { - encryptionKeys: [ - '#dwn-enc' - ], - nodes: [ - 'https://dwn.tbddev.test/dwn0', - 'https://dwn.tbddev.test/dwn1' - ] - } - } - ], - }; - - const defaultSigningKeyId = await DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }); - - expect(defaultSigningKeyId).to.be.undefined; - }); - - it(`throws error if DID document is missing 'id' property`, async () => { - const partialDidDocument: Partial = {}; - - await expect( - DidIonMethod.getDefaultSigningKey({ - didDocument: partialDidDocument as DidDocument - }) - ).to.eventually.be.rejectedWith(Error, `DID document is missing 'id' property`); - }); - }); - - describe('resolve()', () => { - it('resolves published short form ION DIDs', async() => { - const did = 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ'; - const resolutionResult = await DidIonMethod.resolve({ didUrl: did }); - - expect(resolutionResult).to.have.property('@context'); - expect(resolutionResult).to.have.property('didDocument'); - expect(resolutionResult).to.have.property('didDocumentMetadata'); - - expect(resolutionResult.didDocument).to.have.property('id', did); - expect(resolutionResult.didDocumentMetadata.method).to.have.property('published', true); - }); - - it('returns internalError error with unpublished short form ION DIDs', async() => { - const did = 'did:ion:EiBCi7lnGtotBsFkbI_lQskQZLk_GPelU0C5-nRB4_nMfA'; - const resolutionResult = await DidIonMethod.resolve({ didUrl: did }); - - expect(resolutionResult).to.have.property('@context'); - expect(resolutionResult).to.have.property('didDocument'); - expect(resolutionResult).to.have.property('didDocumentMetadata'); - - expect(resolutionResult.didResolutionMetadata).to.have.property('error', 'internalError'); - }); - - it('resolves published long form ION DIDs', async() => { - const did = 'did:ion:EiAi68p2irCNQIzaui8gTjGDeOqSUusZS8jWVHfseSWZ5g:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJrZXktMSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiI2MWlQWXVHZWZ4b3R6QmRRWnREdnY2Y1dIWm1YclRUc2NZLXU3WTJwRlpjIiwieSI6Ijg4blBDVkxmckFZOWktd2c1T1Jjd1ZiSFdDX3RiZUFkMUpFMmUwY28wbFUifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iXSwidHlwZSI6IkVjZHNhU2VjcDI1NmsxVmVyaWZpY2F0aW9uS2V5MjAxOSJ9XSwic2VydmljZXMiOlt7ImlkIjoiZHduIiwic2VydmljZUVuZHBvaW50Ijp7Im5vZGVzIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NSJdfSwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCb1c2dGs4WlZRTWs3YjFubkF2R3F3QTQ2amlaaUc2dWNYemxyNTZDWWFiUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQ3Y2cUhEMFV4TTBadmZlTHU4dDR4eU5DVjNscFBSaTl6a3paU3h1LW8wWUEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUN0STM0ckdGNU9USkJETXRUYm14a1lQeC0ydFd3MldZLTU2UTVPNHR0WWJBIn19'; - const resolutionResult = await DidIonMethod.resolve({ didUrl: did }); - - expect(resolutionResult).to.have.property('@context'); - expect(resolutionResult).to.have.property('didDocument'); - expect(resolutionResult).to.have.property('didDocumentMetadata'); - - expect(resolutionResult.didDocument).to.have.property('id', did); - expect(resolutionResult.didDocumentMetadata.method).to.have.property('published', true); - }); - - - it('resolves unpublished long form ION DIDs', async() => { - const did = 'did:ion:EiBCi7lnGtotBsFkbI_lQskQZLk_GPelU0C5-nRB4_nMfA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJkd24tc2lnIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4Ijoib0xVQmdKUnA1dlVfSTdfOXB3UTFkb2IwSWg2VjUwT2FrenNOY2R6Uk1CbyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpQlRRYlV6cmlTU3FEVVpPb0JvUTZWek5wWFRvQWNtSjNHMlBIZzJ3ZXpFcHcifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaURLSFlkRFRpT3lCTWRORWtBcGJtUklHU1ExOFctUHFUeGlrZ0IzX1RpSlVBIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlBb2pZYzV6eTR2RFZFdElnS1lzWHgtdnBnZzNEeXBUOW0tRmtfMXZ0WHBkQSJ9fQ'; - const resolutionResult = await DidIonMethod.resolve({ didUrl: did }); - - expect(resolutionResult).to.have.property('@context'); - expect(resolutionResult).to.have.property('didDocument'); - expect(resolutionResult).to.have.property('didDocumentMetadata'); - - expect(resolutionResult.didDocument).to.have.property('id', did); - expect(resolutionResult.didDocumentMetadata.method).to.have.property('published', false); - }); - - it('returns internalError if custom DID resolver returns invalid response', async () => { - // Setup stub so that a mocked response is returned rather than calling over the network. - const mockResult = ` - 404 Not Found - -

404 Not Found

-
nginx/1.25.1
- - `; - const fetchStub = sinon.stub(global, 'fetch'); - // @ts-expect-error because we're only mocking ok and json() from global.fetch(). - fetchStub.returns(Promise.resolve({ - ok : false, - json : () => Promise.reject(JSON.parse(mockResult)) - })); - - const did = 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ'; - const resolutionResult = await DidIonMethod.resolve({ - didUrl : did, - resolutionOptions : { resolutionEndpoint: 'https://dev.uniresolver.io/7.5/identifiers' } - }); - fetchStub.restore(); - - expect(resolutionResult).to.have.property('@context'); - expect(resolutionResult).to.have.property('didDocument'); - expect(resolutionResult).to.have.property('didDocumentMetadata'); - - expect(resolutionResult.didResolutionMetadata).to.have.property('error', 'internalError'); - }); - - it(`returns methodNotSupported if DID method is not 'ion'`, async () => { - const did = 'did:key:z6MkvEvogvhMEv9bXLyDXdqSSvvh5goAMtUruYwCbFpuhDjx'; - const resolutionResult = await DidIonMethod.resolve({ didUrl: did }); - expect(resolutionResult).to.have.property('@context'); - expect(resolutionResult).to.have.property('didDocument'); - expect(resolutionResult).to.have.property('didDocumentMetadata'); - - expect(resolutionResult.didResolutionMetadata).to.have.property('error', 'methodNotSupported'); - }); - - it('accepts custom DID resolver with trailing slash', async () => { - const mockResult = { mock: 'data' }; - const fetchStub = sinon.stub(global, 'fetch'); - // @ts-expect-error because we're only mocking ok and json() from global.fetch(). - fetchStub.returns(Promise.resolve({ - ok : true, - json : () => Promise.resolve(mockResult) - })); - - const did = 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ'; - const resolutionResult = await DidIonMethod.resolve({ - didUrl : did, - resolutionOptions : { resolutionEndpoint: 'https://dev.uniresolver.io/1.0/identifiers/' } - }); - fetchStub.restore(); - - expect(resolutionResult).to.deep.equal(mockResult); - expect(fetchStub.calledOnceWith( - `https://dev.uniresolver.io/1.0/identifiers/${did}` - )).to.be.true; - }); - - it('accepts custom DID resolver without trailing slash', async () => { - const mockResult = { mock: 'data' }; - const fetchStub = sinon.stub(global, 'fetch'); - // @ts-expect-error because we're only mocking ok and json() from global.fetch(). - fetchStub.returns(Promise.resolve({ - ok : true, - json : () => Promise.resolve(mockResult) - })); - - const did = 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ'; - const resolutionResult = await DidIonMethod.resolve({ - didUrl : did, - resolutionOptions : { resolutionEndpoint: 'https://dev.uniresolver.io/1.0/identifiers' } - }); - fetchStub.restore(); - - expect(resolutionResult).to.deep.equal(mockResult); - expect(fetchStub.calledOnceWith( - `https://dev.uniresolver.io/1.0/identifiers/${did}` - )).to.be.true; - }); - }); -}); \ No newline at end of file diff --git a/packages/dids/src/index.ts b/packages/dids/src/index.ts index 704199e26..6be03159d 100644 --- a/packages/dids/src/index.ts +++ b/packages/dids/src/index.ts @@ -1,17 +1,17 @@ -// export * from './dht.js'; -// export * from './did-dht.js'; -// export * from './did-ion.js'; -export * from './did-uri.js'; export * from './did-error.js'; +export * from './did-uri.js'; + export * from './methods/did-dht.js'; +export * from './methods/did-ion.js'; export * from './methods/did-jwk.js'; -export * from './methods/did-web.js'; +export * from './methods/did-key.js'; export * from './methods/did-method.js'; -// export * from './did-key.js'; -// export * from './did-resolver.js'; -// export * from './resolver-cache-level.js'; -// export * from './resolver-cache-noop.js'; -// export * from './types.js'; +export * from './methods/did-web.js'; + +export * from './resolver/did-resolver.js'; +export * from './resolver/resolver-cache-level.js'; +export * from './resolver/resolver-cache-noop.js'; + export * as utils from './utils.js'; export * from './types/did-core.js'; \ No newline at end of file diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 9d7f614f8..816aaab46 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -29,10 +29,39 @@ import { DidError, DidErrorCode } from '../did-error.js'; import { DidVerificationRelationship } from '../types/did-core.js'; import { EMPTY_DID_RESOLUTION_RESULT } from '../resolver/did-resolver.js'; +/** + * Represents a BEP44 message, which is used for storing and retrieving data in the Mainline DHT + * network. + * + * A BEP44 message is used primarily in the context of the DID DHT method for publishing and + * resolving DID documents in the DHT network. This type encapsulates the data structure required + * for such operations in accordance with BEP44. + * + * @see {@link https://www.bittorrent.org/beps/bep_0044.html | BEP44} + */ interface Bep44Message { + /** + * The public key bytes of the Identity Key, which serves as the identifier in the DHT network for + * the corresponding BEP44 message. + */ k: Uint8Array; + + /** + * The sequence number of the message, used to ensure the latest version of the data is retrieved + * and updated. It's a monotonically increasing number. + */ seq: number; + + /** + * The signature of the message, ensuring the authenticity and integrity of the data. It's + * computed over the bencoded sequence number and value. + */ sig: Uint8Array; + + /** + * The actual data being stored or retrieved from the DHT network, typically encoded in a format + * suitable for DNS packet representation of a DID Document. + */ v: Uint8Array; } @@ -82,15 +111,11 @@ export interface DidDhtCreateOptions extends DidCreateOptions { controllers?: string | string[]; /** - * Optionally specify one or more registered DID DHT types to make the DID discovereable. - * - * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish - * to be discoverable and resolveable by type can include one or more types when publishing their - * DID document to a DID DHT Gateway. - * - * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. + * Optional. The URI of a server involved in executing DID method operations. In the context of + * DID creation, the endpoint is expected to be a Pkarr relay. If not specified, a default gateway + * node is used. */ - types?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + gatewayUri?: string; /** * Optional. Determines whether the created DID should be published to the DHT network. @@ -136,6 +161,17 @@ export interface DidDhtCreateOptions extends DidCreateOptions { */ services?: DidService[]; + /** + * Optionally specify one or more registered DID DHT types to make the DID discovereable. + * + * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish + * to be discoverable and resolveable by type can include one or more types when publishing their + * DID document to a DID DHT Gateway. + * + * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}. + */ + types?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[]; + /** * Optional. An array of verification methods to be included in the DID document. * @@ -493,17 +529,16 @@ export class DidDht extends DidMethod { // signer convenience function, and URI. const did = await DidDht.fromPublicKeys({ keyManager, options, ...keySet }); - // By default, publish the DID document to a DHT Gateway unless explicitly disabled. - if (options.publish ?? true) { - const isPublished = await this.publish({ did }); - did.metadata.published = isPublished; - } + // By default, publish the DID document to a DHT operations endpoint unless explicitly disabled. + did.metadata.published = options.publish ?? true + ? await this.publish({ did, gatewayUri: options.gatewayUri }) + : false; return did; } /** - * Instantiates a `Did` object for the `did:dht` method from a given {@link PortableDid}. + * Instantiates a `Did` object for the DID DHT method from a given {@link PortableDid}. * * This method allows for the creation of a `Did` object using pre-existing key material, * encapsulated within the `verificationMethods` array of the `PortableDid`. This is particularly @@ -511,9 +546,6 @@ export class DidDht extends DidMethod { * based on these keys, instead of generating new keys. * * @remarks - * The `verificationMethods` array must contain exactly one key since the `did:jwk` method only - * supports a single verification method. - * * The key material (both public and private keys) should be provided in JWK format. The method * handles the inclusion of these keys in the DID Document and specified verification * relationships. @@ -572,7 +604,9 @@ export class DidDht extends DidMethod { const did = await DidDht.fromPublicKeys({ keyManager, verificationMethods, options }); // By default, the DID document will NOT be published unless explicitly enabled. - did.metadata.published = options.publish ? await this.publish({ did }) : false; + did.metadata.published = options.publish + ? await this.publish({ did, gatewayUri: options.gatewayUri }) + : false; return did; } @@ -619,24 +653,26 @@ export class DidDht extends DidMethod { * * @param params - The parameters for the `publish` operation. * @param params.did - The `Did` object representing the DID to be published. - * @param params.relay - Optional. The Pkarr relay server URL to be used for publishing. If not - * specified, the default relay server is used. + * @param params.gatewayUri - Optional. The URI of a server involved in executing DID + * method operations. In the context of publishing, the + * endpoint is expected to be a Pkarr relay. If not specified, + * a default relay server is used. * @returns A Promise resolving to a boolean indicating whether the publication was successful. * * @example * ```ts * // Generate a new DID and keys but explicitly disable publishing. - * const did = await DidDht.create({ options: { publish: false }); + * const did = await DidDht.create({ options: { publish: false } }); * // Publish the DID to the DHT. * const isPublished = await DidDht.publish({ did }); * // `isPublished` is true if the DID was successfully published. * ``` */ - public static async publish({ did, relay = DEFAULT_PKARR_RELAY }: { + public static async publish({ did, gatewayUri = DEFAULT_PKARR_RELAY }: { did: Did; - relay?: string; + gatewayUri?: string; }): Promise { - const isPublished = await DidDhtDocument.put({ did, relay }); + const isPublished = await DidDhtDocument.put({ did, relay: gatewayUri }); return isPublished; } @@ -649,7 +685,8 @@ export class DidDht extends DidMethod { * retrieve the DID Document that corresponds to the given DID identifier. * * @remarks - * - The method uses the specified or default Pkarr relay server to access the DHT network. + * - If a `gatewayUri` option is not specified, a default Pkarr relay is used to access the DHT + * network. * - It decodes the DID identifier and retrieves the associated DID Document and metadata. * - In case of resolution failure, appropriate error information is returned. * @@ -663,8 +700,8 @@ export class DidDht extends DidMethod { * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. */ public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise { - // Use the given Pkarr relay or the default. - const relay = options?.pkarrRelay ?? DEFAULT_PKARR_RELAY; + // To execute the read method operation, use the given gateway URI or a default Pkarr relay. + const relay = options?.gatewayUri ?? DEFAULT_PKARR_RELAY; try { // Attempt to decode the z-base-32-encoded identifier. @@ -696,7 +733,7 @@ export class DidDht extends DidMethod { } /** - * Instantiates a `Did` object for the `did:dht` method using an array of public keys. + * Instantiates a `Did` object for the DID DHT method using an array of public keys. * * This method is used to create a `Did` object from a set of public keys, typically after * these keys have been generated or provided. It constructs the DID document, metadata, and @@ -731,7 +768,7 @@ export class DidDht extends DidMethod { // Add verification methods to the DID document. for (const vm of verificationMethods) { if (!vm.publicKeyJwk) { - throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`); + throw new Error(`Verification method does not contain a public key in JWK format`); } // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID. @@ -796,15 +833,12 @@ export class DidDht extends DidMethod { verificationMethods }: { keyManager: CryptoApi; - verificationMethods?: DidCreateVerificationMethod[]; + verificationMethods: DidCreateVerificationMethod[]; }): Promise { let portableDid: PortableDid = { verificationMethods: [] }; - // If `verificationMethodKeys` was not provided, initialize it as an empty array. - verificationMethods ??= []; - // If the given verification methods do not contain an Identity Key, add one. if (!verificationMethods?.some(vm => vm.id?.split('#').pop() === '0')) { // Add the Identity Key to the beginning of the key set. @@ -817,7 +851,7 @@ export class DidDht extends DidMethod { // Generate keys and add verification methods to the key set. for (const vm of verificationMethods) { - // Generate a new random key for the verification method. + // Generate a random key for the verification method. const keyUri = await keyManager.generateKey({ algorithm: vm.algorithm }); const publicKey = await keyManager.getPublicKey({ keyUri }); diff --git a/packages/dids/src/methods/did-ion.ts b/packages/dids/src/methods/did-ion.ts index 16a0e78da..09881f7c7 100644 --- a/packages/dids/src/methods/did-ion.ts +++ b/packages/dids/src/methods/did-ion.ts @@ -1,14 +1,805 @@ -import type { KeyIdentifier, PrivateKeyJwk, PublicKeyJwk } from '@web5/crypto'; +import type { CryptoApi, Jwk } from '@web5/crypto'; +import type { + JwkEs256k, + IonDocumentModel, + IonPublicKeyModel, + IonPublicKeyPurpose, +} from '@decentralized-identity/ion-sdk'; -import type { PortableDid } from '../methods/did-method.js'; +import { IonDid, IonRequest } from '@decentralized-identity/ion-sdk'; +import { LocalKeyManager, computeJwkThumbprint } from '@web5/crypto'; -export interface DidIonKeySet extends PortableDid { - recoveryKeyUri?: KeyIdentifier; - updateKeyUri?: KeyIdentifier; +import type { + DidService, + DidDocument, + DidResolutionResult, + DidResolutionOptions, + DidVerificationMethod, +} from '../types/did-core.js'; +import type { + Did, + DidMetadata, + PortableDid, + DidCreateOptions, + DidCreateVerificationMethod, + PortableDidVerificationMethod, +} from '../methods/did-method.js'; + +import { DidUri } from '../did-uri.js'; +import { DidMethod } from '../methods/did-method.js'; +import { DidError, DidErrorCode } from '../did-error.js'; +import { EMPTY_DID_RESOLUTION_RESULT } from '../resolver/did-resolver.js'; + +/** + * Options for creating a Decentralized Identifier (DID) using the DID ION method. + */ +export interface DidIonCreateOptions extends DidCreateOptions { + /** + * Optional. The URI of a server involved in executing DID method operations. In the context of + * DID creation, the endpoint is expected to be a Sidetree node. If not specified, a default + * gateway node is used. + */ + gatewayUri?: string; + + /** + * Optional. Determines whether the created DID should be published to a Sidetree node. + * + * If set to `true` or omitted, the DID is publicly discoverable. If `false`, the DID is not + * published and cannot be resolved by others. By default, newly created DIDs are published. + * + * @see {@link https://identity.foundation/sidetree/spec/#create | Sidetree Protocol Specification, § Create} + * + * @example + * ```ts + * const did = await DidIon.create({ + * options: { + * publish: false + * }; + * ``` + */ + publish?: boolean; + + /** + * Optional. An array of service endpoints associated with the DID. + * + * Services are used in DID documents to express ways of communicating with the DID subject or + * associated entities. A service can be any type of service the DID subject wants to advertise, + * including decentralized identity management services for further discovery, authentication, + * authorization, or interaction. + * + * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, § Services} + * + * @example + * ```ts + * const did = await DidIon.create({ + * options: { + * services: [ + * { + * id: 'dwn', + * type: 'DecentralizedWebNode', + * serviceEndpoint: ['https://example.com/dwn1', 'https://example/dwn2'] + * } + * ] + * }; + * ``` + */ + services?: DidService[]; + + /** + * Optional. An array of verification methods to be included in the DID document. + * + * By default, a newly created DID ION document will contain a single Ed25519 verification method. + * Additional verification methods can be added to the DID document using the + * `verificationMethods` property. + * + * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, § Verification Methods} + * + * @example + * ```ts + * const did = await DidIon.create({ + * options: { + * verificationMethods: [ + * { + * algorithm: 'Ed25519', + * purposes: ['authentication', 'assertionMethod'] + * }, + * { + * algorithm: 'Ed25519', + * id: 'dwn-sig', + * purposes: ['authentication', 'assertionMethod'] + * } + * ] + * }; + * ``` + */ + verificationMethods?: DidCreateVerificationMethod[]; +} + +/** + * Represents the request model for managing DID documents within the ION network, according to the + * Sidetree protocol specification. + */ +export interface DidIonCreateRequest { + /** The type of operation to perform, which is always 'create' for a Create Operation. */ + type: 'create'; + + /** Contains properties related to the initial state of the DID document. */ + suffixData: { + /** A hash of the `delta` object, representing the initial changes to the DID document. */ + deltaHash: string; + /** A commitment value used for future recovery operations, hashed for security. */ + recoveryCommitment: string; + }; + + /** Details the changes to be applied to the DID document in this operation. */ + delta: { + /** A commitment value used for the next update operation, hashed for security. */ + updateCommitment: string; + /** An array of patch objects specifying the modifications to apply to the DID document. */ + patches: { + /** The type of modification to perform (e.g., adding or removing public keys or service + * endpoints). */ + action: string; + /** The document state or partial state to apply with this patch. */ + document: IonDocumentModel; + }[]; + } +} + +/** + * `IonPortableDid` interface extends the {@link PortableDid} interface. + * + * It represents a Decentralized Identifier (DID) that is portable and can be used across different + * domains, including the ION specific recovery and update keys. + */ +export interface IonPortableDid extends PortableDid { + /** The JSON Web Key (JWK) used for recovery purposes. */ + recoveryKey: Jwk; + + /** The JSON Web Key (JWK) used for updating the DID. */ + updateKey: Jwk; +} + +/** + * Enumerates the types of keys that can be used in a DID ION document. + * + * The DID ION method supports various cryptographic key types. These key types are essential for + * the creation and management of DIDs and their associated cryptographic operations like signing + * and encryption. + */ +export enum DidIonRegisteredKeyType { + /** + * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature + * Algorithm) and Curve25519. + */ + Ed25519 = 'Ed25519', + + /** + * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized + * systems. + */ + secp256k1 = 'secp256k1', + + /** + * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations + * and is widely supported in various cryptographic libraries and standards. + */ + secp256r1 = 'secp256r1', + + /** + * X25519: A Diffie-Hellman key exchange algorithm using Curve25519. + */ + X25519 = 'X25519' +} + +/** + * Private helper that maps algorithm identifiers to their corresponding DID ION + * {@link DidIonRegisteredKeyType | registered key type}. + */ +const AlgorithmToKeyTypeMap = { + Ed25519 : DidIonRegisteredKeyType.Ed25519, + ES256K : DidIonRegisteredKeyType.secp256k1, + ES256 : DidIonRegisteredKeyType.secp256r1, + 'P-256' : DidIonRegisteredKeyType.secp256r1, + secp256k1 : DidIonRegisteredKeyType.secp256k1, + secp256r1 : DidIonRegisteredKeyType.secp256r1 +} as const; + +/** + * The default node to use as a gateway to the Sidetree newtork when anchoring, updating, and + * resolving DID documents. + */ +const DEFAULT_GATEWAY_URI = 'https://ion.tbd.engineering'; + +/** + * The `DidIon` class provides an implementation of the `did:ion` DID method. + * + * Features: + * - DID Creation: Create new `did:ion` DIDs. + * - DID Key Management: Instantiate a DID object from an existing key in a Key Management System + * (KMS). If supported by the KMS, a DID's key can be exported to a portable + * DID format. + * - DID Resolution: Resolve a `did:ion` to its corresponding DID Document stored in the DHT network. + * - Signature Operations: Sign and verify messages using keys associated with a DID. + * + * @see {@link https://identity.foundation/sidetree/spec/ | Sidetree Protocol Specification} + * @see {@link https://github.com/decentralized-identity/ion/blob/master/docs/design.md | ION Design Document} + * + * @example + * ```ts + * // DID Creation + * const did = await DidIon.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKeyManager(); + * const did = await DidIon.create({ keyManager }); + * + * // DID Resolution + * const resolutionResult = await DidIon.resolve({ did: did.uri }); + * + * // Signature Operations + * const signer = await did.getSigner(); + * const signature = await signer.sign({ data: new TextEncoder().encode('Message') }); + * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature }); + * + * // Key Management + * + * // Instantiate a DID object for a published DID with existing keys in a KMS + * const did = await DidIon.fromKeyManager({ + * didUri: 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug', + * keyManager + * }); + * + * // Convert a DID object to a portable format + * const portableDid = await DidIon.toKeys({ did }); + * ``` + */ + +export class DidIon extends DidMethod { + + /** + * Name of the DID method, as defined in the DID ION specification. + */ + public static methodName = 'ion'; + + /** + * Creates a new DID using the `did:ion` method formed from a newly generated key. + * + * Notes: + * - If no `options` are given, by default a new Ed25519 key will be generated. + * + * @example + * ```ts + * // DID Creation + * const did = await DidIon.create(); + * + * // DID Creation with a KMS + * const keyManager = new LocalKeyManager(); + * const did = await DidIon.create({ keyManager }); + * ``` + * + * @param params - The parameters for the create operation. + * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate + * keys and sign data. + * @param params.options - Optional parameters that can be specified when creating a new DID. + * @returns A Promise resolving to a {@link Did} object representing the new DID. + */ + public static async create({ + keyManager = new LocalKeyManager(), + options = {} + }: { + keyManager?: TKms; + options?: DidIonCreateOptions; + } = {}): Promise { + // Before processing the create operation, validate DID-method-specific requirements to prevent + // keys from being generated unnecessarily. + + // Check 1: Validate that the algorithm for any given verification method is supported by the + // DID ION specification. + if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) { + throw new Error('One or more verification method algorithms are not supported'); + } + + // Check 2: Validate that the required properties for any given services are present. + if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) { + throw new Error('One or more services are missing required properties'); + } + + // Generate random key material for the ION Recovery Key, ION Update Key, and any additional + // verification methods. + const keySet = await DidIon.generateKeys({ + keyManager, + verificationMethods: options.verificationMethods ?? [] + }); + + // Create the DID object from the generated key material, including DID document, metadata, + // signer convenience function, and URI. + const did = await DidIon.fromPublicKeys({ keyManager, options, ...keySet }); + + // By default, publish the DID document to a Sidetree node unless explicitly disabled. + did.metadata.published = options.publish ?? true + ? await this.publish({ did, gatewayUri: options.gatewayUri }) + : false; + + return did; + } + + /** + * Given the W3C DID Document of a `did:ion` DID, return the verification method that will be used + * for signing messages and credentials. If given, the `methodId` parameter is used to select the + * verification method. If not given, the first verification method in the authentication property + * in the DID Document is used. + * + * @param params - The parameters for the `getSigningMethod` operation. + * @param params.didDocument - DID Document to get the verification method from. + * @param params.methodId - ID of the verification method to use for signing. + * @returns Verification method to use for signing. + */ + public static async getSigningMethod({ didDocument, methodId }: { + didDocument: DidDocument; + methodId?: string; + }): Promise { + // Verify the DID method is supported. + const parsedDid = DidUri.parse(didDocument.id); + if (parsedDid && parsedDid.method !== this.methodName) { + throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`); + } + + // Get the ID of the first verification method intended for signing. + const [ firstAuthMethodId ] = didDocument.authentication || []; + + // Get the verification method with either the specified ID or the first authentication method. + const verificationMethod = didDocument.verificationMethod?.find( + vm => vm.id === (methodId ?? firstAuthMethodId) + ); + + return verificationMethod; + } + + /** + * Publishes a DID to a Sidetree node, making it publicly discoverable and resolvable. + * + * This method handles the publication of a DID Document associated with a `did:ion` DID to a + * Sidetree node. + * + * @remarks + * - This method is typically invoked automatically during the creation of a new DID unless the + * `publish` option is set to `false`. + * - For existing, unpublished DIDs, it can be used to publish the DID Document to a Sidetree node. + * - The method relies on the specified Sidetree node to interface with the network. + * + * @param params - The parameters for the `publish` operation. + * @param params.did - The `Did` object representing the DID to be published. + * @param params.gatewayUri - Optional. The URI of a server involved in executing DID + * method operations. In the context of publishing, the + * endpoint is expected to be a Sidetree node. If not + * specified, a default node is used. + * @returns A Promise resolving to a boolean indicating whether the publication was successful. + * + * @example + * ```ts + * // Generate a new DID and keys but explicitly disable publishing. + * const did = await DidIon.create({ options: { publish: false } }); + * // Publish the DID to the Sidetree network. + * const isPublished = await DidIon.publish({ did }); + * // `isPublished` is true if the DID was successfully published. + * ``` + */ + public static async publish({ did, gatewayUri = DEFAULT_GATEWAY_URI }: { + did: Did; + gatewayUri?: string; + }): Promise { + // Create the ION document. + const ionDocument = await DidIonUtils.createIonDocument({ + services : did.didDocument.service ?? [], + verificationMethods : did.didDocument.verificationMethod ?? [] + }); + + // Construct the ION Create Operation request. + const createOperation = await DidIonUtils.constructCreateRequest({ + ionDocument, + recoveryKey : did.metadata.recoveryKey, + updateKey : did.metadata.updateKey + }); + + try { + // Construct the URL of the SideTree node's operations endpoint. + const operationsUrl = DidIonUtils.appendPathToUrl({ + baseUrl : gatewayUri, + path : `/operations` + }); + + // Submit the Create Operation to the operations endpoint. + const response = await fetch(operationsUrl, { + method : 'POST', + mode : 'cors', + headers : { 'Content-Type': 'application/json' }, + body : JSON.stringify(createOperation) + }); + + // Return true if the Create Operation was processed successfully; false otherwise. + return response.ok; + + } catch (error: any) { + throw new DidError(DidErrorCode.InternalError, `Failed to publish DID document for: ${did.uri}`); + } + } + + /** + * Resolves a `did:ion` identifier to its corresponding DID document. + * + * This method performs the resolution of a `did:ion` DID, retrieving its DID Document from the + * Sidetree-based DID overlay network. The process involves querying a Sidetree node to retrieve + * the DID Document that corresponds to the given DID identifier. + * + * @remarks + * - If a `gatewayUri` option is not specified, a default node is used to access the Sidetree + * network. + * - It decodes the DID identifier and retrieves the associated DID Document and metadata. + * - In case of resolution failure, appropriate error information is returned. + * + * @example + * ```ts + * const resolutionResult = await DidIon.resolve('did:ion:example'); + * ``` + * + * @param didUri - The DID to be resolved. + * @param options - Optional parameters for resolving the DID. Unused by this DID method. + * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution. + */ + public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise { + // Attempt to parse the DID URI. + const parsedDid = DidUri.parse(didUri); + + // If parsing failed, the DID is invalid. + if (!parsedDid) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'invalidDid' } + }; + } + + // If the DID method is not "ion", return an error. + if (parsedDid.method !== DidIon.methodName) { + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { error: 'methodNotSupported' } + }; + } + + // To execute the read method operation, use the given gateway URI or a default Sidetree node. + const gatewayUri = options?.gatewayUri ?? DEFAULT_GATEWAY_URI; + + try { + // Construct the URL to be used in the resolution request. + const resolutionUrl = DidIonUtils.appendPathToUrl({ + baseUrl : gatewayUri, + path : `/identifiers/${didUri}` + }); + + // Attempt to retrieve the DID document and metadata from the Sidetree node. + const response = await fetch(resolutionUrl); + + // If the DID document was not found, return an error. + if (!response.ok) { + throw new DidError(DidErrorCode.NotFound, `Unable to find DID document for: ${didUri}`); + } + + // If the DID document was retrieved successfully, return it. + const { didDocument, didDocumentMetadata } = await response.json() as DidResolutionResult; + return { + ...EMPTY_DID_RESOLUTION_RESULT, + ...didDocument && { didDocument }, + didDocumentMetadata: { + published: didDocumentMetadata?.method?.published, + ...didDocumentMetadata + } + }; + + } catch (error: any) { + // Rethrow any unexpected errors that are not a `DidError`. + if (!(error instanceof DidError)) throw new Error(error); + + // Return a DID Resolution Result with the appropriate error code. + return { + ...EMPTY_DID_RESOLUTION_RESULT, + didResolutionMetadata: { + error: error.code, + ...error.message && { errorMessage: error.message } + } + }; + } + } + + /** + * Instantiates a `Did` object for the DID ION method using an array of public keys. + * + * This method is used to create a `Did` object from a set of public keys, typically after + * these keys have been generated or provided. It constructs the DID document, metadata, and + * other necessary components for the DID based on the provided public keys and any additional + * options specified. + * + * @param params - The parameters for the DID object creation. + * @param params.keyManager - The Key Management System to manage keys. + * @param params.options - Additional options for DID creation. + * @returns A Promise resolving to a `Did` object. + */ + private static async fromPublicKeys({ keyManager, recoveryKey, updateKey, verificationMethods, options }: { + keyManager: CryptoApi; + options: DidIonCreateOptions; + } & IonPortableDid): Promise { + // Validate an ION Recovery Key was generated or provided. + if (!recoveryKey) { + throw new Error('Missing required input: ION Recovery Key'); + } + + // Validate an ION Update Key was generated or provided. + if (!updateKey) { + throw new Error('Missing required input: ION Update Key'); + } + + // Compute the Long Form DID URI from the keys and services, if any. + const id = await DidIonUtils.computeLongFormDidUri({ + recoveryKey, + updateKey, + verificationMethods, + services: options.services ?? [] + }); + + // Expand the DID URI string to a DID document. + const { didDocument, didResolutionMetadata } = await DidIon.resolve(id, { gatewayUri: options.gatewayUri }); + if (didDocument === null) { + throw new Error(`Unable to resolve DID during creation: ${didResolutionMetadata?.error}`); + } + + // Define DID Metadata, including the "Short Form" of the DID URI. + const metadata: DidMetadata = { + canonicalId: id.split(':', 3).join(':'), + recoveryKey, + updateKey + }; + + // Define a function that returns a signer for the DID. + const getSigner = async (params?: { keyUri?: string }) => await DidIon.getSigner({ + didDocument, + keyManager, + keyUri: params?.keyUri + }); + + return { didDocument, getSigner, keyManager, metadata, uri: id }; + } + + /** + * Generates a set of keys for use in creating a `Did` object for the DID ION method. + * + * This method is responsible for generating the cryptographic keys necessary for the DID, + * including the ION Update and Recovery keys and any verification methods specified in the + * `verificationMethods` parameter. + * + * @param params - The parameters for key generation. + * @param params.keyManager - The Key Management System used for generating keys. + * @param params.verificationMethods - Optional array of methods specifying key generation details. + * @returns A Promise resolving to a `PortableDid` object containing the generated keys. + */ + private static async generateKeys({ + keyManager, + verificationMethods + }: { + keyManager: CryptoApi; + verificationMethods: DidCreateVerificationMethod[]; + }): Promise { + let portableDid: PortableDid = { + verificationMethods: [] + }; + + // If no verification methods were specified, generate a default Ed25519 verification method. + if (verificationMethods.length === 0) { + verificationMethods = [{ + algorithm : 'Ed25519', + purposes : ['authentication', 'assertionMethod'] + }]; + } + + // Generate keys and add verification methods to the key set. + for (const vm of verificationMethods) { + // Generate a random key for the verification method. + const keyUri = await keyManager.generateKey({ algorithm: vm.algorithm }); + const publicKey = await keyManager.getPublicKey({ keyUri }); + + // Add the verification method to the `PortableDid`. + portableDid.verificationMethods.push({ + id : vm.id, + type : 'JsonWebKey', + controller : vm.controller, + publicKeyJwk : publicKey, + purposes : vm.purposes + }); + } + + // Generate a random key for the ION Recovery Key. Sidetree requires secp256k1 recovery keys. + const recoveryKeyUri = await keyManager.generateKey({ algorithm: DidIonRegisteredKeyType.secp256k1 }); + const recoveryKey = await keyManager.getPublicKey({ keyUri: recoveryKeyUri }); + + // Generate a random key for the ION Update Key. Sidetree requires secp256k1 update keys. + const updateKeyUri = await keyManager.generateKey({ algorithm: DidIonRegisteredKeyType.secp256k1 }); + const updateKey = await keyManager.getPublicKey({ keyUri: updateKeyUri }); + + return { ...portableDid, recoveryKey, updateKey }; + } } -/** Object representing an asymmetric key pair in JWK format. */ -export type JwkKeyPair = { - publicKeyJwk: PublicKeyJwk; - privateKeyJwk: PrivateKeyJwk; +/** + * The `DidIonUtils` class provides utility functions to support operations in the DID ION method. + */ +class DidIonUtils { + /** + * Appends a specified path to a base URL, ensuring proper formatting of the resulting URL. + * + * This method is useful for constructing URLs for accessing various endpoints, such as Sidetree + * nodes in the ION network. It handles the nuances of URL path concatenation, including the + * addition or removal of leading/trailing slashes, to create a well-formed URL. + * + * @param params - The parameters for URL construction. + * @param params.baseUrl - The base URL to which the path will be appended. + * @param params.path - The path to append to the base URL. + * @returns The fully constructed URL string with the path appended to the base URL. + */ + public static appendPathToUrl({ baseUrl, path }: { + baseUrl: string; + path: string; + }): string { + const url = new URL(baseUrl); + url.pathname = url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'; + url.pathname += path.startsWith('/') ? path.substring(1) : path; + + return url.toString(); + } + + /** + * Computes the Long Form DID URI given an ION DID's recovery key, update key, services, and + * verification methods. + * + * @param params - The parameters for computing the Long Form DID URI. + * @param params.recoveryKey - The ION Recovery Key. + * @param params.updateKey - The ION Update Key. + * @param params.services - An array of services associated with the DID. + * @param params.verificationMethods - An array of verification methods associated with the DID. + * @returns A Promise resolving to the Long Form DID URI. + */ + public static async computeLongFormDidUri({ recoveryKey, updateKey, services, verificationMethods }: { + recoveryKey: Jwk; + services: DidService[]; + updateKey: Jwk; + verificationMethods: PortableDidVerificationMethod[]; + }): Promise { + // Create the ION document. + const ionDocument = await DidIonUtils.createIonDocument({ services, verificationMethods }); + + // Normalize JWK to onnly include specific members and in lexicographic order. + const normalizedRecoveryKey = DidIonUtils.normalizeJwk(recoveryKey); + const normalizedUpdateKey = DidIonUtils.normalizeJwk(updateKey); + + // Compute the Long Form DID URI. + const longFormDidUri = await IonDid.createLongFormDid({ + document : ionDocument, + recoveryKey : normalizedRecoveryKey as JwkEs256k, + updateKey : normalizedUpdateKey as JwkEs256k + }); + + return longFormDidUri; + } + + /** + * Constructs a Sidetree Create Operation request for a DID document within the ION network. + * + * This method prepares the necessary payload for submitting a Create Operation to a Sidetree + * node, encapsulating the details of the DID document, recovery key, and update key. + * + * @param params - Parameters required to construct the Create Operation request. + * @param params.ionDocument - The DID document model containing public keys and service endpoints. + * @param params.recoveryKey - The recovery public key in JWK format. + * @param params.updateKey - The update public key in JWK format. + * @returns A promise resolving to the ION Create Operation request model, ready for submission to a Sidetree node. + */ + public static async constructCreateRequest({ ionDocument, recoveryKey, updateKey }: { + ionDocument: IonDocumentModel, + recoveryKey: Jwk, + updateKey: Jwk + }): Promise { + // Create an ION DID create request operation. + const createRequest = await IonRequest.createCreateRequest({ + document : ionDocument, + recoveryKey : DidIonUtils.normalizeJwk(recoveryKey) as JwkEs256k, + updateKey : DidIonUtils.normalizeJwk(updateKey) as JwkEs256k + }) as DidIonCreateRequest; + + return createRequest; + } + + /** + * Assembles an ION document model from provided services and verification methods + * + * This model serves as the foundation for a DID document in the ION network, facilitating the + * creation and management of decentralized identities. It translates service endpoints and + * public keys into a format compatible with the Sidetree protocol, ensuring the resulting DID + * document adheres to the required specifications for ION DIDs. This method is essential for + * constructing the payload needed to register or update DIDs within the ION network. + * + * @param params - The parameters containing the services and verification methods to include in the ION document. + * @param params.services - A list of service endpoints to be included in the DID document, specifying ways to interact with the DID subject. + * @param params.verificationMethods - A list of verification methods to be included, detailing the cryptographic keys and their intended uses within the DID document. + * @returns A Promise resolving to an `IonDocumentModel`, ready for use in Sidetree operations like DID creation and updates. + */ + public static async createIonDocument({ services, verificationMethods }: { + services: DidService[]; + verificationMethods: PortableDidVerificationMethod[] + }): Promise { + /** + * STEP 1: Convert verification methods to ION SDK format. + */ + const ionPublicKeys: IonPublicKeyModel[] = []; + + for (const vm of verificationMethods) { + if (!vm.publicKeyJwk) { + throw new Error(`Verification method does not contain a public key in JWK format`); + } + + // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID. + let methodId = vm.id ?? vm.publicKeyJwk.kid ?? await computeJwkThumbprint({ jwk: vm.publicKeyJwk }); + methodId = `${methodId.split('#').pop()}`; // Remove fragment prefix, if any. + + // Convert public key JWK to ION format. + const publicKey: IonPublicKeyModel = { + id : methodId, + publicKeyJwk : DidIonUtils.normalizeJwk(vm.publicKeyJwk), + purposes : vm.purposes as IonPublicKeyPurpose[], + type : 'JsonWebKey2020' + }; + + ionPublicKeys.push(publicKey); + } + + /** + * STEP 2: Convert service entries, if any, to ION SDK format. + */ + const ionServices = services.map(service => ({ + ...service, + id: `${service.id.split('#').pop()}` // Remove fragment prefix, if any. + })); + + /** + * STEP 3: Format as ION document. + */ + const ionDocumentModel: IonDocumentModel = { + publicKeys : ionPublicKeys, + services : ionServices + }; + + return ionDocumentModel; + } + + /** + * Normalize the given JWK to include only specific members and in lexicographic order. + * + * @param jwk - The JWK to normalize. + * @returns The normalized JWK. + */ + private static normalizeJwk(jwk: Jwk): Jwk { + const keyType = jwk.kty; + let normalizedJwk: Jwk; + + if (keyType === 'EC') { + normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y }; + } else if (keyType === 'oct') { + normalizedJwk = { k: jwk.k, kty: jwk.kty }; + } else if (keyType === 'OKP') { + normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x }; + } else if (keyType === 'RSA') { + normalizedJwk = { e: jwk.e, kty: jwk.kty, n: jwk.n }; + } else { + throw new Error(`Unsupported key type: ${keyType}`); + } + + return normalizedJwk; + } } \ No newline at end of file diff --git a/packages/dids/src/methods/did-jwk.ts b/packages/dids/src/methods/did-jwk.ts index 40559ed5e..9294caf28 100644 --- a/packages/dids/src/methods/did-jwk.ts +++ b/packages/dids/src/methods/did-jwk.ts @@ -368,7 +368,7 @@ export class DidJwk extends DidMethod { } /** - * Instantiates a `Did` object for the `did:jwk` method from a given public key. + * Instantiates a `Did` object for the DID JWK method from a given public key. * * @param params - The parameters for the operation. * @param params.keyManager - A Key Management System (KMS) instance for managing keys and @@ -386,7 +386,7 @@ export class DidJwk extends DidMethod { // Attach the prefix `did:jwk` to form the complete DID URI. const didUri = `did:${DidJwk.methodName}:${base64UrlEncoded}`; - // Expand the DID URI string to a DID didDocument. + // Expand the DID URI string to a DID document. const didResolutionResult = await DidJwk.resolve(didUri); const didDocument = didResolutionResult.didDocument as DidDocument; diff --git a/packages/dids/src/methods/did-key.ts b/packages/dids/src/methods/did-key.ts index 6e58b6bc2..5a1476192 100644 --- a/packages/dids/src/methods/did-key.ts +++ b/packages/dids/src/methods/did-key.ts @@ -1,5 +1,15 @@ import type { MulticodecCode, MulticodecDefinition, RequireOnly } from '@web5/common'; -import type { AsymmetricKeyConverter, CryptoApi, InferKeyGeneratorAlgorithm, Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams } from '@web5/crypto'; +import type { + Jwk, + CryptoApi, + KeyCompressor, + KeyIdentifier, + KmsExportKeyParams, + KmsImportKeyParams, + KeyImporterExporter, + AsymmetricKeyConverter, + InferKeyGeneratorAlgorithm, +} from '@web5/crypto'; import { Convert, Multicodec, universalTypeOf } from '@web5/common'; import { @@ -135,14 +145,11 @@ export interface DidKeyCreateOptions extends DidCreateOptions { } /** - * Enumerates the types of keys that can be used in a DID DHT document. + * Enumerates the types of keys that can be used in a DID Key document. * - * The DID DHT method supports various cryptographic key types. These key types are essential for + * The DID Key method supports various cryptographic key types. These key types are essential for * the creation and management of DIDs and their associated cryptographic operations like signing - * and encryption. The registered key types are published in the DID DHT Registry and each is - * assigned a unique numerical value for use by client and gateway implementations. - * - * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}. + * and encryption. */ export enum DidKeyRegisteredKeyType { /** @@ -169,10 +176,22 @@ export enum DidKeyRegisteredKeyType { X25519 = 'X25519' } +/** + * Enumerates the verification method types supported by the DID Key method. + * + * This enum defines the URIs associated with common verification methods used in DID Documents. + * These URIs represent cryptographic suites or key types standardized for use across decentralized + * identifiers (DIDs). + */ export const DidKeyVerificationMethodType = { - Ed25519VerificationKey2020 : 'https://w3id.org/security/suites/ed25519-2020/v1', - JsonWebKey2020 : 'https://w3id.org/security/suites/jws-2020/v1', - X25519KeyAgreementKey2020 : 'https://w3id.org/security/suites/x25519-2020/v1', + /** Represents an Ed25519 public key used for digital signatures. */ + Ed25519VerificationKey2020: 'https://w3id.org/security/suites/ed25519-2020/v1', + + /** Represents a JSON Web Key (JWK) used for digital signatures and key agreement protocols. */ + JsonWebKey2020: 'https://w3id.org/security/suites/jws-2020/v1', + + /** Represents an X25519 public key used for key agreement protocols. */ + X25519KeyAgreementKey2020: 'https://w3id.org/security/suites/x25519-2020/v1', } as const; /** @@ -409,8 +428,8 @@ export class DidKey extends DidMethod { /** * Given the W3C DID Document of a `did:key` DID, return the verification method that will be used - * for signing messages and credentials. With DID Key, the first verification method in the DID - * Document is always used. + * for signing messages and credentials. With DID Key, the first verification method in the + * authentication property in the DID Document is used. * * Note that for DID Key, only one verification method intended for signing can exist so * specifying `methodId` could be considered redundant or unnecessary. The option is provided for @@ -432,7 +451,7 @@ export class DidKey extends DidMethod { } // Get the ID of the first verification method intended for signing. - const [ methodId ] = didDocument.authentication ?? []; + const [ methodId ] = didDocument.authentication || []; // Get the verification method with the specified ID. const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id === methodId); @@ -946,7 +965,7 @@ export class DidKey extends DidMethod { } /** - * Creates a new DID using the `did:key` method formed from a public key. + * Creates a new DID using the DID Key method formed from a public key. * */ private static async fromPublicKey({ keyManager, publicKey, options }: { @@ -960,7 +979,7 @@ export class DidKey extends DidMethod { // Attach the prefix `did:jwk` to form the complete DID URI. const didUri = `did:${DidKey.methodName}:${multibaseId}`; - // Expand the DID URI string to a DID didDocument. + // Expand the DID URI string to a DID document. const didResolutionResult = await DidKey.resolve(didUri, options); const didDocument = didResolutionResult.didDocument as DidDocument; @@ -977,6 +996,14 @@ export class DidKey extends DidMethod { return { didDocument, getSigner, keyManager, metadata, uri: didUri }; } + /** + * Validates the structure and components of a DID URI against the `did:key` method specification. + * + * @param parsedDid - An object representing the parsed components of a DID URI, including the + * scheme, method, and method-specific identifier. + * @returns `true` if the DID URI meets the `did:key` method's structural requirements, `false` otherwise. + * + */ private static validateIdentifier(parsedDid: DidUri): boolean { const { method, id: multibaseValue } = parsedDid; const [ scheme ] = parsedDid.uri.split(':', 1); @@ -999,23 +1026,25 @@ export class DidKey extends DidMethod { } } +/** + * The `DidKeyUtils` class provides utility functions to support operations in the DID Key method. + */ export class DidKeyUtils { - /** * A mapping from JSON Web Key (JWK) property descriptors to multicodec names. * * This mapping is used to convert keys in JWK (JSON Web Key) format to multicodec format. * + * @remarks + * The keys of this object are strings that describe the JOSE key type and usage, + * such as 'Ed25519:public', 'Ed25519:private', etc. The values are the corresponding multicodec + * names used to represent these key types. + * * @example * ```ts * const multicodecName = JWK_TO_MULTICODEC['Ed25519:public']; * // Returns 'ed25519-pub', the multicodec name for an Ed25519 public key * ``` - * - * @remarks - * The keys of this object are strings that describe the JOSE key type and usage, - * such as 'Ed25519:public', 'Ed25519:private', etc. - * The values are the corresponding multicodec names used to represent these key types. */ private static JWK_TO_MULTICODEC: { [key: string]: string } = { 'Ed25519:public' : 'ed25519-pub', @@ -1026,6 +1055,10 @@ export class DidKeyUtils { 'X25519:private' : 'x25519-priv', }; + /** + * Defines the expected byte lengths for public keys associated with different cryptographic + * algorithms, indexed by their multicodec code values. + */ public static MULTICODEC_PUBLIC_KEY_LENGTH: Record = { // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes 0xe7: 33, @@ -1042,15 +1075,15 @@ export class DidKeyUtils { * representations. This mapping facilitates the conversion of multicodec key formats to * JWK (JSON Web Key) formats. * + * @remarks + * The keys of this object are multicodec names, such as 'ed25519-pub', 'ed25519-priv', etc. + * The values are objects representing the corresponding JWK properties for that key type. + * * @example * ```ts * const joseKey = MULTICODEC_TO_JWK['ed25519-pub']; * // Returns a partial JWK for an Ed25519 public key * ``` - * - * @remarks - * The keys of this object are multicodec names, such as 'ed25519-pub', 'ed25519-priv', etc. - * The values are objects representing the corresponding JWK properties for that key type. */ private static MULTICODEC_TO_JWK: { [key: string]: Jwk } = { 'ed25519-pub' : { crv: 'Ed25519', kty: 'OKP', x: '' }, @@ -1116,9 +1149,6 @@ export class DidKeyUtils { * ``` * * @param params - The parameters for the conversion. - * @param params.key - The cryptographic key as a Uint8Array. - * @param params.multicodecCode - Optional multicodec code to prefix the key with. - * @param params.multicodecName - Optional multicodec name corresponding to the code. * @returns The multibase identifier as a string. */ public static keyBytesToMultibaseId({ keyBytes, multicodecCode, multicodecName }: @@ -1143,11 +1173,12 @@ export class DidKeyUtils { */ public static keyCompressor( curve: string - ): ({ publicKeyBytes }: { publicKeyBytes: Uint8Array }) => Promise { + ): KeyCompressor['compressPublicKey'] { + // ): ({ publicKeyBytes }: { publicKeyBytes: Uint8Array }) => Promise { const compressors = { 'P-256' : Secp256r1.compressPublicKey, 'secp256k1' : Secp256k1.compressPublicKey - } as Record Promise>; + } as Record; const compressor = compressors[curve]; diff --git a/packages/dids/src/methods/did-method.ts b/packages/dids/src/methods/did-method.ts index 5843dca3c..7746ded15 100644 --- a/packages/dids/src/methods/did-method.ts +++ b/packages/dids/src/methods/did-method.ts @@ -344,11 +344,6 @@ export class DidMethod { await keyManager.getPublicKey({ keyUri }); } - // Define DID Metadata, including the registered DID types and published state. - // const metadata: DidMetadata = { - // ...didDocumentMetadata?.published && { published: didDocumentMetadata.published }, - // ...didDocumentMetadata?.types && { types: didDocumentMetadata.types } - // }; const metadata: DidMetadata = didDocumentMetadata; // Define a function that returns a signer for the DID. diff --git a/packages/dids/src/resolver/did-resolver.ts b/packages/dids/src/resolver/did-resolver.ts index c670f8dfa..6a3168479 100644 --- a/packages/dids/src/resolver/did-resolver.ts +++ b/packages/dids/src/resolver/did-resolver.ts @@ -12,11 +12,39 @@ import { DidResolverCacheNoop } from './resolver-cache-noop.js'; */ export interface DidResolverCache extends KeyValueStore {} -export type DidResolverOptions = { +/** + * Parameters for configuring the `DidResolver` class, which is responsible for resolving + * decentralized identifiers (DIDs) to their corresponding DID documents. + * + * This type specifies the essential components required by the `DidResolver` to perform + * DID resolution and dereferencing. It includes an array of `DidMethodResolver` instances, + * each capable of resolving DIDs for a specific method, and optionally, a cache for storing + * resolved DID documents to improve resolution efficiency. + */ +export type DidResolverParams = { + /** + * An array of `DidMethodResolver` instances. + * + * Each resolver in this array is designed to handle a specific DID method, enabling the + * `DidResolver` to support multiple DID methods simultaneously. + */ didResolvers: DidMethodResolver[]; + + /** + * An optional `DidResolverCache` instance used for caching resolved DID documents. + * + * Providing a cache implementation can significantly enhance resolution performance by avoiding + * redundant resolutions for previously resolved DIDs. If omitted, a no-operation cache is used, + * which effectively disables caching. + */ cache?: DidResolverCache; } +/** + * A constant representing an empty DID Resolution Result. This object is used as the basis for a + * result of DID resolution and is typically augmented with additional properties by the + * DID method resolver. + */ export const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = { '@context' : 'https://w3id.org/did-resolution/v1', didResolutionMetadata : {}, @@ -29,8 +57,11 @@ export const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = { * their corresponding DID documents. * * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver` - * instances, each responsible for a specific DID method. It also employs a caching mechanism to - * store and retrieve previously resolved DID documents for efficiency. + * instances, each responsible for a specific DID method. + * + * Providing a cache implementation can significantly enhance resolution performance by avoiding + * redundant resolutions for previously resolved DIDs. If omitted, a no-operation cache is used, + * which effectively disables caching. * * Usage: * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache. @@ -62,30 +93,22 @@ export class DidResolver { /** * Constructs a new `DidResolver`. * - * @param options - The options for constructing the `DidResolver`. - * @param options.didResolvers - An array of `DidMethodResolver` instances. - * @param options.cache - Optional. A cache for storing resolved DID documents. If not provided, a no-operation cache is used. + * @param params - The parameters for constructing the `DidResolver`. */ - constructor(options: DidResolverOptions) { - this.cache = options.cache || DidResolverCacheNoop; + constructor({ cache, didResolvers }: DidResolverParams) { + this.cache = cache || DidResolverCacheNoop; - for (const resolver of options.didResolvers) { + for (const resolver of didResolvers) { this.didResolvers.set(resolver.methodName, resolver); } } /** * Resolves a DID to a DID Resolution Result. - * If the DID Resolution Result is present in the cache, it returns the cached - * result. Otherwise, it uses the appropriate method resolver to resolve - * the DID, stores the resolution result in the cache, and returns the - * resolultion result. * - * Note: The method signature for resolve() in this implementation must match - * the `DidResolver` implementation in - * {@link https://github.com/TBD54566975/dwn-sdk-js | dwn-sdk-js} so that - * Web5 apps and the underlying DWN instance can share the same DID - * resolution cache. + * If the DID Resolution Result is present in the cache, it returns the cached result. Otherwise, + * it uses the appropriate method resolver to resolve the DID, stores the resolution result in the + * cache, and returns the resolultion result. * * @param didUri - The DID or DID URL to resolve. * @returns A promise that resolves to the DID Resolution Result. @@ -149,7 +172,7 @@ export class DidResolver { * TODO: This is a partial implementation and does not fully implement DID URL dereferencing. (https://github.com/TBD54566975/web5-js/issues/387) * * @param didUrl - The DID URL string to dereference. - * @param [dereferenceOptions] - Input options to the dereference function. Optional. + * @param [_options] - Input options to the dereference function. Optional. * @returns a {@link DidDereferencingResult} */ async dereference( diff --git a/packages/dids/src/resolver/resolver-cache-level.ts b/packages/dids/src/resolver/resolver-cache-level.ts index 0deb1c77d..c7a7b71c5 100644 --- a/packages/dids/src/resolver/resolver-cache-level.ts +++ b/packages/dids/src/resolver/resolver-cache-level.ts @@ -6,14 +6,53 @@ import { Level } from 'level'; import type { DidResolverCache } from './did-resolver.js'; import type { DidResolutionResult } from '../types/did-core.js'; -export type DidResolverCacheLevelOptions = { +/** + * Configuration parameters for creating a LevelDB-based cache for DID resolution results. + * + * Allows customization of the underlying database instance, storage location, and cache + * time-to-live (TTL) settings. + */ +export type DidResolverCacheLevelParams = { + /** + * Optional. An instance of `AbstractLevel` to use as the database. If not provided, a new + * LevelDB instance will be created at the specified `location`. + */ db?: AbstractLevel; + + /** + * Optional. The file system path or IndexedDB name where the LevelDB store will be created. + * Defaults to 'DATA/DID_RESOLVERCACHE' if not specified. + */ location?: string; + + /** + * Optional. The time-to-live for cache entries, expressed as a string (e.g., '1h', '15m'). + * Determines how long a cache entry should remain valid before being considered expired. Defaults + * to '15m' if not specified. + */ ttl?: string; } +/** + * Encapsulates a DID resolution result along with its expiration information for caching purposes. + * + * This type is used internally by the `DidResolverCacheLevel` to store DID resolution results + * with an associated time-to-live (TTL) value. The TTL is represented in milliseconds and + * determines when the cached entry is considered expired and eligible for removal. + */ type CacheWrapper = { + /** + * The expiration time of the cache entry in milliseconds since the Unix epoch. + * + * This value is used to calculate whether the cached entry is still valid or has expired. + */ ttlMillis: number; + + /** + * The DID resolution result being cached. + * + * This object contains the resolved DID document and associated metadata. + */ value: DidResolutionResult; } @@ -33,14 +72,17 @@ type CacheWrapper = { * ``` */ export class DidResolverCacheLevel implements DidResolverCache { + /** The underlying LevelDB store used for caching. */ private cache: AbstractLevel; + + /** The time-to-live for cache entries in milliseconds. */ private ttl: number; constructor({ db, location = 'DATA/DID_RESOLVERCACHE', ttl = '15m' - }: DidResolverCacheLevelOptions = {}) { + }: DidResolverCacheLevelParams = {}) { this.cache = db ?? new Level(location); this.ttl = ms(ttl); } diff --git a/packages/dids/src/types.ts b/packages/dids/src/types.ts deleted file mode 100644 index 59cfff599..000000000 --- a/packages/dids/src/types.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { DidDocument } from './types/did-core.js'; - -type DidMetadata = { - /** - * Additional properties of any type. - */ - [key: string]: any; -} - -/** - * Format to document a DID identifier, along with its associated data, - * which can be exported, saved to a file, or imported. The intent is - * bundle all of the necessary metadata to enable usage of the DID in - * different contexts. - */ -interface PortableDid { - did: string; - - /** - * A DID method can define different forms of a DID that are logically - * equivalent. An example is when a DID takes one form prior to registration - * in a verifiable data registry and another form after such registration. - * This is the purpose of the canonicalId property. - * - * The `canonicalId` must be used as the primary ID for the DID subject, - * with all other equivalent values treated as secondary aliases. - * - * @see {@link https://www.w3.org/TR/did-core/#dfn-canonicalid | W3C DID Document Metadata} - */ - canonicalId?: string; - - /** - * A set of data describing the DID subject, including mechanisms, such as - * cryptographic public keys, that the DID subject or a DID delegate can use - * to authenticate itself and prove its association with the DID. - */ - document: DidDocument; - - /** - * A collection of cryptographic keys associated with the DID subject. The - * `keySet` encompasses various forms, such as recovery keys, update keys, - * and verification method keys, to enable authentication and verification - * of the DID subject's association with the DID. - */ - keySet: DidKeySet; - - /** - * This property can be used to store method specific data about - * each managed DID and additional properties of any type. - */ - metadata?: DidMetadata; -} - -interface DidKeySet {} \ No newline at end of file diff --git a/packages/dids/src/types/did-core.ts b/packages/dids/src/types/did-core.ts index 4a4f2b97f..fbd8c893b 100644 --- a/packages/dids/src/types/did-core.ts +++ b/packages/dids/src/types/did-core.ts @@ -112,7 +112,7 @@ export interface DidDocument { * A JSON-LD context link, which provides a JSON-LD processor with the information necessary to * interpret the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'. */ - '@context'?: 'https://www.w3.org/ns/did/v1' | string | string[]; + '@context'?: 'https://www.w3.org/ns/did/v1' | string | (string | Record)[]; /** * The DID Subject to which this DID Document pertains. @@ -276,7 +276,7 @@ export type DidDocumentMetadata = { * * @see {@link https://www.w3.org/TR/did-core/#dfn-equivalentid | DID Core Specification, § DID Document Metadata} */ - equivalentId?: string; + equivalentId?: string[]; /** * The `canonicalId` property is identical to the `equivalentId` property except: @@ -389,7 +389,7 @@ export type DidResolutionResult = { * interpret the resolution result JSON. The default context URL is * 'https://w3id.org/did-resolution/v1'. */ - '@context'?: 'https://w3id.org/did-resolution/v1' | string | string[]; + '@context'?: 'https://w3id.org/did-resolution/v1' | string | (string | Record)[]; /** * A metadata structure consisting of values relating to the results of the DID resolution diff --git a/packages/dids/tests/fixtures/test-vectors/did-ion/create.ts b/packages/dids/tests/fixtures/test-vectors/did-ion/create.ts new file mode 100644 index 000000000..a14e62727 --- /dev/null +++ b/packages/dids/tests/fixtures/test-vectors/did-ion/create.ts @@ -0,0 +1,425 @@ +import type { Jwk } from '@web5/crypto'; + +import type { DidResolutionResult } from '../../../../src/types/did-core.js'; + +type TestVector = { + [key: string]: { + didUri: string; + privateKey: Jwk[]; + didResolutionResult: DidResolutionResult; + }; +}; + +export const vectors: TestVector = { + oneMethodNoServices: { + didUri : 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJFN1kyUUt1Zm9HUHhqWXJZSFl6MG51b1VtaEQxM1ctWGYxOVotdl9sTGNVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoibU9MYkxWVDQwR0lhTk13bjFqd05pdFhad05NTllIdmg5c0FOb0xvTjY5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRDlSN0M2enloakFFS25uT3RiRW1DU1d0RGJwQXFxbE1uMW4tNS04dlltYUEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNOazhJRHJkWHdMNng5Z1ZicHdvOEZpNDNTZUVzQjMxSm1UNzN5ODNOZ25BIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlCUUNPclZBeVNHcXF2YVMzRU15c2RlNVhkUHhGTzFDZzlDN2lqOUs2NjhzQSJ9fQ', + privateKey : [ + { + crv : 'Ed25519', + d : 'kxXp_AYrMbkVvaWS_nDLIK1INI6Y_CpmUiZQemVCWI0', + kty : 'OKP', + x : 'mOLbLVT40GIaNMwn1jwNitXZwNMNYHvh9sANoLoN69A', + kid : 'E7Y2QKufoGPxjYrYHYz0nuoUmhD13W-Xf19Z-v_lLcU', + alg : 'EdDSA', + } + ], + didResolutionResult: { + didDocument: { + id : 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJFN1kyUUt1Zm9HUHhqWXJZSFl6MG51b1VtaEQxM1ctWGYxOVotdl9sTGNVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoibU9MYkxWVDQwR0lhTk13bjFqd05pdFhad05NTllIdmg5c0FOb0xvTjY5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRDlSN0M2enloakFFS25uT3RiRW1DU1d0RGJwQXFxbE1uMW4tNS04dlltYUEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNOazhJRHJkWHdMNng5Z1ZicHdvOEZpNDNTZUVzQjMxSm1UNzN5ODNOZ25BIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlCUUNPclZBeVNHcXF2YVMzRU15c2RlNVhkUHhGTzFDZzlDN2lqOUs2NjhzQSJ9fQ', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJFN1kyUUt1Zm9HUHhqWXJZSFl6MG51b1VtaEQxM1ctWGYxOVotdl9sTGNVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoibU9MYkxWVDQwR0lhTk13bjFqd05pdFhad05NTllIdmg5c0FOb0xvTjY5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRDlSN0M2enloakFFS25uT3RiRW1DU1d0RGJwQXFxbE1uMW4tNS04dlltYUEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNOazhJRHJkWHdMNng5Z1ZicHdvOEZpNDNTZUVzQjMxSm1UNzN5ODNOZ25BIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlCUUNPclZBeVNHcXF2YVMzRU15c2RlNVhkUHhGTzFDZzlDN2lqOUs2NjhzQSJ9fQ', + }, + ], + service: [ + ], + verificationMethod: [ + { + id : '#E7Y2QKufoGPxjYrYHYz0nuoUmhD13W-Xf19Z-v_lLcU', + controller : 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJFN1kyUUt1Zm9HUHhqWXJZSFl6MG51b1VtaEQxM1ctWGYxOVotdl9sTGNVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoibU9MYkxWVDQwR0lhTk13bjFqd05pdFhad05NTllIdmg5c0FOb0xvTjY5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRDlSN0M2enloakFFS25uT3RiRW1DU1d0RGJwQXFxbE1uMW4tNS04dlltYUEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNOazhJRHJkWHdMNng5Z1ZicHdvOEZpNDNTZUVzQjMxSm1UNzN5ODNOZ25BIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlCUUNPclZBeVNHcXF2YVMzRU15c2RlNVhkUHhGTzFDZzlDN2lqOUs2NjhzQSJ9fQ', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'mOLbLVT40GIaNMwn1jwNitXZwNMNYHvh9sANoLoN69A', + }, + }, + ], + authentication: [ + '#E7Y2QKufoGPxjYrYHYz0nuoUmhD13W-Xf19Z-v_lLcU', + ], + assertionMethod: [ + '#E7Y2QKufoGPxjYrYHYz0nuoUmhD13W-Xf19Z-v_lLcU', + ], + }, + didDocumentMetadata: { + method: { + published : false, + recoveryCommitment : 'EiBQCOrVAySGqqvaS3EMysde5XdPxFO1Cg9C7ij9K668sA', + updateCommitment : 'EiD9R7C6zyhjAEKnnOtbEmCSWtDbpAqqlMn1n-5-8vYmaA', + }, + equivalentId: [ + 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug', + ], + }, + didResolutionMetadata: {} + } + }, + + twoMethodsNoServices: { + didUri : 'did:ion:EiBya40LM6p4aaMyp2NtImm3yvtUOSXmmHNgcCt6JudUHQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJJZ2wwUE1Cam9tWDVyeHRCeUJZdDh4ZWpRbF9XQktCaXZaak9ydnhjVFAwIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiOE1jWGdDN25ydjY3RTZBSG9SN2lDcjVaY0xRdml5aHo4M2NmSm5YLVY5MCJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifSx7ImlkIjoib0dTS1p6LUdZYW5CMTg4SnlPcXI4dmcxU0dIdzRHVnBBVWpkbGNKdmJvUSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiJLT1lkNjRjaHBUZEc0bEtZczJlTXYtVkIzZ2E2b1FLcnFfYWFZdGtlWGZVIiwieSI6IkN2N3BfQnlCSHprZElja2gtcEUxSDZqcDFNVmJDUE9GMC1WQWVzZGN3dmMifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iLCJhc3NlcnRpb25NZXRob2QiXSwidHlwZSI6Ikpzb25XZWJLZXkyMDIwIn1dLCJzZXJ2aWNlcyI6W119fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUR2VjUtYjhDMEQ4NEZxMzh2M2ZxbEFBM2NZMUk5Q2RrU0NuZ1BTTU8zSnlnIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDRzNFSTVSeFlwRDBuYjdzR3hVdTBUWlBVTC02akJNdnFQNFZpd2p0TmF4dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQnB1UWQ0S1JwR0J0cC1Xb01oaGZGQnRpakptSDZhWklQaFI2a3oyRjFMamcifX0', + privateKey : [ + { + crv : 'Ed25519', + d : 'mXkHN5G6TRMBTVruPZ7iPbpyrq5-_wodVwxDKEVetCM', + kty : 'OKP', + x : '8McXgC7nrv67E6AHoR7iCr5ZcLQviyhz83cfJnX-V90', + kid : 'Igl0PMBjomX5rxtByBYt8xejQl_WBKBivZjOrvxcTP0', + alg : 'EdDSA', + }, + { + kty : 'EC', + crv : 'secp256k1', + d : 'HLFBI4JwQc8-kLP-3Yr5lsPz39XaGanOFi81MmixAXw', + x : 'KOYd64chpTdG4lKYs2eMv-VB3ga6oQKrq_aaYtkeXfU', + y : 'Cv7p_ByBHzkdIckh-pE1H6jp1MVbCPOF0-VAesdcwvc', + kid : 'oGSKZz-GYanB188JyOqr8vg1SGHw4GVpAUjdlcJvboQ', + alg : 'ES256K', + } + ], + didResolutionResult: { + didDocument: { + id : 'did:ion:EiBya40LM6p4aaMyp2NtImm3yvtUOSXmmHNgcCt6JudUHQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJJZ2wwUE1Cam9tWDVyeHRCeUJZdDh4ZWpRbF9XQktCaXZaak9ydnhjVFAwIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiOE1jWGdDN25ydjY3RTZBSG9SN2lDcjVaY0xRdml5aHo4M2NmSm5YLVY5MCJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifSx7ImlkIjoib0dTS1p6LUdZYW5CMTg4SnlPcXI4dmcxU0dIdzRHVnBBVWpkbGNKdmJvUSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiJLT1lkNjRjaHBUZEc0bEtZczJlTXYtVkIzZ2E2b1FLcnFfYWFZdGtlWGZVIiwieSI6IkN2N3BfQnlCSHprZElja2gtcEUxSDZqcDFNVmJDUE9GMC1WQWVzZGN3dmMifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iLCJhc3NlcnRpb25NZXRob2QiXSwidHlwZSI6Ikpzb25XZWJLZXkyMDIwIn1dLCJzZXJ2aWNlcyI6W119fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUR2VjUtYjhDMEQ4NEZxMzh2M2ZxbEFBM2NZMUk5Q2RrU0NuZ1BTTU8zSnlnIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDRzNFSTVSeFlwRDBuYjdzR3hVdTBUWlBVTC02akJNdnFQNFZpd2p0TmF4dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQnB1UWQ0S1JwR0J0cC1Xb01oaGZGQnRpakptSDZhWklQaFI2a3oyRjFMamcifX0', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiBya40LM6p4aaMyp2NtImm3yvtUOSXmmHNgcCt6JudUHQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJJZ2wwUE1Cam9tWDVyeHRCeUJZdDh4ZWpRbF9XQktCaXZaak9ydnhjVFAwIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiOE1jWGdDN25ydjY3RTZBSG9SN2lDcjVaY0xRdml5aHo4M2NmSm5YLVY5MCJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifSx7ImlkIjoib0dTS1p6LUdZYW5CMTg4SnlPcXI4dmcxU0dIdzRHVnBBVWpkbGNKdmJvUSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiJLT1lkNjRjaHBUZEc0bEtZczJlTXYtVkIzZ2E2b1FLcnFfYWFZdGtlWGZVIiwieSI6IkN2N3BfQnlCSHprZElja2gtcEUxSDZqcDFNVmJDUE9GMC1WQWVzZGN3dmMifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iLCJhc3NlcnRpb25NZXRob2QiXSwidHlwZSI6Ikpzb25XZWJLZXkyMDIwIn1dLCJzZXJ2aWNlcyI6W119fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUR2VjUtYjhDMEQ4NEZxMzh2M2ZxbEFBM2NZMUk5Q2RrU0NuZ1BTTU8zSnlnIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDRzNFSTVSeFlwRDBuYjdzR3hVdTBUWlBVTC02akJNdnFQNFZpd2p0TmF4dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQnB1UWQ0S1JwR0J0cC1Xb01oaGZGQnRpakptSDZhWklQaFI2a3oyRjFMamcifX0', + }, + ], + service: [ + ], + verificationMethod: [ + { + id : '#Igl0PMBjomX5rxtByBYt8xejQl_WBKBivZjOrvxcTP0', + controller : 'did:ion:EiBya40LM6p4aaMyp2NtImm3yvtUOSXmmHNgcCt6JudUHQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJJZ2wwUE1Cam9tWDVyeHRCeUJZdDh4ZWpRbF9XQktCaXZaak9ydnhjVFAwIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiOE1jWGdDN25ydjY3RTZBSG9SN2lDcjVaY0xRdml5aHo4M2NmSm5YLVY5MCJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifSx7ImlkIjoib0dTS1p6LUdZYW5CMTg4SnlPcXI4dmcxU0dIdzRHVnBBVWpkbGNKdmJvUSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiJLT1lkNjRjaHBUZEc0bEtZczJlTXYtVkIzZ2E2b1FLcnFfYWFZdGtlWGZVIiwieSI6IkN2N3BfQnlCSHprZElja2gtcEUxSDZqcDFNVmJDUE9GMC1WQWVzZGN3dmMifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iLCJhc3NlcnRpb25NZXRob2QiXSwidHlwZSI6Ikpzb25XZWJLZXkyMDIwIn1dLCJzZXJ2aWNlcyI6W119fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUR2VjUtYjhDMEQ4NEZxMzh2M2ZxbEFBM2NZMUk5Q2RrU0NuZ1BTTU8zSnlnIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDRzNFSTVSeFlwRDBuYjdzR3hVdTBUWlBVTC02akJNdnFQNFZpd2p0TmF4dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQnB1UWQ0S1JwR0J0cC1Xb01oaGZGQnRpakptSDZhWklQaFI2a3oyRjFMamcifX0', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : '8McXgC7nrv67E6AHoR7iCr5ZcLQviyhz83cfJnX-V90', + }, + }, + { + id : '#oGSKZz-GYanB188JyOqr8vg1SGHw4GVpAUjdlcJvboQ', + controller : 'did:ion:EiBya40LM6p4aaMyp2NtImm3yvtUOSXmmHNgcCt6JudUHQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJJZ2wwUE1Cam9tWDVyeHRCeUJZdDh4ZWpRbF9XQktCaXZaak9ydnhjVFAwIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiOE1jWGdDN25ydjY3RTZBSG9SN2lDcjVaY0xRdml5aHo4M2NmSm5YLVY5MCJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifSx7ImlkIjoib0dTS1p6LUdZYW5CMTg4SnlPcXI4dmcxU0dIdzRHVnBBVWpkbGNKdmJvUSIsInB1YmxpY0tleUp3ayI6eyJjcnYiOiJzZWNwMjU2azEiLCJrdHkiOiJFQyIsIngiOiJLT1lkNjRjaHBUZEc0bEtZczJlTXYtVkIzZ2E2b1FLcnFfYWFZdGtlWGZVIiwieSI6IkN2N3BfQnlCSHprZElja2gtcEUxSDZqcDFNVmJDUE9GMC1WQWVzZGN3dmMifSwicHVycG9zZXMiOlsiYXV0aGVudGljYXRpb24iLCJhc3NlcnRpb25NZXRob2QiXSwidHlwZSI6Ikpzb25XZWJLZXkyMDIwIn1dLCJzZXJ2aWNlcyI6W119fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaUR2VjUtYjhDMEQ4NEZxMzh2M2ZxbEFBM2NZMUk5Q2RrU0NuZ1BTTU8zSnlnIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDRzNFSTVSeFlwRDBuYjdzR3hVdTBUWlBVTC02akJNdnFQNFZpd2p0TmF4dyIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQnB1UWQ0S1JwR0J0cC1Xb01oaGZGQnRpakptSDZhWklQaFI2a3oyRjFMamcifX0', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'secp256k1', + kty : 'EC', + x : 'KOYd64chpTdG4lKYs2eMv-VB3ga6oQKrq_aaYtkeXfU', + y : 'Cv7p_ByBHzkdIckh-pE1H6jp1MVbCPOF0-VAesdcwvc', + }, + }, + ], + authentication: [ + '#Igl0PMBjomX5rxtByBYt8xejQl_WBKBivZjOrvxcTP0', + '#oGSKZz-GYanB188JyOqr8vg1SGHw4GVpAUjdlcJvboQ', + ], + assertionMethod: [ + '#Igl0PMBjomX5rxtByBYt8xejQl_WBKBivZjOrvxcTP0', + '#oGSKZz-GYanB188JyOqr8vg1SGHw4GVpAUjdlcJvboQ', + ], + }, + didDocumentMetadata: { + method: { + published : false, + recoveryCommitment : 'EiBpuQd4KRpGBtp-WoMhhfFBtijJmH6aZIPhR6kz2F1Ljg', + updateCommitment : 'EiDvV5-b8C0D84Fq38v3fqlAA3cY1I9CdkSCngPSMO3Jyg', + }, + equivalentId: [ + 'did:ion:EiBya40LM6p4aaMyp2NtImm3yvtUOSXmmHNgcCt6JudUHQ', + ], + }, + didResolutionMetadata: {} + } + }, + + oneMethodOneService: { + didUri : 'did:ion:EiDO7yuqY5ChgRW1BnsNlPlwcu2KQp_ZlroqbICLujPi7w:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJOTEJYZTdQbUloREVuamdWTHllamp2UTRrNmxHNzlIa0xtRS16N0xRcWZBIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaHBlYkRpYk82dDRUOVBybEZGU0NMUFQyYlhwMFRTY1VobzFvRk81bGRGcyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlDQ3cxcVYwYVk1Y2oydzNyQlhCWWVzOFRPN21aUHl3VzJZTXFTdHM3ZEVOdyJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQzhfN3VIcXpra2FBSVBlaDBLLURTVnVaOGd6dWVPNVB6WEpyM2R0VlBVSFEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUJWTDFxX0xlaXJfekFGV0l0M2pCRlhOSG5DU2hPU0Z6Z21xb0dzS2hjQkFnIn19', + privateKey : [ + { + crv : 'Ed25519', + d : 'cllAz3W1a3MnCFR3anZt6cZygIcRTHmSO2SJyKJzmQM', + kty : 'OKP', + x : 'hpebDibO6t4T9PrlFFSCLPT2bXp0TScUho1oFO5ldFs', + kid : 'NLBXe7PmIhDEnjgVLyejjvQ4k6lG79HkLmE-z7LQqfA', + alg : 'EdDSA', + } + ], + didResolutionResult: { + didDocument: { + id : 'did:ion:EiDO7yuqY5ChgRW1BnsNlPlwcu2KQp_ZlroqbICLujPi7w:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJOTEJYZTdQbUloREVuamdWTHllamp2UTRrNmxHNzlIa0xtRS16N0xRcWZBIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaHBlYkRpYk82dDRUOVBybEZGU0NMUFQyYlhwMFRTY1VobzFvRk81bGRGcyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlDQ3cxcVYwYVk1Y2oydzNyQlhCWWVzOFRPN21aUHl3VzJZTXFTdHM3ZEVOdyJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQzhfN3VIcXpra2FBSVBlaDBLLURTVnVaOGd6dWVPNVB6WEpyM2R0VlBVSFEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUJWTDFxX0xlaXJfekFGV0l0M2pCRlhOSG5DU2hPU0Z6Z21xb0dzS2hjQkFnIn19', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiDO7yuqY5ChgRW1BnsNlPlwcu2KQp_ZlroqbICLujPi7w:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJOTEJYZTdQbUloREVuamdWTHllamp2UTRrNmxHNzlIa0xtRS16N0xRcWZBIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaHBlYkRpYk82dDRUOVBybEZGU0NMUFQyYlhwMFRTY1VobzFvRk81bGRGcyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlDQ3cxcVYwYVk1Y2oydzNyQlhCWWVzOFRPN21aUHl3VzJZTXFTdHM3ZEVOdyJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQzhfN3VIcXpra2FBSVBlaDBLLURTVnVaOGd6dWVPNVB6WEpyM2R0VlBVSFEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUJWTDFxX0xlaXJfekFGV0l0M2pCRlhOSG5DU2hPU0Z6Z21xb0dzS2hjQkFnIn19', + }, + ], + service: [ + { + id : '#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + }, + ], + verificationMethod: [ + { + id : '#NLBXe7PmIhDEnjgVLyejjvQ4k6lG79HkLmE-z7LQqfA', + controller : 'did:ion:EiDO7yuqY5ChgRW1BnsNlPlwcu2KQp_ZlroqbICLujPi7w:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJOTEJYZTdQbUloREVuamdWTHllamp2UTRrNmxHNzlIa0xtRS16N0xRcWZBIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaHBlYkRpYk82dDRUOVBybEZGU0NMUFQyYlhwMFRTY1VobzFvRk81bGRGcyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlDQ3cxcVYwYVk1Y2oydzNyQlhCWWVzOFRPN21aUHl3VzJZTXFTdHM3ZEVOdyJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQzhfN3VIcXpra2FBSVBlaDBLLURTVnVaOGd6dWVPNVB6WEpyM2R0VlBVSFEiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUJWTDFxX0xlaXJfekFGV0l0M2pCRlhOSG5DU2hPU0Z6Z21xb0dzS2hjQkFnIn19', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'hpebDibO6t4T9PrlFFSCLPT2bXp0TScUho1oFO5ldFs', + }, + }, + ], + authentication: [ + '#NLBXe7PmIhDEnjgVLyejjvQ4k6lG79HkLmE-z7LQqfA', + ], + assertionMethod: [ + '#NLBXe7PmIhDEnjgVLyejjvQ4k6lG79HkLmE-z7LQqfA', + ], + }, + didDocumentMetadata: { + method: { + published : false, + recoveryCommitment : 'EiBVL1q_Leir_zAFWIt3jBFXNHnCShOSFzgmqoGsKhcBAg', + updateCommitment : 'EiCCw1qV0aY5cj2w3rBXBYes8TO7mZPywW2YMqSts7dENw', + }, + equivalentId: [ + 'did:ion:EiDO7yuqY5ChgRW1BnsNlPlwcu2KQp_ZlroqbICLujPi7w', + ], + }, + didResolutionMetadata: {} + } + }, + + oneMethodTwoServices: { + didUri : 'did:ion:EiCBB3nlRtUcqBY8-vm3WLP12elafIJIbXeVh6CBjeAV8Q:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJoZENsb0lmQWM5TWpDYlhQTVF3RThOajREQzBPWDlqQUNuLVNsa2hldzU4IiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiZjN5SUxDNmd0dHRlTDAyZG5rVTBoT0FNbHV5V0dnRjJKcFpfUUV6bmM5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn0seyJpZCI6Im9pZDR2Y2kiLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsInR5cGUiOiJPSUQ0VkNJIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCLS1HU0I1TXVFWUFPVE5MZHZoVFpTbkE0SVc2NHZOc2VlS09PUmd6TU1OUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQXVuN3F1QUF0d3lCQWJXNk54SG5rbTZhXzJWNDhfMGRnTW9fMWpvSmRzT0EiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUFjWGlFTi0tVGdzWVdwaWt0NjFmeHNlVzZpTHVMOFp4d2RmYjRNVzNES2RBIn19', + privateKey : [ + { + crv : 'Ed25519', + d : 'ADvv3DFjfZsezjo5W20UxUWUzVmUAwTI7HZg96l4rrY', + kty : 'OKP', + x : 'f3yILC6gttteL02dnkU0hOAMluyWGgF2JpZ_QEznc9A', + kid : 'hdCloIfAc9MjCbXPMQwE8Nj4DC0OX9jACn-Slkhew58', + alg : 'EdDSA', + } + ], + didResolutionResult: { + didDocument: { + id : 'did:ion:EiCBB3nlRtUcqBY8-vm3WLP12elafIJIbXeVh6CBjeAV8Q:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJoZENsb0lmQWM5TWpDYlhQTVF3RThOajREQzBPWDlqQUNuLVNsa2hldzU4IiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiZjN5SUxDNmd0dHRlTDAyZG5rVTBoT0FNbHV5V0dnRjJKcFpfUUV6bmM5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn0seyJpZCI6Im9pZDR2Y2kiLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsInR5cGUiOiJPSUQ0VkNJIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCLS1HU0I1TXVFWUFPVE5MZHZoVFpTbkE0SVc2NHZOc2VlS09PUmd6TU1OUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQXVuN3F1QUF0d3lCQWJXNk54SG5rbTZhXzJWNDhfMGRnTW9fMWpvSmRzT0EiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUFjWGlFTi0tVGdzWVdwaWt0NjFmeHNlVzZpTHVMOFp4d2RmYjRNVzNES2RBIn19', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiCBB3nlRtUcqBY8-vm3WLP12elafIJIbXeVh6CBjeAV8Q:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJoZENsb0lmQWM5TWpDYlhQTVF3RThOajREQzBPWDlqQUNuLVNsa2hldzU4IiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiZjN5SUxDNmd0dHRlTDAyZG5rVTBoT0FNbHV5V0dnRjJKcFpfUUV6bmM5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn0seyJpZCI6Im9pZDR2Y2kiLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsInR5cGUiOiJPSUQ0VkNJIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCLS1HU0I1TXVFWUFPVE5MZHZoVFpTbkE0SVc2NHZOc2VlS09PUmd6TU1OUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQXVuN3F1QUF0d3lCQWJXNk54SG5rbTZhXzJWNDhfMGRnTW9fMWpvSmRzT0EiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUFjWGlFTi0tVGdzWVdwaWt0NjFmeHNlVzZpTHVMOFp4d2RmYjRNVzNES2RBIn19', + }, + ], + service: [ + { + id : '#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + }, + { + id : '#oid4vci', + type : 'OID4VCI', + serviceEndpoint : 'https://issuer.example.com', + }, + ], + verificationMethod: [ + { + id : '#hdCloIfAc9MjCbXPMQwE8Nj4DC0OX9jACn-Slkhew58', + controller : 'did:ion:EiCBB3nlRtUcqBY8-vm3WLP12elafIJIbXeVh6CBjeAV8Q:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJoZENsb0lmQWM5TWpDYlhQTVF3RThOajREQzBPWDlqQUNuLVNsa2hldzU4IiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiZjN5SUxDNmd0dHRlTDAyZG5rVTBoT0FNbHV5V0dnRjJKcFpfUUV6bmM5QSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vZHduIiwidHlwZSI6IkRlY2VudHJhbGl6ZWRXZWJOb2RlIn0seyJpZCI6Im9pZDR2Y2kiLCJzZXJ2aWNlRW5kcG9pbnQiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsInR5cGUiOiJPSUQ0VkNJIn1dfX1dLCJ1cGRhdGVDb21taXRtZW50IjoiRWlCLS1HU0I1TXVFWUFPVE5MZHZoVFpTbkE0SVc2NHZOc2VlS09PUmd6TU1OUSJ9LCJzdWZmaXhEYXRhIjp7ImRlbHRhSGFzaCI6IkVpQXVuN3F1QUF0d3lCQWJXNk54SG5rbTZhXzJWNDhfMGRnTW9fMWpvSmRzT0EiLCJyZWNvdmVyeUNvbW1pdG1lbnQiOiJFaUFjWGlFTi0tVGdzWVdwaWt0NjFmeHNlVzZpTHVMOFp4d2RmYjRNVzNES2RBIn19', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'f3yILC6gttteL02dnkU0hOAMluyWGgF2JpZ_QEznc9A', + }, + }, + ], + authentication: [ + '#hdCloIfAc9MjCbXPMQwE8Nj4DC0OX9jACn-Slkhew58', + ], + assertionMethod: [ + '#hdCloIfAc9MjCbXPMQwE8Nj4DC0OX9jACn-Slkhew58', + ], + }, + didDocumentMetadata: { + method: { + published : false, + recoveryCommitment : 'EiAcXiEN--TgsYWpikt61fxseW6iLuL8Zxwdfb4MW3DKdA', + updateCommitment : 'EiB--GSB5MuEYAOTNLdvhTZSnA4IW64vNseeKOORgzMMNQ', + }, + equivalentId: [ + 'did:ion:EiCBB3nlRtUcqBY8-vm3WLP12elafIJIbXeVh6CBjeAV8Q', + ], + }, + didResolutionMetadata: {} + } + }, + + oneMethodCustomId: { + didUri : 'did:ion:EiDZjHxyHf-0llvciVAXm7BtYUIImm8WsDP2Wbfp737PvA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiIxIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaVV6SE8wMXlkYVk0Rmt5bjlmcDNYNWQ5cDR5TGtKaHJEcGpOU0VrcEVUZyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRGhoZDdCUkd3UmRReU05d1FOQlBHNVVtS3FGMmRaZFFaS3V6ekRtMFlSUmcifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUF3QUVNcTJGXzlIUDMwbkp6Rmp0V1NQMC10RlVwMHcxYzh4SG9NR2ZIY1JRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlERWJJQ1N6QU92ZWF1SVhMY1JpNURqbFpIRlhEaXQzRWNrT3FadWZRMUFTUSJ9fQ', + privateKey : [ + { + crv : 'Ed25519', + d : 'X0JFysSWp4eFAv9fk4ah8qVg3ClFNSiCy_Mdawz9ibo', + kty : 'OKP', + x : 'iUzHO01ydaY4Fkyn9fp3X5d9p4yLkJhrDpjNSEkpETg', + kid : 'HtE0w2iPtJOf4X3tOMci6FxidN5gsUDId_gIQ7X3iWU', + alg : 'EdDSA', + } + ], + didResolutionResult: { + didDocument: { + id : 'did:ion:EiDZjHxyHf-0llvciVAXm7BtYUIImm8WsDP2Wbfp737PvA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiIxIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaVV6SE8wMXlkYVk0Rmt5bjlmcDNYNWQ5cDR5TGtKaHJEcGpOU0VrcEVUZyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRGhoZDdCUkd3UmRReU05d1FOQlBHNVVtS3FGMmRaZFFaS3V6ekRtMFlSUmcifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUF3QUVNcTJGXzlIUDMwbkp6Rmp0V1NQMC10RlVwMHcxYzh4SG9NR2ZIY1JRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlERWJJQ1N6QU92ZWF1SVhMY1JpNURqbFpIRlhEaXQzRWNrT3FadWZRMUFTUSJ9fQ', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiDZjHxyHf-0llvciVAXm7BtYUIImm8WsDP2Wbfp737PvA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiIxIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaVV6SE8wMXlkYVk0Rmt5bjlmcDNYNWQ5cDR5TGtKaHJEcGpOU0VrcEVUZyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRGhoZDdCUkd3UmRReU05d1FOQlBHNVVtS3FGMmRaZFFaS3V6ekRtMFlSUmcifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUF3QUVNcTJGXzlIUDMwbkp6Rmp0V1NQMC10RlVwMHcxYzh4SG9NR2ZIY1JRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlERWJJQ1N6QU92ZWF1SVhMY1JpNURqbFpIRlhEaXQzRWNrT3FadWZRMUFTUSJ9fQ', + }, + ], + service: [ + ], + verificationMethod: [ + { + id : '#1', + controller : 'did:ion:EiDZjHxyHf-0llvciVAXm7BtYUIImm8WsDP2Wbfp737PvA:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiIxIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaVV6SE8wMXlkYVk0Rmt5bjlmcDNYNWQ5cDR5TGtKaHJEcGpOU0VrcEVUZyJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpRGhoZDdCUkd3UmRReU05d1FOQlBHNVVtS3FGMmRaZFFaS3V6ekRtMFlSUmcifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUF3QUVNcTJGXzlIUDMwbkp6Rmp0V1NQMC10RlVwMHcxYzh4SG9NR2ZIY1JRIiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlERWJJQ1N6QU92ZWF1SVhMY1JpNURqbFpIRlhEaXQzRWNrT3FadWZRMUFTUSJ9fQ', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'iUzHO01ydaY4Fkyn9fp3X5d9p4yLkJhrDpjNSEkpETg', + }, + }, + ], + authentication: [ + '#1', + ], + assertionMethod: [ + '#1', + ], + }, + didDocumentMetadata: { + method: { + published : false, + recoveryCommitment : 'EiDEbICSzAOveauIXLcRi5DjlZHFXDit3EckOqZufQ1ASQ', + updateCommitment : 'EiDhhd7BRGwRdQyM9wQNBPG5UmKqF2dZdQZKuzzDm0YRRg', + }, + equivalentId: [ + 'did:ion:EiDZjHxyHf-0llvciVAXm7BtYUIImm8WsDP2Wbfp737PvA', + ], + }, + didResolutionMetadata: {} + } + }, + + dwnService: { + didUri : 'did:ion:EiB9tsHcL4lXyGIZ71yZFoYl7FOUYpfUU0OHu0Auf2-AXg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWciLCJwdWJsaWNLZXlKd2siOnsiY3J2IjoiRWQyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJyOXVGMjRDYVZyZjhtLS1odkRsejEzX1otTWU1Q3VMaVNOUzE5bUM2SnVNIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJKc29uV2ViS2V5MjAyMCJ9LHsiaWQiOiJlbmMiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiRGtBWlB4OEJUTzFjNHQ4ZHQzN0Y1VldWdTNxd19tTnNReVVMaEo0a056dyIsInkiOiJUMm9INFhJRk53SmR3UmlDRURSX1VIckxRX3AxY3FHRzBHbnpoLVNONjJ3In0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6eyJlbmNyeXB0aW9uS2V5cyI6WyIjZW5jIl0sIm5vZGVzIjpbImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMCIsImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMSJdLCJzaWduaW5nS2V5cyI6WyIjc2lnIl19LCJ0eXBlIjoiRGVjZW50cmFsaXplZFdlYk5vZGUifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaURHdVJGOUVJS1RLWFEzeUk5T3h4UVBZZXBwVElwMUdLaFNwdDhsT0YzcW1BIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDb3F3TDF1NFRCM1RUQ09vb0lySnlJbGw0ZkNTcUFGZlBnWUM2NmlwSUVfUSIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ3MtaE5oajVxc3pWNVFPUXVuYkk2azdvTkdUZ0c1b2ZpTGcxR0RYb3p3VXcifX0', + privateKey : [ + { + crv : 'Ed25519', + d : 'ViSHL7fNc4IbltHb3wCGkxmXCL9DzVV9WL0NLvlMcAo', + kty : 'OKP', + x : 'r9uF24CaVrf8m--hvDlz13_Z-Me5CuLiSNS19mC6JuM', + kid : 'PRbAT8qKgVnVEaqqy5XOON5iu7EZIdKOBW1aG62J9GE', + alg : 'EdDSA', + }, + { + kty : 'EC', + crv : 'secp256k1', + d : 'VkaWP07BcUfcTKiK47l1WBYEq5QzakPcD4d1KCqWi_U', + x : 'DkAZPx8BTO1c4t8dt37F5VWVu3qw_mNsQyULhJ4kNzw', + y : 'T2oH4XIFNwJdwRiCEDR_UHrLQ_p1cqGG0Gnzh-SN62w', + kid : 'q514UkY8uFn9BeYykg2YyDMzewX2SQ1Gkqu-ceVpYOM', + alg : 'ES256K', + } + ], + didResolutionResult: { + didDocument: { + id : 'did:ion:EiB9tsHcL4lXyGIZ71yZFoYl7FOUYpfUU0OHu0Auf2-AXg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWciLCJwdWJsaWNLZXlKd2siOnsiY3J2IjoiRWQyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJyOXVGMjRDYVZyZjhtLS1odkRsejEzX1otTWU1Q3VMaVNOUzE5bUM2SnVNIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJKc29uV2ViS2V5MjAyMCJ9LHsiaWQiOiJlbmMiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiRGtBWlB4OEJUTzFjNHQ4ZHQzN0Y1VldWdTNxd19tTnNReVVMaEo0a056dyIsInkiOiJUMm9INFhJRk53SmR3UmlDRURSX1VIckxRX3AxY3FHRzBHbnpoLVNONjJ3In0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6eyJlbmNyeXB0aW9uS2V5cyI6WyIjZW5jIl0sIm5vZGVzIjpbImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMCIsImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMSJdLCJzaWduaW5nS2V5cyI6WyIjc2lnIl19LCJ0eXBlIjoiRGVjZW50cmFsaXplZFdlYk5vZGUifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaURHdVJGOUVJS1RLWFEzeUk5T3h4UVBZZXBwVElwMUdLaFNwdDhsT0YzcW1BIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDb3F3TDF1NFRCM1RUQ09vb0lySnlJbGw0ZkNTcUFGZlBnWUM2NmlwSUVfUSIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ3MtaE5oajVxc3pWNVFPUXVuYkk2azdvTkdUZ0c1b2ZpTGcxR0RYb3p3VXcifX0', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiB9tsHcL4lXyGIZ71yZFoYl7FOUYpfUU0OHu0Auf2-AXg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWciLCJwdWJsaWNLZXlKd2siOnsiY3J2IjoiRWQyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJyOXVGMjRDYVZyZjhtLS1odkRsejEzX1otTWU1Q3VMaVNOUzE5bUM2SnVNIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJKc29uV2ViS2V5MjAyMCJ9LHsiaWQiOiJlbmMiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiRGtBWlB4OEJUTzFjNHQ4ZHQzN0Y1VldWdTNxd19tTnNReVVMaEo0a056dyIsInkiOiJUMm9INFhJRk53SmR3UmlDRURSX1VIckxRX3AxY3FHRzBHbnpoLVNONjJ3In0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6eyJlbmNyeXB0aW9uS2V5cyI6WyIjZW5jIl0sIm5vZGVzIjpbImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMCIsImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMSJdLCJzaWduaW5nS2V5cyI6WyIjc2lnIl19LCJ0eXBlIjoiRGVjZW50cmFsaXplZFdlYk5vZGUifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaURHdVJGOUVJS1RLWFEzeUk5T3h4UVBZZXBwVElwMUdLaFNwdDhsT0YzcW1BIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDb3F3TDF1NFRCM1RUQ09vb0lySnlJbGw0ZkNTcUFGZlBnWUM2NmlwSUVfUSIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ3MtaE5oajVxc3pWNVFPUXVuYkk2azdvTkdUZ0c1b2ZpTGcxR0RYb3p3VXcifX0', + }, + ], + service: [ + { + id : '#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : { + encryptionKeys: [ + '#enc', + ], + nodes: [ + 'https://example.com/dwn0', + 'https://example.com/dwn1', + ], + signingKeys: [ + '#sig', + ], + }, + }, + ], + verificationMethod: [ + { + id : '#sig', + controller : 'did:ion:EiB9tsHcL4lXyGIZ71yZFoYl7FOUYpfUU0OHu0Auf2-AXg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWciLCJwdWJsaWNLZXlKd2siOnsiY3J2IjoiRWQyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJyOXVGMjRDYVZyZjhtLS1odkRsejEzX1otTWU1Q3VMaVNOUzE5bUM2SnVNIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJKc29uV2ViS2V5MjAyMCJ9LHsiaWQiOiJlbmMiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiRGtBWlB4OEJUTzFjNHQ4ZHQzN0Y1VldWdTNxd19tTnNReVVMaEo0a056dyIsInkiOiJUMm9INFhJRk53SmR3UmlDRURSX1VIckxRX3AxY3FHRzBHbnpoLVNONjJ3In0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6eyJlbmNyeXB0aW9uS2V5cyI6WyIjZW5jIl0sIm5vZGVzIjpbImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMCIsImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMSJdLCJzaWduaW5nS2V5cyI6WyIjc2lnIl19LCJ0eXBlIjoiRGVjZW50cmFsaXplZFdlYk5vZGUifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaURHdVJGOUVJS1RLWFEzeUk5T3h4UVBZZXBwVElwMUdLaFNwdDhsT0YzcW1BIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDb3F3TDF1NFRCM1RUQ09vb0lySnlJbGw0ZkNTcUFGZlBnWUM2NmlwSUVfUSIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ3MtaE5oajVxc3pWNVFPUXVuYkk2azdvTkdUZ0c1b2ZpTGcxR0RYb3p3VXcifX0', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'r9uF24CaVrf8m--hvDlz13_Z-Me5CuLiSNS19mC6JuM', + }, + }, + { + id : '#enc', + controller : 'did:ion:EiB9tsHcL4lXyGIZ71yZFoYl7FOUYpfUU0OHu0Auf2-AXg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWciLCJwdWJsaWNLZXlKd2siOnsiY3J2IjoiRWQyNTUxOSIsImt0eSI6Ik9LUCIsIngiOiJyOXVGMjRDYVZyZjhtLS1odkRsejEzX1otTWU1Q3VMaVNOUzE5bUM2SnVNIn0sInB1cnBvc2VzIjpbImF1dGhlbnRpY2F0aW9uIiwiYXNzZXJ0aW9uTWV0aG9kIl0sInR5cGUiOiJKc29uV2ViS2V5MjAyMCJ9LHsiaWQiOiJlbmMiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiRGtBWlB4OEJUTzFjNHQ4ZHQzN0Y1VldWdTNxd19tTnNReVVMaEo0a056dyIsInkiOiJUMm9INFhJRk53SmR3UmlDRURSX1VIckxRX3AxY3FHRzBHbnpoLVNONjJ3In0sInB1cnBvc2VzIjpbImtleUFncmVlbWVudCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbeyJpZCI6ImR3biIsInNlcnZpY2VFbmRwb2ludCI6eyJlbmNyeXB0aW9uS2V5cyI6WyIjZW5jIl0sIm5vZGVzIjpbImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMCIsImh0dHBzOi8vZXhhbXBsZS5jb20vZHduMSJdLCJzaWduaW5nS2V5cyI6WyIjc2lnIl19LCJ0eXBlIjoiRGVjZW50cmFsaXplZFdlYk5vZGUifV19fV0sInVwZGF0ZUNvbW1pdG1lbnQiOiJFaURHdVJGOUVJS1RLWFEzeUk5T3h4UVBZZXBwVElwMUdLaFNwdDhsT0YzcW1BIn0sInN1ZmZpeERhdGEiOnsiZGVsdGFIYXNoIjoiRWlDb3F3TDF1NFRCM1RUQ09vb0lySnlJbGw0ZkNTcUFGZlBnWUM2NmlwSUVfUSIsInJlY292ZXJ5Q29tbWl0bWVudCI6IkVpQ3MtaE5oajVxc3pWNVFPUXVuYkk2azdvTkdUZ0c1b2ZpTGcxR0RYb3p3VXcifX0', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'secp256k1', + kty : 'EC', + x : 'DkAZPx8BTO1c4t8dt37F5VWVu3qw_mNsQyULhJ4kNzw', + y : 'T2oH4XIFNwJdwRiCEDR_UHrLQ_p1cqGG0Gnzh-SN62w', + }, + }, + ], + authentication: [ + '#sig', + ], + assertionMethod: [ + '#sig', + ], + keyAgreement: [ + '#enc', + ], + }, + didDocumentMetadata: { + method: { + published : false, + recoveryCommitment : 'EiCs-hNhj5qszV5QOQunbI6k7oNGTgG5ofiLg1GDXozwUw', + updateCommitment : 'EiDGuRF9EIKTKXQ3yI9OxxQPYeppTIp1GKhSpt8lOF3qmA', + }, + equivalentId: [ + 'did:ion:EiB9tsHcL4lXyGIZ71yZFoYl7FOUYpfUU0OHu0Auf2-AXg', + ], + }, + didResolutionMetadata: {} + } + }, +}; \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/did-ion/resolve.ts b/packages/dids/tests/fixtures/test-vectors/did-ion/resolve.ts new file mode 100644 index 000000000..cf087d303 --- /dev/null +++ b/packages/dids/tests/fixtures/test-vectors/did-ion/resolve.ts @@ -0,0 +1,56 @@ +import type { Jwk } from '@web5/crypto'; + +import type { DidResolutionResult } from '../../../../src/types/did-core.js'; + +type TestVector = { + [key: string]: { + didUri: string; + privateKey: Jwk[]; + didResolutionResult: DidResolutionResult; + }; +}; + +export const vectors: TestVector = { + publishedDid: { + didUri : 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', + privateKey : [], + didResolutionResult : { + '@context' : 'https://w3id.org/did-resolution/v1', + didDocument : { + id : 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', + }, + ], + service: [ + ], + verificationMethod: [ + { + id : '#dwn-sig', + controller : 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'Sy0lk6pMXC10WyIh4g8sLz1loL8ImzLcqmFW2267IXc', + }, + }, + ], + authentication: [ + '#dwn-sig', + ], + }, + didDocumentMetadata: { + method: { + published : true, + recoveryCommitment : 'EiDzYFBF-EPcbt4sVdepmniqfg93wrh1dZTZY1ZI4m6enw', + updateCommitment : 'EiAp4ocUKXcYC3D-DaGiW2D01D3QVxqGegT1Fq42bDaPoQ', + }, + canonicalId: 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ', + }, + didResolutionMetadata: {} + } + }, +}; \ No newline at end of file diff --git a/packages/dids/tests/fixtures/test-vectors/did-ion/to-keys.ts b/packages/dids/tests/fixtures/test-vectors/did-ion/to-keys.ts new file mode 100644 index 000000000..ce4c46358 --- /dev/null +++ b/packages/dids/tests/fixtures/test-vectors/did-ion/to-keys.ts @@ -0,0 +1,81 @@ +import type { Jwk, LocalKeyManager } from '@web5/crypto'; + +import sinon from 'sinon'; + +import type { Did } from '../../../../src/methods/did-method.js'; + +type TestVector = { + [key: string]: { + did: Did; + privateKey: Jwk[]; + }; +}; + +export const vectors: TestVector = { + oneMethodNoServices: { + did: { + didDocument: { + id : 'did:ion:EiAXe1c857XIc7F3tvrxV_tsmn2zMqrgILwvrMkEgfuuSQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJyV3hhU2ZWWlVfZWJsWjAzRFk1RXo4TkxkRlA4c200cFVYenJNRjR2d0xVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4Ijoid0t6MUg3SnNqbmlhV0dka1I0akcxT19pWVlnWDFyV29TRVZSXy1sS1VZRSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpQ1IwcDk3UGZHYW9LMV9fdlV4ZlhLcW0xN29RY0RtSEM4dk1WeFFZWUhzTlEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNxSjlyMEtTUmVsUHFNTXE2Q0gwRm13SUtiWkVEUjhuWmVzNGllTW03X1J3IiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlELVUyRDh1bE1VUjVkSWduWkY3YnJCNUpvWkdlY29HS2FpNGNuQ1gzSnNlZyJ9fQ', + '@context' : [ + 'https://www.w3.org/ns/did/v1', + { + '@base': 'did:ion:EiAXe1c857XIc7F3tvrxV_tsmn2zMqrgILwvrMkEgfuuSQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJyV3hhU2ZWWlVfZWJsWjAzRFk1RXo4TkxkRlA4c200cFVYenJNRjR2d0xVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4Ijoid0t6MUg3SnNqbmlhV0dka1I0akcxT19pWVlnWDFyV29TRVZSXy1sS1VZRSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpQ1IwcDk3UGZHYW9LMV9fdlV4ZlhLcW0xN29RY0RtSEM4dk1WeFFZWUhzTlEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNxSjlyMEtTUmVsUHFNTXE2Q0gwRm13SUtiWkVEUjhuWmVzNGllTW03X1J3IiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlELVUyRDh1bE1VUjVkSWduWkY3YnJCNUpvWkdlY29HS2FpNGNuQ1gzSnNlZyJ9fQ', + }, + ], + service: [ + ], + verificationMethod: [ + { + id : '#rWxaSfVZU_eblZ03DY5Ez8NLdFP8sm4pUXzrMF4vwLU', + controller : 'did:ion:EiAXe1c857XIc7F3tvrxV_tsmn2zMqrgILwvrMkEgfuuSQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJyV3hhU2ZWWlVfZWJsWjAzRFk1RXo4TkxkRlA4c200cFVYenJNRjR2d0xVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4Ijoid0t6MUg3SnNqbmlhV0dka1I0akcxT19pWVlnWDFyV29TRVZSXy1sS1VZRSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpQ1IwcDk3UGZHYW9LMV9fdlV4ZlhLcW0xN29RY0RtSEM4dk1WeFFZWUhzTlEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNxSjlyMEtTUmVsUHFNTXE2Q0gwRm13SUtiWkVEUjhuWmVzNGllTW03X1J3IiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlELVUyRDh1bE1VUjVkSWduWkY3YnJCNUpvWkdlY29HS2FpNGNuQ1gzSnNlZyJ9fQ', + type : 'JsonWebKey2020', + publicKeyJwk : { + crv : 'Ed25519', + kty : 'OKP', + x : 'wKz1H7JsjniaWGdkR4jG1O_iYYgX1rWoSEVR_-lKUYE', + }, + }, + ], + authentication: [ + '#rWxaSfVZU_eblZ03DY5Ez8NLdFP8sm4pUXzrMF4vwLU', + ], + assertionMethod: [ + '#rWxaSfVZU_eblZ03DY5Ez8NLdFP8sm4pUXzrMF4vwLU', + ], + }, + getSigner : sinon.stub(), + keyManager : sinon.stub() as unknown as LocalKeyManager, + metadata : { + canonicalId : 'did:ion:EiAXe1c857XIc7F3tvrxV_tsmn2zMqrgILwvrMkEgfuuSQ', + recoveryKey : { + kty : 'EC', + crv : 'secp256k1', + x : 'EdmqCQJjJycUhxz52kCxLR7v1cIpWnbgVOVXDn73sMI', + y : 'a4kbkoG7t5yYYzUqSuSLv9gp8Rumw4wPmCDsQWaLKQQ', + kid : 'cv5f7CxO3H8FVqDuU5b48WP1Y8vfhkcmjOAOFhQDByU', + alg : 'ES256K', + }, + updateKey: { + kty : 'EC', + crv : 'secp256k1', + x : 'p1edwKgrvFZ4XxXcqM8j_ZStWZ0DuWzdhr8JUI42BmA', + y : 'KK_s4WG6vyDeJ4kMyDaAygU3G-Fiixi6Hf7cgFe-HcM', + kid : 'mKJbR4wHIJIeyUITRhddkPFqL-jbpGtSnu4MB6WrYzg', + alg : 'ES256K', + }, + published: true, + }, + uri: 'did:ion:EiAXe1c857XIc7F3tvrxV_tsmn2zMqrgILwvrMkEgfuuSQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJyV3hhU2ZWWlVfZWJsWjAzRFk1RXo4TkxkRlA4c200cFVYenJNRjR2d0xVIiwicHVibGljS2V5SndrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4Ijoid0t6MUg3SnNqbmlhV0dka1I0akcxT19pWVlnWDFyV29TRVZSXy1sS1VZRSJ9LCJwdXJwb3NlcyI6WyJhdXRoZW50aWNhdGlvbiIsImFzc2VydGlvbk1ldGhvZCJdLCJ0eXBlIjoiSnNvbldlYktleTIwMjAifV0sInNlcnZpY2VzIjpbXX19XSwidXBkYXRlQ29tbWl0bWVudCI6IkVpQ1IwcDk3UGZHYW9LMV9fdlV4ZlhLcW0xN29RY0RtSEM4dk1WeFFZWUhzTlEifSwic3VmZml4RGF0YSI6eyJkZWx0YUhhc2giOiJFaUNxSjlyMEtTUmVsUHFNTXE2Q0gwRm13SUtiWkVEUjhuWmVzNGllTW03X1J3IiwicmVjb3ZlcnlDb21taXRtZW50IjoiRWlELVUyRDh1bE1VUjVkSWduWkY3YnJCNUpvWkdlY29HS2FpNGNuQ1gzSnNlZyJ9fQ', + }, + privateKey: [ + { + crv : 'Ed25519', + d : 'tMxiGuJDL1dukJT8xfMwanLHv3ScDTVJH1jtS01Xm-g', + kty : 'OKP', + x : 'wKz1H7JsjniaWGdkR4jG1O_iYYgX1rWoSEVR_-lKUYE', + kid : 'rWxaSfVZU_eblZ03DY5Ez8NLdFP8sm4pUXzrMF4vwLU', + alg : 'EdDSA', + } + ], + }, +}; \ No newline at end of file diff --git a/packages/dids/tests/methods/did-dht.spec.ts b/packages/dids/tests/methods/did-dht.spec.ts index 3894a465a..8a5de82c4 100644 --- a/packages/dids/tests/methods/did-dht.spec.ts +++ b/packages/dids/tests/methods/did-dht.spec.ts @@ -305,14 +305,16 @@ describe('DidDht', () => { }); it('publishes DIDs, by default', async () => { - await DidDht.create(); + const did = await DidDht.create(); + expect(did.metadata).to.have.property('published', true); expect(fetchStub.calledOnce).to.be.true; }); - it('allows publishing of DIDs to optionally be disabled', async () => { - await DidDht.create({ options: { publish: false } }); + it('allows DID publishing to optionally be disabled', async () => { + const did = await DidDht.create({ options: { publish: false } }); + expect(did.metadata).to.have.property('published', false); expect(fetchStub.called).to.be.false; }); diff --git a/packages/dids/tests/methods/did-ion.spec.ts b/packages/dids/tests/methods/did-ion.spec.ts new file mode 100644 index 000000000..e1f73dc9b --- /dev/null +++ b/packages/dids/tests/methods/did-ion.spec.ts @@ -0,0 +1,641 @@ +import type { Jwk } from '@web5/crypto'; + +import sinon from 'sinon'; +import { expect } from 'chai'; +import { LocalKeyManager, computeJwkThumbprint } from '@web5/crypto'; + +import type { DidDocument } from '../../src/types/did-core.js'; + +import { DidIon } from '../../src/methods/did-ion.js'; +import { vectors as CreateTestVector } from '../fixtures/test-vectors/did-ion/create.js'; +import { vectors as ToKeysTestVector } from '../fixtures/test-vectors/did-ion/to-keys.js'; +import { vectors as ResolveTestVector } from '../fixtures/test-vectors/did-ion/resolve.js'; + +// Helper function to create a mocked fetch response that fails and returns a 404 Not Found. +const fetchNotFoundResponse = () => ({ + status : 404, + statusText : 'Not Found', + ok : false +}); + +// Helper function to create a mocked fetch response that is successful and returns the given +// response. +const fetchOkResponse = (response?: any) => ({ + status : 200, + statusText : 'OK', + ok : true, + json : async () => Promise.resolve(response) +}); + +const ION_OPERATIONS_ENDPOINT = 'https://ion.tbd.engineering/operations'; +const ION_RESOLUTION_ENDPOINT = 'https://ion.tbd.engineering/identifiers'; + +describe('DidIon', () => { + let fetchStub: sinon.SinonStub; + + beforeEach(() => { + // Setup stub so that a mocked response is returned rather than calling over the network. + fetchStub = sinon.stub(globalThis as any, 'fetch'); + }); + + afterEach(() => { + fetchStub.restore(); + }); + + describe('create', () => { + it('creates a DID with one verification method, by default', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodNoServices.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create(); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri'); + + expect(fetchStub.calledTwice).to.be.true; + + expect(did.didDocument).to.have.property('verificationMethod'); + expect(did.didDocument.verificationMethod).to.have.length(1); + expect(did.metadata).to.have.property('canonicalId'); + }); + + it('handles creating DIDs with multiple verification methods', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.twoMethodsNoServices.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + purposes : ['authentication', 'assertionMethod'] + }, + { + algorithm : 'secp256k1', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod).to.have.length(2); + expect(did.didDocument.verificationMethod?.[0].publicKeyJwk).to.have.property('crv', 'Ed25519'); + expect(did.didDocument.verificationMethod?.[1].publicKeyJwk).to.have.property('crv', 'secp256k1'); + }); + + it('uses the JWK thumbprint as the ID for verification methods, by default', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodNoServices.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create(); + + const expectedKeyId = await computeJwkThumbprint({ jwk: did.didDocument.verificationMethod![0]!.publicKeyJwk! }); + expect(did.didDocument.verificationMethod?.[0].id).to.include(expectedKeyId); + }); + + it('allows a custom ID to be specified for additional verification methods', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodCustomId.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + id : '1', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod?.[0]).to.have.property('id', '#1'); + }); + + it('retains only the ID fragment if verification method IDs contain a prefix before the hash symbol (#)', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodCustomId.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + id : 'someprefix#1', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect(did.didDocument.verificationMethod?.[0]).to.have.property('id', '#1'); + }); + + it('handles creating DIDs with one service', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodOneService.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + services: [ + { + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + } + ] + } + }); + + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `#dwn`); + expect(did.didDocument.service?.[0]).to.have.property('type', 'DecentralizedWebNode'); + expect(did.didDocument.service?.[0]).to.have.property('serviceEndpoint', 'https://example.com/dwn'); + }); + + it('handles creating DIDs with multiple services', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodTwoServices.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + services: [ + { + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + }, + { + id : 'oid4vci', + type : 'OID4VCI', + serviceEndpoint : 'https://issuer.example.com', + } + ] + } + }); + + expect(did.didDocument.service).to.have.length(2); + expect(did.didDocument.service?.[0]).to.have.property('id', `#dwn`); + expect(did.didDocument.service?.[1]).to.have.property('id', `#oid4vci`); + }); + + it('given service IDs are automatically prefixed with hash symbol (#) in DID document', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodOneService.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + services: [ + { + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + } + ] + } + }); + + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `#dwn`); + }); + + it('accepts service IDs that start with a hash symbol (#)', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodOneService.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + services: [ + { + id : '#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + } + ] + } + }); + + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `#dwn`); + }); + + it('retains only the ID fragment if service IDs contain a prefix before the hash symbol (#)', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodOneService.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + services: [ + { + id : 'someprefix#dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : 'https://example.com/dwn', + } + ] + } + }); + + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `#dwn`); + }); + + it('accepts custom properties for services', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.dwnService.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + id : 'sig', + purposes : ['authentication', 'assertionMethod'] + }, + { + algorithm : 'secp256k1', + id : 'enc', + purposes : ['keyAgreement'] + } + ], + services: [ + { + id : 'dwn', + type : 'DecentralizedWebNode', + serviceEndpoint : { + 'nodes' : ['https://example.com/dwn0', 'https://example.com/dwn1'], + 'signingKeys' : ['#sig'], + 'encryptionKeys' : ['#enc'] + } + } + ] + } + }); + + expect(did.didDocument.verificationMethod).to.have.length(2); + expect(did.didDocument.verificationMethod?.[0]).to.have.property('id', `#sig`); + expect(did.didDocument.verificationMethod?.[1]).to.have.property('id', `#enc`); + expect(did.didDocument.service).to.have.length(1); + expect(did.didDocument.service?.[0]).to.have.property('id', `#dwn`); + expect(did.didDocument.service?.[0]).to.have.property('type', 'DecentralizedWebNode'); + expect(did.didDocument.service?.[0]).to.have.property('serviceEndpoint'); + expect(did.didDocument.service?.[0]?.serviceEndpoint).to.have.property('nodes'); + expect(did.didDocument.service?.[0]?.serviceEndpoint).to.have.property('encryptionKeys'); + expect(did.didDocument.service?.[0]?.serviceEndpoint).to.have.property('signingKeys'); + }); + + it('publishes DIDs, by default', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodNoServices.didResolutionResult)); + } else if (url.startsWith(ION_OPERATIONS_ENDPOINT)) { + return Promise.resolve(fetchOkResponse()); + } + }); + + const did = await DidIon.create(); + + expect(fetchStub.calledTwice).to.be.true; + expect(did.metadata).to.have.property('published', true); + }); + + it('allows publishing of DIDs to optionally be disabled', async () => { + fetchStub.callsFake((url: string) => { + if (url.startsWith(ION_RESOLUTION_ENDPOINT)) { + return Promise.resolve(fetchOkResponse(CreateTestVector.oneMethodNoServices.didResolutionResult)); + } + }); + + const did = await DidIon.create({ options: { publish: false } }); + + expect(fetchStub.calledOnce).to.be.true; + expect(did.metadata).to.have.property('published', false); + }); + + it('throws an error if a verification method algorithm is not supported', async () => { + try { + await DidIon.create({ + options: { + verificationMethods: [ + { + algorithm : 'Ed25519', + purposes : ['authentication', 'assertionMethod'] + }, + { + // @ts-expect-error - Testing invalid algorithm. + algorithm : 'Ed448', + id : 'dwn-sig', + purposes : ['authentication', 'assertionMethod'] + } + ] + } + }); + + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('algorithms are not supported'); + } + }); + + it('throws an error if services are missing required properties', async () => { + try { + // @ts-expect-error - Testing service with missing 'id' property. + await DidIon.create({ options: { services: [{ type: 'b', serviceEndpoint: 'c' }] } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('services are missing required properties'); + } + + try { + // @ts-expect-error - Testing service with missing 'type' property. + await DidIon.create({ options: { services: [{ id: 'a', serviceEndpoint: 'c' }] } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('services are missing required properties'); + } + + try { + // @ts-expect-error - Testing service with missing 'serviceEndpoint' property. + await DidIon.create({ options: { services: [{ id: 'a', type: 'b' }] } }); + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.message).to.include('services are missing required properties'); + } + }); + }); + + describe('fromKeyManager()', () => { + let keyManager: LocalKeyManager; + + before(() => { + keyManager = new LocalKeyManager(); + }); + + it('returns a DID from existing keys present in a key manager', async () => { + // Stub the DID resolution method to return a DID document with no verification methods. + sinon.stub(DidIon, 'resolve').returns(Promise.resolve(CreateTestVector.oneMethodNoServices.didResolutionResult)); + + // Import the test DID's keys into the key manager. + await keyManager.importKey({ key: CreateTestVector.oneMethodNoServices.privateKey[0] }); + + const did = await DidIon.fromKeyManager({ didUri: CreateTestVector.oneMethodNoServices.didUri, keyManager }); + + expect(did).to.have.property('didDocument'); + expect(did).to.have.property('getSigner'); + expect(did).to.have.property('keyManager'); + expect(did).to.have.property('metadata'); + expect(did).to.have.property('uri', CreateTestVector.oneMethodNoServices.didUri); + + sinon.restore(); + }); + }); + + describe('getSigningMethod()', () => { + it('returns the first authentication verification method', async function () { + const verificationMethod = await DidIon.getSigningMethod({ + didDocument: { + id : 'did:ion:123', + verificationMethod : [ + { + id : 'did:ion:123#0', + type : 'JsonWebKey2020', + controller : 'did:ion:123', + publicKeyJwk : {} as Jwk + } + ], + authentication: ['did:ion:123#0'] + } + }); + + expect(verificationMethod).to.exist; + expect(verificationMethod).to.have.property('id', 'did:ion:123#0'); + }); + + it('returns undefined if there is no authentication verification method', async function () { + const verificationMethod = await DidIon.getSigningMethod({ + didDocument: { + id : 'did:ion:123', + verificationMethod : [ + { + id : 'did:ion:123#0', + type : 'JsonWebKey2020', + controller : 'did:ion:123', + publicKeyJwk : {} as Jwk + } + ], + assertionMethod: ['did:ion:123#0'] + } + }); + + expect(verificationMethod).to.not.exist; + }); + + it('returns undefined if the only authentication method is embedded', async function () { + const verificationMethod = await DidIon.getSigningMethod({ + didDocument: { + id : 'did:ion:123', + verificationMethod : [ + { + id : 'did:ion:123#0', + type : 'JsonWebKey2020', + controller : 'did:ion:123', + publicKeyJwk : {} as Jwk + } + ], + authentication: [ + { + id : 'did:ion:123#1', + type : 'JsonWebKey2020', + controller : 'did:ion:123', + publicKeyJwk : {} as Jwk + } + ], + assertionMethod: ['did:ion:123#0'] + } + }); + + expect(verificationMethod).to.not.exist; + }); + + it('handles didDocuments missing verification methods', async function () { + const result = await DidIon.getSigningMethod({ + didDocument: { id: 'did:ion:123' } + }); + + expect(result).to.be.undefined; + }); + + it('throws an error if a non-key method is used', async function () { + // Example DID Document with a non-key method + const didDocument: DidDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:example:123', + verificationMethod : [ + { + id : 'did:example:123#0', + type : 'JsonWebKey2020', + controller : 'did:example:123', + publicKeyJwk : {} as Jwk + } + ], + }; + + try { + await DidIon.getSigningMethod({ didDocument }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.equal('Method not supported: example'); + } + }); + }); + + describe('resolve()', () => { + it('resolves published short form ION DIDs', async() => { + fetchStub.returns(Promise.resolve(fetchOkResponse(ResolveTestVector.publishedDid.didResolutionResult))); + + const resolutionResult = await DidIon.resolve(ResolveTestVector.publishedDid.didUri); + + expect(resolutionResult).to.have.property('didDocument'); + expect(resolutionResult).to.have.property('didDocumentMetadata'); + expect(resolutionResult).to.have.property('didResolutionMetadata'); + + expect(resolutionResult.didDocument).to.have.property('id', ResolveTestVector.publishedDid.didUri); + expect(resolutionResult.didDocumentMetadata).to.have.property('canonicalId', ResolveTestVector.publishedDid.didUri); + expect(resolutionResult.didDocumentMetadata).to.have.property('published', true); + }); + + it('returns notFound error with unpublished short form ION DIDs', async() => { + fetchStub.returns(Promise.resolve(fetchNotFoundResponse())); + + const didUri = 'did:ion:EiBCi7lnGtotBsFkbI_lQskQZLk_GPelU0C5-nRB4_nMfA'; + const resolutionResult = await DidIon.resolve(didUri); + + expect(resolutionResult).to.have.property('@context'); + expect(resolutionResult).to.have.property('didDocument'); + expect(resolutionResult).to.have.property('didDocumentMetadata'); + + expect(resolutionResult.didResolutionMetadata).to.have.property('error', 'notFound'); + }); + + it(`returns methodNotSupported error if DID method is not 'ion'`, async () => { + const didUri = 'did:key:z6MkvEvogvhMEv9bXLyDXdqSSvvh5goAMtUruYwCbFpuhDjx'; + const resolutionResult = await DidIon.resolve(didUri); + expect(resolutionResult).to.have.property('@context'); + expect(resolutionResult).to.have.property('didDocument'); + expect(resolutionResult).to.have.property('didDocumentMetadata'); + + expect(resolutionResult.didResolutionMetadata).to.have.property('error', 'methodNotSupported'); + }); + + it('accepts custom DID resolver with trailing slash', async () => { + const mockResult = { + '@context' : 'https://w3id.org/did-resolution/v1', + 'didDocument' : null, + 'didDocumentMetadata' : { + 'published': undefined + }, + 'didResolutionMetadata': {} + }; + fetchStub.returns(Promise.resolve({ + ok : true, + json : () => Promise.resolve(mockResult) + })); + + const didUri = 'did:ion:EiCab9QRUcUTKKIM-W2SMCwnOPxa4y0q7emoWJDSOSz3HQ'; + const resolutionResult = await DidIon.resolve(didUri, { + gatewayUri: 'https://dev.uniresolver.io/1.0/' + }); + + expect(resolutionResult).to.deep.equal(mockResult); + expect(fetchStub.calledOnceWith( + `https://dev.uniresolver.io/1.0/identifiers/${didUri}` + )).to.be.true; + }); + }); + + describe('toKeys()', () => { + let keyManager: LocalKeyManager; + + before(() => { + keyManager = new LocalKeyManager(); + }); + + it('returns a single verification method for a DID, by default', async () => { + // Import the test DID's key into the key manager. + await keyManager.importKey({ key: ToKeysTestVector.oneMethodNoServices.privateKey[0] }); + + // Use the DID object from the test vector but with the instantiated key manager. + const did = ToKeysTestVector.oneMethodNoServices.did; + did.keyManager = keyManager; + + // Convert the DID to a portable format. + const portableDid = await DidIon.toKeys({ did }); + + expect(portableDid).to.have.property('verificationMethods'); + expect(portableDid.verificationMethods).to.have.length(1); + expect(portableDid.verificationMethods[0]).to.have.property('publicKeyJwk'); + expect(portableDid.verificationMethods[0]).to.have.property('privateKeyJwk'); + expect(portableDid.verificationMethods[0]).to.have.property('purposes'); + expect(portableDid.verificationMethods[0]).to.have.property('type'); + expect(portableDid.verificationMethods[0]).to.have.property('id'); + expect(portableDid.verificationMethods[0]).to.have.property('controller'); + }); + }); +}); \ No newline at end of file diff --git a/packages/dids/tests/methods/did-key.spec.ts b/packages/dids/tests/methods/did-key.spec.ts index 660f03b31..cae7b5b25 100644 --- a/packages/dids/tests/methods/did-key.spec.ts +++ b/packages/dids/tests/methods/did-key.spec.ts @@ -4,6 +4,7 @@ import sinon from 'sinon'; import { expect } from 'chai'; import { LocalKeyManager } from '@web5/crypto'; +import type { DidDocument } from '../../src/types/did-core.js'; import type { PortableDid, PortableDidVerificationMethod } from '../../src/methods/did-method.js'; import { DidErrorCode } from '../../src/did-error.js'; @@ -425,6 +426,105 @@ describe('DidKey', () => { }); }); + describe('getSigningMethod()', () => { + it('returns the first authentication verification method', async function () { + const verificationMethod = await DidKey.getSigningMethod({ + didDocument: { + id : 'did:key:123', + verificationMethod : [ + { + id : 'did:key:123#0', + type : 'JsonWebKey2020', + controller : 'did:key:123', + publicKeyJwk : {} as Jwk + } + ], + authentication: ['did:key:123#0'] + } + }); + + expect(verificationMethod).to.exist; + expect(verificationMethod).to.have.property('id', 'did:key:123#0'); + }); + + it('returns undefined if there is no authentication verification method', async function () { + const verificationMethod = await DidKey.getSigningMethod({ + didDocument: { + id : 'did:key:123', + verificationMethod : [ + { + id : 'did:key:123#0', + type : 'JsonWebKey2020', + controller : 'did:key:123', + publicKeyJwk : {} as Jwk + } + ], + assertionMethod: ['did:key:123#0'] + } + }); + + expect(verificationMethod).to.not.exist; + }); + + it('returns undefined if the only authentication method is embedded', async function () { + const verificationMethod = await DidKey.getSigningMethod({ + didDocument: { + id : 'did:key:123', + verificationMethod : [ + { + id : 'did:key:123#0', + type : 'JsonWebKey2020', + controller : 'did:key:123', + publicKeyJwk : {} as Jwk + } + ], + authentication: [ + { + id : 'did:key:123#1', + type : 'JsonWebKey2020', + controller : 'did:key:123', + publicKeyJwk : {} as Jwk + } + ], + assertionMethod: ['did:key:123#0'] + } + }); + + expect(verificationMethod).to.not.exist; + }); + + it('handles didDocuments missing verification methods', async function () { + const result = await DidKey.getSigningMethod({ + didDocument: { id: 'did:key:123' } + }); + + expect(result).to.be.undefined; + }); + + it('throws an error if a non-key method is used', async function () { + // Example DID Document with a non-key method + const didDocument: DidDocument = { + '@context' : 'https://www.w3.org/ns/did/v1', + id : 'did:example:123', + verificationMethod : [ + { + id : 'did:example:123#0', + type : 'JsonWebKey2020', + controller : 'did:example:123', + publicKeyJwk : {} as Jwk + } + ], + }; + + try { + await DidKey.getSigningMethod({ didDocument }); + expect.fail('Error should have been thrown'); + } catch (error: any) { + expect(error.message).to.equal('Method not supported: example'); + } + }); + }); + describe('resolve()', () => { it('derives a key agreement verification method when enableEncryptionKeyDerivation is true', async function () { const did = 'did:key:z6MkpUzNmYVTGpqhStxK8yRKXWCRNm1bGYz8geAg2zmjYHKX'; From 4464e53327841ff10f6f4d2b179a0628d462eed7 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 10:01:52 -0500 Subject: [PATCH 31/39] Complete adding secp256r1 test vectors Signed-off-by: Frank Hinek --- .../secp256k1/validate-private-key.json | 2 +- .../secp256r1/bytes-to-private-key.json | 19 ++ .../secp256r1/bytes-to-public-key.json | 44 +++ .../secp256r1/get-curve-points.json | 25 ++ .../secp256r1/private-key-to-bytes.json | 19 ++ .../secp256r1/public-key-to-bytes.json | 44 +++ .../secp256r1/validate-private-key.json | 33 ++ .../secp256r1/validate-public-key.json | 33 ++ .../crypto/tests/primitives/secp256r1.spec.ts | 298 +++++++----------- 9 files changed, 330 insertions(+), 187 deletions(-) create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-private-key.json create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-public-key.json create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/get-curve-points.json create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/private-key-to-bytes.json create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/public-key-to-bytes.json create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-private-key.json create mode 100644 packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-public-key.json diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256k1/validate-private-key.json b/packages/crypto/tests/fixtures/test-vectors/secp256k1/validate-private-key.json index 472ea3d3d..d930183e6 100644 --- a/packages/crypto/tests/fixtures/test-vectors/secp256k1/validate-private-key.json +++ b/packages/crypto/tests/fixtures/test-vectors/secp256k1/validate-private-key.json @@ -16,7 +16,7 @@ "output": false }, { - "description" : "returns false if an compressed public key is given", + "description" : "returns false if a compressed public key is given", "input" : { "privateKeyBytes": "026bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce214" }, diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-private-key.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-private-key.json new file mode 100644 index 000000000..b4f402b08 --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-private-key.json @@ -0,0 +1,19 @@ +{ + "description" : "Secp256k1 bytesToPrivateKey test vectors", + "vectors" : [ + { + "description" : "converts RFC6979 vector 1 to the expected private key", + "input" : { + "privateKeyBytes": "c9afa9d845ba75166b5c215767b1d6934e50c3db36e89b127b8a622b120f6721" + }, + "output": { + "crv" : "P-256", + "d" : "ya-p2EW6dRZrXCFXZ7HWk05Qw9s26JsSe4piKxIPZyE", + "kid" : "DOvxvJiAdIqVWIkFt5hDtCunXLF0BV4-JGv4f-ALSm0", + "kty" : "EC", + "x" : "YP7UuiVanTHJYet0xjVtaMBJuJI7Yfps5mliLmDyn7Y", + "y": "eQP-EAi4vJmkGunpVii8ZPLxsgwtfp9Rd6PClNRGIpk" + } + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-public-key.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-public-key.json new file mode 100644 index 000000000..9bab2691f --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/bytes-to-public-key.json @@ -0,0 +1,44 @@ +{ + "description" : "Secp256r1 bytesToPublicKey test vectors", + "vectors" : [ + { + "description" : "converts wycheproof vector 1 to the expected public key", + "input" : { + "publicKeyBytes": "042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + "output": { + "crv" : "P-256", + "kid" : "UB0bE6ogZhikgZQC5i4LIZIpUDDiJ6AnzpDOzOEwJiA", + "kty" : "EC", + "x" : "KSexBRK64-3c_kZ4KBKLrSkDJpkZ9whgacjE32xzKDg", + "y": "x3h5ZOqsAOWSH7FJimD0YGdms9loUAFVjRqXTnNBUT4" + } + }, + { + "description" : "converts wycheproof vector 2 to the expected public key", + "input" : { + "publicKeyBytes": "040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e" + }, + "output": { + "crv" : "P-256", + "kid" : "rC40rZh4ODQ5Y3RKw0dLQBXkVQbkEpCHEoNyFzeSIMU", + "kty" : "EC", + "x" : "CtmVACiNRmlAAx1yqfVEWk1DeEZAhVvwpph00t5f4QM", + "y": "xQEebvLELc1Q1dPSn5mubrosgMkkT0xUIvCXn_DDul4" + } + }, + { + "description" : "converts wycheproof vector 3 to the expected public key", + "input" : { + "publicKeyBytes": "04ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45" + }, + "output": { + "crv" : "P-256", + "kid" : "UnGLajygjRCFie0aEyUb9y6Ec_ZohzbqY7sggZGL6Tk", + "kty" : "EC", + "x" : "qwX9nQ3ia5zm9IGWUtn8aRk9CqOY8PuoAT4JxYIgRVQ", + "y": "GSNScSKMeGdZCV0St1rwaS3UED8Z9qjDL0lDWh6bjUU" + } + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/get-curve-points.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/get-curve-points.json new file mode 100644 index 000000000..9bdb44b37 --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/get-curve-points.json @@ -0,0 +1,25 @@ +{ + "description" : "Secp256k1 getCurvePoints test vectors", + "vectors" : [ + { + "description" : "returns public key x and y coordinates given a public key", + "input" : { + "keyBytes": "048b542fa180e78bc981e6671374a64413e0323b439d06870dc49cb56e97775d96a0e469310d10a8ff2cb253a08d46fd845ae330e3ac4e41d0d0a85fbeb8e15795" + }, + "output": { + "x": "8b542fa180e78bc981e6671374a64413e0323b439d06870dc49cb56e97775d96", + "y": "a0e469310d10a8ff2cb253a08d46fd845ae330e3ac4e41d0d0a85fbeb8e15795" + } + }, + { + "description" : "returns public key x and y coordinates given a private key", + "input" : { + "keyBytes": "08169cf81812f2e288a1131de246ebdf29b020c7625a98d098296a30a876d35a" + }, + "output": { + "x": "25f61964e7797e36d9c369b752f53e33033c473e6db4697d74950095a1bfbe49", + "y": "9c2077c6252c520501e365868a22e3a8a8106bf7be95096394d9095c55239366" + } + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/private-key-to-bytes.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/private-key-to-bytes.json new file mode 100644 index 000000000..f0687b0b7 --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/private-key-to-bytes.json @@ -0,0 +1,19 @@ +{ + "description" : "Secp256k1 bytesToPrivateKey test vectors", + "vectors" : [ + { + "description" : "converts RFC6979 vector 1 to the expected private key", + "input" : { + "privateKey": { + "crv" : "P-256", + "d" : "ya-p2EW6dRZrXCFXZ7HWk05Qw9s26JsSe4piKxIPZyE", + "kid" : "DOvxvJiAdIqVWIkFt5hDtCunXLF0BV4-JGv4f-ALSm0", + "kty" : "EC", + "x" : "YP7UuiVanTHJYet0xjVtaMBJuJI7Yfps5mliLmDyn7Y", + "y": "eQP-EAi4vJmkGunpVii8ZPLxsgwtfp9Rd6PClNRGIpk" + } + }, + "output": "c9afa9d845ba75166b5c215767b1d6934e50c3db36e89b127b8a622b120f6721" + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/public-key-to-bytes.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/public-key-to-bytes.json new file mode 100644 index 000000000..9ba3fd6c1 --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/public-key-to-bytes.json @@ -0,0 +1,44 @@ +{ + "description" : "Secp256r1 bytesToPublicKey test vectors", + "vectors" : [ + { + "description" : "converts wycheproof vector 1 to the expected public key", + "input" : { + "publicKey": { + "crv" : "P-256", + "kid" : "UB0bE6ogZhikgZQC5i4LIZIpUDDiJ6AnzpDOzOEwJiA", + "kty" : "EC", + "x" : "KSexBRK64-3c_kZ4KBKLrSkDJpkZ9whgacjE32xzKDg", + "y": "x3h5ZOqsAOWSH7FJimD0YGdms9loUAFVjRqXTnNBUT4" + } + }, + "output": "042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + { + "description" : "converts wycheproof vector 2 to the expected public key", + "input" : { + "publicKey": { + "crv" : "P-256", + "kid" : "rC40rZh4ODQ5Y3RKw0dLQBXkVQbkEpCHEoNyFzeSIMU", + "kty" : "EC", + "x" : "CtmVACiNRmlAAx1yqfVEWk1DeEZAhVvwpph00t5f4QM", + "y": "xQEebvLELc1Q1dPSn5mubrosgMkkT0xUIvCXn_DDul4" + } + }, + "output": "040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e" + }, + { + "description" : "converts wycheproof vector 3 to the expected public key", + "input" : { + "publicKey": { + "crv" : "P-256", + "kid" : "UnGLajygjRCFie0aEyUb9y6Ec_ZohzbqY7sggZGL6Tk", + "kty" : "EC", + "x" : "qwX9nQ3ia5zm9IGWUtn8aRk9CqOY8PuoAT4JxYIgRVQ", + "y": "GSNScSKMeGdZCV0St1rwaS3UED8Z9qjDL0lDWh6bjUU" + } + }, + "output": "04ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45" + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-private-key.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-private-key.json new file mode 100644 index 000000000..b79b1b8e2 --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-private-key.json @@ -0,0 +1,33 @@ +{ + "description" : "Secp256r1 validatePrivateKey test vectors", + "vectors" : [ + { + "description" : "returns true for valid private keys", + "input" : { + "privateKeyBytes": "08169cf81812f2e288a1131de246ebdf29b020c7625a98d098296a30a876d35a" + }, + "output": true + }, + { + "description" : "returns false for invalid private keys", + "input" : { + "privateKeyBytes": "02fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" + }, + "output": false + }, + { + "description" : "returns false if a compressed public key is given", + "input" : { + "privateKeyBytes": "02ca156301f628b64ef0ccff5aba2f78f29bc865fc1da35f1b4e8f3726f1f2d987" + }, + "output": false + }, + { + "description" : "returns false if an uncompressed public key is given", + "input" : { + "privateKeyBytes": "048b542fa180e78bc981e6671374a64413e0323b439d06870dc49cb56e97775d96a0e469310d10a8ff2cb253a08d46fd845ae330e3ac4e41d0d0a85fbeb8e15795" + }, + "output": false + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-public-key.json b/packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-public-key.json new file mode 100644 index 000000000..f4ce580fd --- /dev/null +++ b/packages/crypto/tests/fixtures/test-vectors/secp256r1/validate-public-key.json @@ -0,0 +1,33 @@ +{ + "description" : "Secp256r1 validatePublicKey test vectors", + "vectors" : [ + { + "description" : "returns true for valid compressed public keys", + "input" : { + "publicKeyBytes": "02ca156301f628b64ef0ccff5aba2f78f29bc865fc1da35f1b4e8f3726f1f2d987" + }, + "output": true + }, + { + "description" : "returns true for valid uncompressed public keys", + "input" : { + "publicKeyBytes": "048b542fa180e78bc981e6671374a64413e0323b439d06870dc49cb56e97775d96a0e469310d10a8ff2cb253a08d46fd845ae330e3ac4e41d0d0a85fbeb8e15795" + }, + "output": true + }, + { + "description" : "returns false for invalid public keys", + "input" : { + "publicKeyBytes": "02fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f" + }, + "output": false + }, + { + "description" : "returns false if a private key is given", + "input" : { + "publicKeyBytes": "08169cf81812f2e288a1131de246ebdf29b020c7625a98d098296a30a876d35a" + }, + "output": false + } + ] +} \ No newline at end of file diff --git a/packages/crypto/tests/primitives/secp256r1.spec.ts b/packages/crypto/tests/primitives/secp256r1.spec.ts index 53abcaa67..a22afb2d0 100644 --- a/packages/crypto/tests/primitives/secp256r1.spec.ts +++ b/packages/crypto/tests/primitives/secp256r1.spec.ts @@ -4,15 +4,13 @@ import chaiAsPromised from 'chai-as-promised'; import type { Jwk, JwkParamsEcPrivate } from '../../src/jose/jwk.js'; -// import CryptoEs256kSignTestVector from '../../../../web5-spec/test-vectors/crypto_es256k/sign.json' assert { type: 'json' }; -// import CryptoEs256kVerifyTestVector from '../../../../web5-spec/test-vectors/crypto_es256k/verify.json' assert { type: 'json' }; -// import secp256k1GetCurvePoints from '../fixtures/test-vectors/secp256k1/get-curve-points.json' assert { type: 'json' }; -// import secp256k1BytesToPublicKey from '../fixtures/test-vectors/secp256k1/bytes-to-public-key.json' assert { type: 'json' }; -// import secp256k1PublicKeyToBytes from '../fixtures/test-vectors/secp256k1/public-key-to-bytes.json' assert { type: 'json' }; -// import secp256k1ValidatePublicKey from '../fixtures/test-vectors/secp256k1/validate-public-key.json' assert { type: 'json' }; -// import secp256k1BytesToPrivateKey from '../fixtures/test-vectors/secp256k1/bytes-to-private-key.json' assert { type: 'json' }; -// import secp256k1PrivateKeyToBytes from '../fixtures/test-vectors/secp256k1/private-key-to-bytes.json' assert { type: 'json' }; -// import secp256k1ValidatePrivateKey from '../fixtures/test-vectors/secp256k1/validate-private-key.json' assert { type: 'json' }; +import secp256r1GetCurvePoints from '../fixtures/test-vectors/secp256r1/get-curve-points.json' assert { type: 'json' }; +import secp256r1BytesToPublicKey from '../fixtures/test-vectors/secp256r1/bytes-to-public-key.json' assert { type: 'json' }; +import secp256r1PublicKeyToBytes from '../fixtures/test-vectors/secp256r1/public-key-to-bytes.json' assert { type: 'json' }; +import secp256r1ValidatePublicKey from '../fixtures/test-vectors/secp256r1/validate-public-key.json' assert { type: 'json' }; +import secp256r1BytesToPrivateKey from '../fixtures/test-vectors/secp256r1/bytes-to-private-key.json' assert { type: 'json' }; +import secp256r1PrivateKeyToBytes from '../fixtures/test-vectors/secp256r1/private-key-to-bytes.json' assert { type: 'json' }; +import secp256r1ValidatePrivateKey from '../fixtures/test-vectors/secp256r1/validate-private-key.json' assert { type: 'json' }; import { Secp256r1 } from '../../src/primitives/secp256r1.js'; @@ -38,35 +36,31 @@ describe('Secp256r1', () => { expect(adjustedSignature.byteLength).to.equal(64); }); - it.skip('returns the low-S form given a high-S signature', async () => { - const signatureHighS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b470f9f78c954682f4ce451e5f3d353b4c9fcfbb7d702fe9e28bdfe21be648fc618d').toUint8Array(); + it('returns the low-S form given a high-S signature', async () => { + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256r1_sha256_test.json#L209-L218 + const signatureHighS = Convert.hex('2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db').toUint8Array(); const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureHighS }); expect(adjustedSignature).to.not.deep.equal(signatureHighS); }); - it.skip('returns the signature unmodified if already in low-S form', async () => { - const signatureLowS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b4700608736ab97d0b31bae1a0c2cac4b35eeaf35f767f5ebdafdff042a68739dfb4').toUint8Array(); + it('returns the signature unmodified if already in low-S form', async () => { + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256r1_sha256_test.json#L189-L198 + const signatureLowS = Convert.hex('2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76').toUint8Array(); const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureLowS }); expect(adjustedSignature).to.deep.equal(signatureLowS); }); - it.skip('returns signatures that can be verified regardless of low- or high-S form', async () => { - const data = new Uint8Array([51, 52, 53]); - - const publicKey: Jwk = { - kty : 'EC', - crv : 'secp256k1', - x : 'A2ZbCLhod3ltBQ4Mw0zjkcQZ7h7B1FQ3s56ZtWavonQ', - y : 'JBerPwkut8tONfAfcXhNEBERj7jejohqMfbbs2aMMZA', - kid : '9l2x1L-iUvyCy4RuqJdoqe7h0IPnCVXPjTHhVYCuLAc' - }; - - const signatureLowS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b4700608736ab97d0b31bae1a0c2cac4b35eeaf35f767f5ebdafdff042a68739dfb4').toUint8Array(); - const signatureHighS = Convert.hex('351757c538d0a13fa9473dabc259be82dba1bd8f44dcba71a7f222655429b470f9f78c954682f4ce451e5f3d353b4c9fcfbb7d702fe9e28bdfe21be648fc618d').toUint8Array(); + it('returns signatures that can be verified regardless of low- or high-S form', async () => { + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256r1_sha256_test.json#L176-L198 + const publicKeyBytes = Convert.hex('042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e').toUint8Array(); + const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes }); + const data = Convert.hex('313233343030').toUint8Array(); + const signatureLowS = Convert.hex('2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e184cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76').toUint8Array(); + const signatureHighS = Convert.hex('2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db').toUint8Array(); // Verify that the returned signature is valid when input in low-S form. let adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature: signatureLowS }); @@ -81,11 +75,11 @@ describe('Secp256r1', () => { }); describe('bytesToPrivateKey()', () => { - it.skip('returns a private key in JWK format', async () => { - const privateKeyBytes = Convert.hex('740ec69810de9ad1b8f298f1d2c0e6a52dd1e958dc2afc85764bec169c222e88').toUint8Array(); + it('returns a private key in JWK format', async () => { + const privateKeyBytes = Convert.hex('08169cf81812f2e288a1131de246ebdf29b020c7625a98d098296a30a876d35a').toUint8Array(); const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes }); - expect(privateKey).to.have.property('crv', 'secp256k1'); + expect(privateKey).to.have.property('crv', 'P-256'); expect(privateKey).to.have.property('d'); expect(privateKey).to.have.property('kid'); expect(privateKey).to.have.property('kty', 'EC'); @@ -93,23 +87,23 @@ describe('Secp256r1', () => { expect(privateKey).to.have.property('y'); }); - // for (const vector of secp256k1BytesToPrivateKey.vectors) { - // it(vector.description, async () => { - // const privateKey = await Secp256r1.bytesToPrivateKey({ - // privateKeyBytes: Convert.hex(vector.input.privateKeyBytes).toUint8Array() - // }); + for (const vector of secp256r1BytesToPrivateKey.vectors) { + it(vector.description, async () => { + const privateKey = await Secp256r1.bytesToPrivateKey({ + privateKeyBytes: Convert.hex(vector.input.privateKeyBytes).toUint8Array() + }); - // expect(privateKey).to.deep.equal(vector.output); - // }); - // } + expect(privateKey).to.deep.equal(vector.output); + }); + } }); describe('bytesToPublicKey()', () => { - it.skip('returns a public key in JWK format', async () => { - const publicKeyBytes = Convert.hex('043752951274023296c8a74b0ffe42f82ff4b4d4bba4326477422703f761f59258c26a7465b9a77ac0c3f1cedb139c428b0b1fbb5516867b527636f3286f705553').toUint8Array(); + it('returns a public key in JWK format', async () => { + const publicKeyBytes = Convert.hex('048b542fa180e78bc981e6671374a64413e0323b439d06870dc49cb56e97775d96a0e469310d10a8ff2cb253a08d46fd845ae330e3ac4e41d0d0a85fbeb8e15795').toUint8Array(); const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes }); - expect(publicKey).to.have.property('crv', 'secp256k1'); + expect(publicKey).to.have.property('crv', 'P-256'); expect(publicKey).to.have.property('kid'); expect(publicKey).to.have.property('kty', 'EC'); expect(publicKey).to.have.property('x'); @@ -117,20 +111,20 @@ describe('Secp256r1', () => { expect(publicKey).to.not.have.property('d'); }); - // for (const vector of secp256k1BytesToPublicKey.vectors) { - // it(vector.description, async () => { - // const publicKey = await Secp256r1.bytesToPublicKey({ - // publicKeyBytes: Convert.hex(vector.input.publicKeyBytes).toUint8Array() - // }); - // expect(publicKey).to.deep.equal(vector.output); - // }); - // } + for (const vector of secp256r1BytesToPublicKey.vectors) { + it(vector.description, async () => { + const publicKey = await Secp256r1.bytesToPublicKey({ + publicKeyBytes: Convert.hex(vector.input.publicKeyBytes).toUint8Array() + }); + expect(publicKey).to.deep.equal(vector.output); + }); + } }); describe('compressPublicKey()', () => { - it.skip('converts an uncompressed public key to compressed format', async () => { - const compressedPublicKeyBytes = Convert.hex('026bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce214').toUint8Array(); - const uncompressedPublicKeyBytes = Convert.hex('046bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce21465062296011dd076ae4e8ce5163ccf69d01496d3147656dcc96645b95211f3c6').toUint8Array(); + it('converts an uncompressed public key to compressed format', async () => { + const compressedPublicKeyBytes = Convert.hex('02d7251f4572325f4b1a9642600427adfe11ea3bd4dfe1cd7f4932612129e18784').toUint8Array(); + const uncompressedPublicKeyBytes = Convert.hex('04d7251f4572325f4b1a9642600427adfe11ea3bd4dfe1cd7f4932612129e187844247b3c6302e7ecd611dbb666380e1117b198f37a9d183de422947f6b6183098').toUint8Array(); const output = await Secp256r1.compressPublicKey({ publicKeyBytes: uncompressedPublicKeyBytes @@ -143,7 +137,7 @@ describe('Secp256r1', () => { expect(output).to.deep.equal(compressedPublicKeyBytes); }); - it.skip('throws an error for an invalid uncompressed public key', async () => { + it('throws an error for an invalid uncompressed public key', async () => { // Invalid uncompressed public key. const invalidPublicKey = Convert.hex('dfebc16793a5737ac51f606a43524df8373c063e41d5a99b2f1530afd987284bd1c7cde1658a9a756e71f44a97b4783ea9dee5ccb7f1447eb4836d8de9bd4f81fd').toUint8Array(); @@ -180,8 +174,8 @@ describe('Secp256r1', () => { }); describe('convertDerToCompactSignature()', () => { - it.skip('returns compact R+S format signature as a Uint8Array', async () => { - const derSignature = Convert.hex('304402203d2f8c3d0f3f7b8b0a9f4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d02203d2f8c3d0f3f7b8b0a9f4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d2e8a0f2d4d7a4d').toUint8Array(); + it('returns compact R+S format signature as a Uint8Array', async () => { + const derSignature = Convert.hex('3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2').toUint8Array(); const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); @@ -189,50 +183,21 @@ describe('Secp256r1', () => { expect(compactSignature.byteLength).to.equal(64); }); - it.skip('converted ASN.1 DER encoded ECDSA signature matches the expected compact R+S signature', async () => { - const derSignature = Convert.hex('3046022100bd856f326c9d52c6ea6b0711831fe706ad4df6f1c2499de3aa2950d27fe89590022100be32e04c6d0d6fe1628b84eacff5bb871cea4138199521b37234da79b63586f8').toUint8Array(); - const expectedCompactSignature = Convert.hex('bd856f326c9d52c6ea6b0711831fe706ad4df6f1c2499de3aa2950d27fe89590be32e04c6d0d6fe1628b84eacff5bb871cea4138199521b37234da79b63586f8').toUint8Array(); + it('converted ASN.1 DER encoded ECDSA signature matches the expected compact R+S signature', async () => { + const derSignature = Convert.hex('3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2').toUint8Array(); + const expectedCompactSignature = Convert.hex('b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a0177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2').toUint8Array(); const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); expect(compactSignature).to.deep.equal(expectedCompactSignature); }); - it.skip('converts AWS KMS signatures that can be verified with Secp256r1.verify()', async () => { - // Public key generated with AWS KMS. - const publicKey: Jwk = { - kty : 'EC', - x : 'RZibmDDBkHgq13BrUB7myVzZf_mvgXyesI2eyu4Mbto', - y : 'RGrSYhAEPg2Wl8dOnVWLWvp79A9ueqzhXNaVd-oR7Xo', - crv : 'secp256k1', - kid : 'm-M694699ruAkBudvKuhXvJ1e_nz7wdksjuPyVShVjo' - }; - - // Data payload that was used to generate the signature. - const message = new Uint8Array([0, 1, 2, 3, 4]); - - // ASN.1 DER encoded ECDSA signature generated with AWS KMS. - const derSignature = Convert.hex('3046022100bd856f326c9d52c6ea6b0711831fe706ad4df6f1c2499de3aa2950d27fe89590022100be32e04c6d0d6fe1628b84eacff5bb871cea4138199521b37234da79b63586f8').toUint8Array(); - - // Convert the AWS KMS signature to a compact R+S signature. - const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); - - // Verify the signature with the public key using Secp256r1.verify(). - const isValid = await Secp256r1.verify({ - key : publicKey, - signature : compactSignature, - data : message - }); - - expect(isValid).to.be.true; - }); - - it.skip('passes Wycheproof test vector', async () => { - // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256k1_sha256_test.json#L189-L198 - const publicKeyBytes = Convert.hex('04b838ff44e5bc177bf21189d0766082fc9d843226887fc9760371100b7ee20a6ff0c9d75bfba7b31a6bca1974496eeb56de357071955d83c4b1badaa0b21832e9').toUint8Array(); + it('passes Wycheproof test vector', async () => { + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256r1_sha256_test.json#L189-L198 + const publicKeyBytes = Convert.hex('042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e').toUint8Array(); const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes }); const message = Convert.hex('313233343030').toUint8Array(); - const derSignature = Convert.hex('3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc9832365022100900e75ad233fcc908509dbff5922647db37c21f4afd3203ae8dc4ae7794b0f87').toUint8Array(); + const derSignature = Convert.hex('304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76').toUint8Array(); const compactSignature = await Secp256r1.convertDerToCompactSignature({ derSignature }); @@ -245,10 +210,10 @@ describe('Secp256r1', () => { expect(isValid).to.be.true; }); - it.skip('throws an error for an invalid ASN.1 DER encoded ECDSA signature due to incorrect length', async () => { + it('throws an error for an invalid ASN.1 DER encoded ECDSA signature due to incorrect length', async () => { // Invalid ASN.1 DER encoded ECDSA signature. - // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256k1_sha256_test.json#L239-L248 - const invalidDerSignature = Convert.hex('3046022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba').toUint8Array(); + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256r1_sha256_test.json#L239-L248 + const invalidDerSignature = Convert.hex('304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db').toUint8Array(); try { await Secp256r1.convertDerToCompactSignature({ derSignature: invalidDerSignature }); @@ -259,10 +224,10 @@ describe('Secp256r1', () => { } }); - it.skip('throws an error for an invalid ASN.1 DER encoded ECDSA signature due to appending zeros to sequence', async () => { + it('throws an error for an invalid ASN.1 DER encoded ECDSA signature due to appending zeros to sequence', async () => { // Invalid ASN.1 DER encoded ECDSA signature. - // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256k1_sha256_test.json#L369-L378 - const invalidDerSignature = Convert.hex('3047022100813ef79ccefa9a56f7ba805f0e478584fe5f0dd5f567bc09b5123ccbc983236502206ff18a52dcc0336f7af62400a6dd9b810732baf1ff758000d6f613a556eb31ba0000').toUint8Array(); + // Source: https://github.com/paulmillr/noble-curves/blob/37eab5a28a43c35b87e9e95a12ae6086393ac38b/test/wycheproof/ecdsa_secp256r1_sha256_test.json#L369-L378 + const invalidDerSignature = Convert.hex('304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000').toUint8Array(); try { await Secp256r1.convertDerToCompactSignature({ derSignature: invalidDerSignature }); @@ -275,9 +240,9 @@ describe('Secp256r1', () => { }); describe('decompressPublicKey()', () => { - it.skip('converts a compressed public key to an uncompressed format', async () => { - const compressedPublicKeyBytes = Convert.hex('026bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce214').toUint8Array(); - const uncompressedPublicKeyBytes = Convert.hex('046bcdccc644b309921d3b0c266183a20786650c1634d34e8dfa1ed74cd66ce21465062296011dd076ae4e8ce5163ccf69d01496d3147656dcc96645b95211f3c6').toUint8Array(); + it('converts a compressed public key to an uncompressed format', async () => { + const compressedPublicKeyBytes = Convert.hex('02d7251f4572325f4b1a9642600427adfe11ea3bd4dfe1cd7f4932612129e18784').toUint8Array(); + const uncompressedPublicKeyBytes = Convert.hex('04d7251f4572325f4b1a9642600427adfe11ea3bd4dfe1cd7f4932612129e187844247b3c6302e7ecd611dbb666380e1117b198f37a9d183de422947f6b6183098').toUint8Array(); const output = await Secp256r1.decompressPublicKey({ publicKeyBytes: compressedPublicKeyBytes @@ -290,7 +255,7 @@ describe('Secp256r1', () => { expect(output).to.deep.equal(uncompressedPublicKeyBytes); }); - it.skip('throws an error for an invalid compressed public key', async () => { + it('throws an error for an invalid compressed public key', async () => { // Invalid compressed public key. const invalidPublicKey = Convert.hex('fef0b998921eafb58f49efdeb0adc47123aa28a4042924236f08274d50c72fe7b0').toUint8Array(); @@ -327,15 +292,15 @@ describe('Secp256r1', () => { }); describe('getCurvePoint()', () => { - // for (const vector of secp256k1GetCurvePoints.vectors) { - // it(vector.description, async () => { - // const keyBytes = Convert.hex(vector.input.keyBytes).toUint8Array(); - // // @ts-expect-error because getCurvePoint() is a private method. - // const points = await Secp256r1.getCurvePoint({ keyBytes }); - // expect(points.x).to.deep.equal(Convert.hex(vector.output.x).toUint8Array()); - // expect(points.y).to.deep.equal(Convert.hex(vector.output.y).toUint8Array()); - // }); - // } + for (const vector of secp256r1GetCurvePoints.vectors) { + it(vector.description, async () => { + const keyBytes = Convert.hex(vector.input.keyBytes).toUint8Array(); + // @ts-expect-error because getCurvePoint() is a private method. + const points = await Secp256r1.getCurvePoint({ keyBytes }); + expect(points.x).to.deep.equal(Convert.hex(vector.output.x).toUint8Array()); + expect(points.y).to.deep.equal(Convert.hex(vector.output.y).toUint8Array()); + }); + } it('throws error with invalid input key length', async () => { await expect( @@ -425,19 +390,18 @@ describe('Secp256r1', () => { }); describe('privateKeyToBytes()', () => { - it.skip('returns a private key as a byte array', async () => { + it('returns a private key as a byte array', async () => { const privateKey: Jwk = { kty : 'EC', - crv : 'secp256k1', - d : 'dA7GmBDemtG48pjx0sDmpS3R6VjcKvyFdkvsFpwiLog', - x : 'N1KVEnQCMpbIp0sP_kL4L_S01LukMmR3QicD92H1klg', - y : 'wmp0ZbmnesDD8c7bE5xCiwsfu1UWhntSdjbzKG9wVVM', - kid : 'iwwOeCqgvREo5xGeBS-obWW9ZGjv0o1M65gUYN6SYh4' + crv : 'P-256', + d : 'xqQrTkJTX2GGbCW9V7Sp8ILlqzNlnbVF2BM4OkDqY3o', + x : 'uageVRxl4FPxSGXr5dXS4MfwiP56Ue-0qZmpM-VybJM', + y : 'cVm_UIPl7deVqHL-jXG5Ar1ZpHEVqwOyk-ugOg2W6ns' }; const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey }); expect(privateKeyBytes).to.be.an.instanceOf(Uint8Array); - const expectedOutput = Convert.hex('740ec69810de9ad1b8f298f1d2c0e6a52dd1e958dc2afc85764bec169c222e88').toUint8Array(); + const expectedOutput = Convert.hex('c6a42b4e42535f61866c25bd57b4a9f082e5ab33659db545d813383a40ea637a').toUint8Array(); expect(privateKeyBytes).to.deep.equal(expectedOutput); }); @@ -454,14 +418,14 @@ describe('Secp256r1', () => { ).to.eventually.be.rejectedWith(Error, 'provided key is not a valid EC private key'); }); - // for (const vector of secp256k1PrivateKeyToBytes.vectors) { - // it(vector.description, async () => { - // const privateKeyBytes = await Secp256r1.privateKeyToBytes({ - // privateKey: vector.input.privateKey as Jwk - // }); - // expect(privateKeyBytes).to.deep.equal(Convert.hex(vector.output).toUint8Array()); - // }); - // } + for (const vector of secp256r1PrivateKeyToBytes.vectors) { + it(vector.description, async () => { + const privateKeyBytes = await Secp256r1.privateKeyToBytes({ + privateKey: vector.input.privateKey as Jwk + }); + expect(privateKeyBytes).to.deep.equal(Convert.hex(vector.output).toUint8Array()); + }); + } }); describe('publicKeyToBytes()', () => { @@ -495,14 +459,14 @@ describe('Secp256r1', () => { ).to.eventually.be.rejectedWith(Error, 'provided key is not a valid EC public key'); }); - // for (const vector of secp256k1PublicKeyToBytes.vectors) { - // it(vector.description, async () => { - // const publicKeyBytes = await Secp256r1.publicKeyToBytes({ - // publicKey: vector.input.publicKey as Jwk - // }); - // expect(publicKeyBytes).to.deep.equal(Convert.hex(vector.output).toUint8Array()); - // }); - // } + for (const vector of secp256r1PublicKeyToBytes.vectors) { + it(vector.description, async () => { + const publicKeyBytes = await Secp256r1.publicKeyToBytes({ + publicKey: vector.input.publicKey as Jwk + }); + expect(publicKeyBytes).to.deep.equal(Convert.hex(vector.output).toUint8Array()); + }); + } }); describe('sharedSecret()', () => { @@ -568,45 +532,26 @@ describe('Secp256r1', () => { signature = await Secp256r1.sign({ key, data }); expect(signature).to.be.instanceOf(Uint8Array); }); - - describe.skip('Web5TestVectorsCryptoEs256k', () => { - it('sign', async () => { - // for (const vector of CryptoEs256kSignTestVector.vectors) { - // let errorOccurred = false; - // try { - // const signature = await Secp256r1.sign({ - // key : vector.input.key as Jwk, - // data : Convert.hex(vector.input.data).toUint8Array() - // }); - - // const signatureHex = Convert.uint8Array(signature).toHex(); - // expect(signatureHex).to.deep.equal(vector.output); - - // } catch { errorOccurred = true; } - // expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); - // } - }); - }); }); - describe.skip('validatePrivateKey()', () => { - // for (const vector of secp256k1ValidatePrivateKey.vectors) { - // it(vector.description, async () => { - // const privateKeyBytes = Convert.hex(vector.input.privateKeyBytes).toUint8Array(); - // const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes }); - // expect(isValid).to.equal(vector.output); - // }); - // } + describe('validatePrivateKey()', () => { + for (const vector of secp256r1ValidatePrivateKey.vectors) { + it(vector.description, async () => { + const privateKeyBytes = Convert.hex(vector.input.privateKeyBytes).toUint8Array(); + const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes }); + expect(isValid).to.equal(vector.output); + }); + } }); - describe.skip('validatePublicKey()', () => { - // for (const vector of secp256k1ValidatePublicKey.vectors) { - // it(vector.description, async () => { - // const publicKeyBytes = Convert.hex(vector.input.publicKeyBytes).toUint8Array(); - // const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes }); - // expect(isValid).to.equal(vector.output); - // }); - // } + describe('validatePublicKey()', () => { + for (const vector of secp256r1ValidatePublicKey.vectors) { + it(vector.description, async () => { + const publicKeyBytes = Convert.hex(vector.input.publicKeyBytes).toUint8Array(); + const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes }); + expect(isValid).to.equal(vector.output); + }); + } }); describe('verify()', () => { @@ -629,24 +574,5 @@ describe('Secp256r1', () => { isValid = await Secp256r1.verify({ key: publicKey, signature, data }); expect(isValid).to.be.true; }); - - describe.skip('Web5TestVectorsCryptoEs256k', () => { - // it('verify', async () => { - // for (const vector of CryptoEs256kVerifyTestVector.vectors) { - // let errorOccurred = false; - // try { - // const isValid = await Secp256r1.verify({ - // key : vector.input.key as Jwk, - // signature : Convert.hex(vector.input.signature).toUint8Array(), - // data : Convert.hex(vector.input.data).toUint8Array() - // }); - - // expect(isValid).to.equal(vector.output); - - // } catch { errorOccurred = true; } - // expect(errorOccurred).to.equal(vector.errors, `Expected '${vector.description}' to${vector.errors ? ' ' : ' not '}throw an error`); - // } - // }); - }); }); }); \ No newline at end of file From 2ebbd7704fcf014327142886b54ce280da09ac2e Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 11:39:18 -0500 Subject: [PATCH 32/39] Remove old dependencies and bump versions Signed-off-by: Frank Hinek --- package-lock.json | 5486 ++++++----------- packages/agent/package.json | 4 +- packages/api/package.json | 2 +- packages/common/package.json | 2 +- packages/crypto-aws-kms/package.json | 6 +- packages/crypto/package.json | 4 +- packages/dids/package.json | 5 +- packages/dids/tests/tsconfig.json | 1 - packages/dids/tsconfig.cjs.json | 3 +- packages/dids/tsconfig.json | 3 +- .../decentralized-identity__ion-pow-sdk.d.ts | 7 - packages/identity-agent/package.json | 6 +- packages/proxy-agent/package.json | 6 +- packages/user-agent/package.json | 6 +- 14 files changed, 1925 insertions(+), 3616 deletions(-) delete mode 100644 packages/dids/typings/decentralized-identity__ion-pow-sdk.d.ts diff --git a/package-lock.json b/package-lock.json index db19aa49c..a65d75a01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,9 +27,8 @@ }, "node_modules/@75lb/deep-merge": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", - "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", "dev": true, + "license": "MIT", "dependencies": { "lodash.assignwith": "^4.2.0", "typical": "^7.1.1" @@ -40,39 +39,34 @@ }, "node_modules/@75lb/deep-merge/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@assemblyscript/loader": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", - "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==" + "license": "Apache-2.0" }, "node_modules/@astronautlabs/jsonpath": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz", - "integrity": "sha512-FqL/muoreH7iltYC1EB5Tvox5E8NSOOPGkgns4G+qxRKl6k5dxEVljUjB5NcKESzkqwnUqWjSZkL61XGYOuV+A==", + "license": "MIT", "dependencies": { "static-eval": "2.0.2" } }, "node_modules/@aws-crypto/crc32": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -81,26 +75,22 @@ }, "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "license": "Apache-2.0", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -114,13 +104,11 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/sha256-js": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -129,26 +117,22 @@ }, "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-crypto/util": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -157,13 +141,11 @@ }, "node_modules/@aws-crypto/util/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@aws-sdk/client-kms": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.478.0.tgz", - "integrity": "sha512-aipAUgPdl9phhCyDNXIdU7zym/UfoMNbwhs1CQ5PiktAcRTb7ERvSvtNKHioKatz8oGVR35+5n5V3mupe4URgA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -212,8 +194,7 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.478.0.tgz", - "integrity": "sha512-Jxy9cE1JMkPR0PklCpq3cORHnZq/Z4klhSTNGgZNeBWovMa+plor52kyh8iUNHKl3XEJvTbHM7V+dvrr/x0P1g==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -259,8 +240,7 @@ }, "node_modules/@aws-sdk/client-sts": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.478.0.tgz", - "integrity": "sha512-D+QID0dYzmn9dcxgKP3/nMndUqiQbDLsqI0Zf2pG4MW5gPhVNKlDGIV3Ztz8SkMjzGJExNOLW2L569o8jshJVw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -309,8 +289,7 @@ }, "node_modules/@aws-sdk/core": { "version": "3.477.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.477.0.tgz", - "integrity": "sha512-o0434EH+d1BxHZvgG7z8vph2SYefciQ5RnJw2MgvETGnthgqsnI4nnNJLSw0FVeqCeS18n6vRtzqlGYR2YPCNg==", + "license": "Apache-2.0", "dependencies": { "@smithy/core": "^1.2.0", "@smithy/protocol-http": "^3.0.11", @@ -325,8 +304,7 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz", - "integrity": "sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -339,8 +317,7 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.478.0.tgz", - "integrity": "sha512-SsrYEYUvTG9ZoPC+zB19AnVoOKID+QIEHJDIi1GCZXW5kTVyr1saTVm4orG2TjYvbHQMddsWtHOvGYXZWAYMbw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-process": "3.468.0", @@ -359,8 +336,7 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.478.0.tgz", - "integrity": "sha512-nwDutJYeHiIZCQDgKIUrsgwAWTil0mNe+cbd+j8fi+wwxkWUzip+F0+z02molJ8WrUUKNRhqB1V5aVx7IranuA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-ini": "3.478.0", @@ -380,8 +356,7 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz", - "integrity": "sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -395,8 +370,7 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.478.0.tgz", - "integrity": "sha512-LsDShG51X/q+s5ZFN7kHVqrd8ZHdyEyHqdhoocmRvvw2Dif50M0AqQfvCrW1ndj5CNzXO4x/eH8EK5ZOVlS6Sg==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.478.0", "@aws-sdk/token-providers": "3.478.0", @@ -412,8 +386,7 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz", - "integrity": "sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -426,8 +399,7 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz", - "integrity": "sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -440,8 +412,7 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz", - "integrity": "sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -453,8 +424,7 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz", - "integrity": "sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -467,8 +437,7 @@ }, "node_modules/@aws-sdk/middleware-signing": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz", - "integrity": "sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -484,8 +453,7 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz", - "integrity": "sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@aws-sdk/util-endpoints": "3.478.0", @@ -499,8 +467,7 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.470.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.470.0.tgz", - "integrity": "sha512-C1o1J06iIw8cyAAOvHqT4Bbqf+PgQ/RDlSyjt2gFfP2OovDpc2o2S90dE8f8iZdSGpg70N5MikT1DBhW9NbhtQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.1.8", "@smithy/types": "^2.7.0", @@ -514,8 +481,7 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.478.0.tgz", - "integrity": "sha512-7b5tj1y/wGHZIZ+ckjOUKgKrMuCJMF/G1UKZKIqqdekeEsjcThbvoxAMeY0FEowu2ODVk/ggOmpBFxcu0iYd6A==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -561,8 +527,7 @@ }, "node_modules/@aws-sdk/types": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.468.0.tgz", - "integrity": "sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.7.0", "tslib": "^2.5.0" @@ -573,8 +538,7 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.478.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz", - "integrity": "sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/util-endpoints": "^1.0.7", @@ -586,8 +550,7 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", - "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -597,8 +560,7 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.468.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz", - "integrity": "sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -608,8 +570,7 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.470.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz", - "integrity": "sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/node-config-provider": "^2.1.8", @@ -630,17 +591,15 @@ }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.3.1" } }, "node_modules/@babel/code-frame": { "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -651,18 +610,16 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -674,24 +631,62 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@decentralized-identity/ion-pow-sdk": { "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-pow-sdk/-/ion-pow-sdk-1.0.17.tgz", - "integrity": "sha512-vk7DTDM8aKDbFyu1ad/qkoRrGL4q+KvNeL/FNZXhkWPaDhVExBN/qGEoRLf1YSfFe+myto3+4RYTPut+riiqnw==", + "license": "apache-2.0", "dependencies": { "buffer": "6.0.3", "cross-fetch": "3.1.5", "hash-wasm": "4.9.0" } }, + "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/cross-fetch": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/node-fetch": { + "version": "2.6.7", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@decentralized-identity/ion-sdk": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-sdk/-/ion-sdk-1.0.1.tgz", - "integrity": "sha512-+P+DXcRSFjsEsI5KIqUmVjpzgUT28B2lWpTO+IxiBcfibAN/1Sg20NebGTO/+serz2CnSZf95N2a1OZ6eXypGQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ed25519": "^2.0.0", "@noble/secp256k1": "^2.0.0", @@ -703,8 +698,7 @@ }, "node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -712,8 +706,7 @@ }, "node_modules/@dnsquery/dns-packet": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@dnsquery/dns-packet/-/dns-packet-6.1.1.tgz", - "integrity": "sha512-WXTuFvL3G+74SchFAtz3FgIYVOe196ycvGsMgvSH/8Goptb1qpIQtIuM4SOK9G9lhMWYpHxnXyy544ZhluFOew==", + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.4", "utf8-codec": "^1.0.0" @@ -722,62 +715,13 @@ "node": ">=6" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", - "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", - "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", - "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", - "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -786,299 +730,10 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", - "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", - "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", - "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", - "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", - "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", - "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", - "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", - "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", - "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", - "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", - "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", - "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", - "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", - "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", - "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", - "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", - "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", - "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -1091,18 +746,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1123,9 +776,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1139,9 +791,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1149,15 +800,13 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1167,18 +816,16 @@ }, "node_modules/@eslint/js": { "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -1190,9 +837,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1200,9 +846,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1212,9 +857,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1225,14 +869,12 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@ipld/dag-cbor": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.3.tgz", - "integrity": "sha512-A2UFccS0+sARK9xwXiVZIaWbLbPxLGP3UZOjBeOMWfDY04SXi8h1+t4rHBzOlKYF/yWNm3RbFLyclWO7hZcy4g==", + "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^2.0.1", "multiformats": "^12.0.1" @@ -1244,8 +886,7 @@ }, "node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -1253,8 +894,7 @@ }, "node_modules/@ipld/dag-pb": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.8.tgz", - "integrity": "sha512-693AqMY2jvhe+w4jSwjnDrbhxIu39gm1H4f6/KD5gG+6VFMM6EXV7vq85BvEf8CRsnA0+auWfA29/S8gbWI0Ew==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" }, @@ -1265,14 +905,12 @@ }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1287,9 +925,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1299,9 +936,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1314,18 +950,16 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -1338,18 +972,16 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.0.0" @@ -1357,9 +989,8 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -1368,15 +999,13 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1384,8 +1013,7 @@ }, "node_modules/@js-temporal/polyfill": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.4.4.tgz", - "integrity": "sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==", + "license": "ISC", "dependencies": { "jsbi": "^4.3.0", "tslib": "^2.4.1" @@ -1396,18 +1024,15 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "license": "MIT" }, "node_modules/@multiformats/base-x": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" + "license": "MIT" }, "node_modules/@multiformats/murmur3": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.1.8.tgz", - "integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0", "murmurhash3js-revisited": "^3.0.0" @@ -1419,21 +1044,18 @@ }, "node_modules/@multiformats/murmur3/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/@noble/ciphers": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", - "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.3" }, @@ -1443,19 +1065,17 @@ }, "node_modules/@noble/ed25519": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-2.0.0.tgz", - "integrity": "sha512-/extjhkwFupyopDrt80OMWKdLgP429qLZj+z6sYJz90rF2Iz0gjZh2ArMKPImUl13Kx+0EXI2hN9T/KJV0/Zng==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@noble/hashes": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -1465,20 +1085,18 @@ }, "node_modules/@noble/secp256k1": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", - "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1489,18 +1107,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1511,9 +1127,8 @@ }, "node_modules/@npmcli/git": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", - "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", @@ -1530,9 +1145,8 @@ }, "node_modules/@npmcli/package-json": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -1548,9 +1162,8 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", - "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "dev": true, + "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -1560,9 +1173,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1570,9 +1182,8 @@ }, "node_modules/@playwright/test": { "version": "1.40.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", - "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright": "1.40.1" }, @@ -1585,9 +1196,8 @@ }, "node_modules/@puppeteer/browsers": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -1614,15 +1224,13 @@ }, "node_modules/@puppeteer/browsers/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@puppeteer/browsers/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1634,9 +1242,8 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-fs": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -1645,9 +1252,8 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -1656,9 +1262,8 @@ }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1674,9 +1279,8 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1699,9 +1303,8 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1719,198 +1322,38 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", - "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", - "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", - "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", - "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", - "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", - "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", - "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", - "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", - "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", - "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", - "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", - "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", - "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sinonjs/commons": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", @@ -1919,23 +1362,20 @@ }, "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true + "dev": true, + "license": "(Unlicense OR Apache-2.0)" }, "node_modules/@smithy/abort-controller": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1946,8 +1386,7 @@ }, "node_modules/@smithy/config-resolver": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", - "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", @@ -1961,8 +1400,7 @@ }, "node_modules/@smithy/core": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", - "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^2.4.1", "@smithy/middleware-retry": "^2.1.1", @@ -1979,8 +1417,7 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", - "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/property-provider": "^2.1.1", @@ -1994,8 +1431,7 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", - "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@smithy/types": "^2.9.1", @@ -2005,8 +1441,7 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", - "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^3.1.1", "@smithy/querystring-builder": "^2.1.1", @@ -2017,8 +1452,7 @@ }, "node_modules/@smithy/hash-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", - "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "@smithy/util-buffer-from": "^2.1.1", @@ -2031,8 +1465,7 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", - "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2040,8 +1473,7 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", - "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2051,8 +1483,7 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", - "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", @@ -2064,8 +1495,7 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", - "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^2.1.1", "@smithy/node-config-provider": "^2.2.1", @@ -2081,8 +1511,7 @@ }, "node_modules/@smithy/middleware-retry": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", - "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", @@ -2100,8 +1529,7 @@ }, "node_modules/@smithy/middleware-serde": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", - "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2112,8 +1540,7 @@ }, "node_modules/@smithy/middleware-stack": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", - "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2124,8 +1551,7 @@ }, "node_modules/@smithy/node-config-provider": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", - "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -2138,8 +1564,7 @@ }, "node_modules/@smithy/node-http-handler": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", - "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^2.1.1", "@smithy/protocol-http": "^3.1.1", @@ -2153,8 +1578,7 @@ }, "node_modules/@smithy/property-provider": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", - "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2165,8 +1589,7 @@ }, "node_modules/@smithy/protocol-http": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", - "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2177,8 +1600,7 @@ }, "node_modules/@smithy/querystring-builder": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", - "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "@smithy/util-uri-escape": "^2.1.1", @@ -2190,8 +1612,7 @@ }, "node_modules/@smithy/querystring-parser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", - "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2202,8 +1623,7 @@ }, "node_modules/@smithy/service-error-classification": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", - "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1" }, @@ -2213,8 +1633,7 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", - "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2225,8 +1644,7 @@ }, "node_modules/@smithy/signature-v4": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", - "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", + "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-codec": "^2.1.1", "@smithy/is-array-buffer": "^2.1.1", @@ -2243,8 +1661,7 @@ }, "node_modules/@smithy/smithy-client": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", - "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^2.4.1", "@smithy/middleware-stack": "^2.1.1", @@ -2259,8 +1676,7 @@ }, "node_modules/@smithy/types": { "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", - "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2270,8 +1686,7 @@ }, "node_modules/@smithy/url-parser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", - "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", + "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^2.1.1", "@smithy/types": "^2.9.1", @@ -2280,8 +1695,7 @@ }, "node_modules/@smithy/util-base64": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", - "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.1.1", "tslib": "^2.5.0" @@ -2292,16 +1706,14 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", - "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/util-body-length-node": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", - "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2311,8 +1723,7 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", - "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.1.1", "tslib": "^2.5.0" @@ -2323,8 +1734,7 @@ }, "node_modules/@smithy/util-config-provider": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", - "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2334,8 +1744,7 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", - "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^2.1.1", "@smithy/smithy-client": "^2.3.1", @@ -2349,8 +1758,7 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", - "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", + "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^2.1.1", "@smithy/credential-provider-imds": "^2.2.1", @@ -2366,8 +1774,7 @@ }, "node_modules/@smithy/util-endpoints": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", - "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", @@ -2379,8 +1786,7 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", - "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2390,8 +1796,7 @@ }, "node_modules/@smithy/util-middleware": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", - "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -2402,8 +1807,7 @@ }, "node_modules/@smithy/util-retry": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", - "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", + "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^2.1.1", "@smithy/types": "^2.9.1", @@ -2415,8 +1819,7 @@ }, "node_modules/@smithy/util-stream": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", - "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^2.4.1", "@smithy/node-http-handler": "^2.3.1", @@ -2433,8 +1836,7 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", - "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" }, @@ -2444,8 +1846,7 @@ }, "node_modules/@smithy/util-utf8": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", - "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.1.1", "tslib": "^2.5.0" @@ -2456,8 +1857,7 @@ }, "node_modules/@sphereon/pex": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sphereon/pex/-/pex-2.1.0.tgz", - "integrity": "sha512-108iEqbu6D421pK9Q6bq4wnWcL8V+fEtw4Ry6NhBidIlDHuJehdLM8Z70A/axgNYMB1C0smMDYt1Xur/ROLwvQ==", + "license": "Apache-2.0", "dependencies": { "@astronautlabs/jsonpath": "^1.1.2", "@sphereon/pex-models": "^2.0.3", @@ -2474,21 +1874,18 @@ }, "node_modules/@sphereon/pex-models": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.1.5.tgz", - "integrity": "sha512-7THexvdYUK/Dh8olBB46ErT9q/RnecnMdb5r2iwZ6be0Dt4vQLAUN7QU80H0HZBok4jRTb8ydt12x0raBSTHOg==" + "license": "Apache-2.0" }, "node_modules/@sphereon/ssi-types": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.13.0.tgz", - "integrity": "sha512-THzkvgY6AN4/0INgGowinzOFX6NeUQJ/KmAcXrBXx2Rny5v5wCp7LhBIlK21KF2/76fbiCyJvwcd/+Yeb0fjwQ==", + "license": "Apache-2.0", "dependencies": { "jwt-decode": "^3.1.2" } }, "node_modules/@tbd54566975/dwn-sdk-js": { "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sdk-js/-/dwn-sdk-js-0.2.10.tgz", - "integrity": "sha512-CoKO8+NciwWNzD4xRoAAgeElqQCXKM4Fc+zEHsUWD0M3E9v67hRWiTHI6AenUfQv1RSEB2H4GHUeUOHuEV72uw==", + "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "9.0.3", "@js-temporal/polyfill": "0.4.4", @@ -2511,72 +1908,24 @@ "randombytes": "2.1.0", "readable-stream": "4.4.2", "ulidx": "2.1.0", - "uuid": "8.3.2", - "varint": "6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@tbd54566975/dwn-sdk-js/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/@tbd54566975/dwn-sdk-js/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@tbd54566975/dwn-sdk-js/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "uuid": "8.3.2", + "varint": "6.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "engines": { + "node": ">= 18" } }, - "node_modules/@tbd54566975/dwn-sdk-js/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/@tbd54566975/dwn-sdk-js/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/@tbd54566975/dwn-sdk-js/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node_modules/@tbd54566975/dwn-sdk-js/node_modules/lru-cache": { + "version": "9.1.2", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" } }, "node_modules/@tbd54566975/dwn-sql-store": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sql-store/-/dwn-sql-store-0.2.6.tgz", - "integrity": "sha512-N5SSyKGgHoW7ttWW6xrPq4xK7aYfxDvrmXdYEi+eA3qlT+Wzi5HZfrlcSnFIHee9+s56V6WpJw1AQ6XmjZH2QQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "^9.0.5", "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -2589,10 +1938,9 @@ } }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.8.tgz", - "integrity": "sha512-ETWJ7p7lmGw5X+BuI/7rf4/k56xyOvAOVNUVuQmnGYBdJjObLPgS+vyFxRk4odATlkyZqCq2MLNY52bhE6SlRA==", + "version": "9.1.0", "dev": true, + "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^4.0.0", "multiformats": "^13.0.0" @@ -2604,24 +1952,21 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==", - "dev": true + "dev": true, + "license": "Apache-2.0 OR MIT" }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/cborg": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", - "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==", "dev": true, + "license": "Apache-2.0", "bin": { "cborg": "lib/bin.js" } }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/multiformats": { "version": "12.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.0.1.tgz", - "integrity": "sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==", "dev": true, + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -2629,39 +1974,34 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/babel__code-frame": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz", - "integrity": "sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/bencode": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.4.tgz", - "integrity": "sha512-sirDu3HUSG7jZMlhTDvCzSFiPR4lkUYBQA75CoMi6DEf2alFZWJWtHgfjBbb9PachPZhPMB1IlH09deyMNBipQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2669,24 +2009,21 @@ }, "node_modules/@types/chai": { "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/chai-as-promised": { "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "*" } }, "node_modules/@types/co-body": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.3.tgz", - "integrity": "sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*" @@ -2694,36 +2031,31 @@ }, "node_modules/@types/command-line-args": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/content-disposition": { "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", - "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/convert-source-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-2.0.3.tgz", - "integrity": "sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cookies": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.10.tgz", - "integrity": "sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==", + "version": "0.9.0", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -2733,24 +2065,21 @@ }, "node_modules/@types/debounce": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.4.tgz", - "integrity": "sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/dns-packet": { "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.4.tgz", - "integrity": "sha512-R0ORTvCCeujG+upKfV4JlvozKLdQWlpsducXGd1L6ezBChwpjSj9K84F+KoMDsZQ9RhOLTR1hnNrwJHWagY24g==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2758,9 +2087,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/eslint": "*", @@ -2769,15 +2097,13 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2786,10 +2112,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "version": "4.17.42", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2799,57 +2124,49 @@ }, "node_modules/@types/http-assert": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", - "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keygrip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", - "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/koa": { "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", - "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", "dev": true, + "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -2863,63 +2180,54 @@ }, "node_modules/@types/koa-compose": { "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", - "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.6.tgz", - "integrity": "sha512-+EOokTnksGVgip2PbYbr3xnR7kZigh4LbybAfBAw5BpnQ+FqBYUsvCEjYd70IXKlbohQ64mzEYmMtlWUY8q//Q==", + "version": "20.11.13", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/parse5": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/readable-stream": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.6.tgz", - "integrity": "sha512-awa7+N1SSD9xz8ZvEUSO3/N3itc2PMH6Sca11HiX55TVsWiMaIgmbM76lN+2eZOrCQPiFqj0GmgsfsNtNGWoUw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -2927,21 +2235,18 @@ }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2949,9 +2254,8 @@ }, "node_modules/@types/serve-static": { "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -2960,33 +2264,29 @@ }, "node_modules/@types/sinon": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", - "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", "dev": true, + "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -2994,9 +2294,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", - "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.4.0", @@ -3028,16 +2327,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz", - "integrity": "sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==", + "version": "6.20.0", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.19.1", - "@typescript-eslint/types": "6.19.1", - "@typescript-eslint/typescript-estree": "6.19.1", - "@typescript-eslint/visitor-keys": "6.19.1", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4" }, "engines": { @@ -3057,14 +2355,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz", - "integrity": "sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==", + "version": "6.20.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.19.1", - "@typescript-eslint/visitor-keys": "6.19.1" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3075,13 +2372,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", - "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "version": "6.20.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/types": "6.20.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3094,9 +2390,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", - "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0" @@ -3111,9 +2406,8 @@ }, "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3124,9 +2418,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", - "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.4.0", "@typescript-eslint/utils": "6.4.0", @@ -3151,9 +2444,8 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3164,9 +2456,8 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -3190,10 +2481,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz", - "integrity": "sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==", + "version": "6.20.0", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3204,14 +2494,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz", - "integrity": "sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==", + "version": "6.20.0", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.19.1", - "@typescript-eslint/visitor-keys": "6.19.1", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3233,13 +2522,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz", - "integrity": "sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==", + "version": "6.20.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "6.19.1", + "@typescript-eslint/types": "6.20.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3252,9 +2540,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", - "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -3277,9 +2564,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3290,9 +2576,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -3317,9 +2602,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", - "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "eslint-visitor-keys": "^3.4.1" @@ -3334,9 +2618,8 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3347,16 +2630,14 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/@web/browser-logs": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", - "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", "dev": true, + "license": "MIT", "dependencies": { "errorstacks": "^2.2.0" }, @@ -3366,23 +2647,21 @@ }, "node_modules/@web/config-loader": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.3.1.tgz", - "integrity": "sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/@web/dev-server": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.4.1.tgz", - "integrity": "sha512-GHeyH8MBZQpODFiHiXAdX4hOVbeDyD/DUermUinh/nexWAZUcXyXa200RItuAL6b25MQ3D/5hKNDypujSvXxiw==", + "version": "0.4.2", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", "@web/config-loader": "^0.3.0", - "@web/dev-server-core": "^0.7.0", + "@web/dev-server-core": "^0.7.1", "@web/dev-server-rollup": "^0.6.1", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", @@ -3403,10 +2682,9 @@ } }, "node_modules/@web/dev-server-core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", - "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", + "version": "0.7.1", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", @@ -3433,18 +2711,16 @@ }, "node_modules/@web/dev-server-core/node_modules/lru-cache": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/dev-server-rollup": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.1.tgz", - "integrity": "sha512-vhtsQ8qu1pBHailOBOYJwZnYDc1Lmx6ZAd2j+y5PD2ck0R1LmVsZ7dZK8hDCpkvpvlu2ndURjL9tbzdcsBRJmg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.0", @@ -3459,9 +2735,8 @@ }, "node_modules/@web/parse5-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz", - "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse5": "^6.0.1", "parse5": "^6.0.1" @@ -3472,9 +2747,8 @@ }, "node_modules/@web/test-runner": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.0.tgz", - "integrity": "sha512-aAlQrdSqwCie1mxuSK5kM0RYDJZL4Q0Hd5LeXn1on3OtHLtgztL4dZzzNSuAWablR2/Vuve3ChwDDxmYSTqXRg==", "dev": true, + "license": "MIT", "dependencies": { "@web/browser-logs": "^0.4.0", "@web/config-loader": "^0.3.0", @@ -3503,9 +2777,8 @@ }, "node_modules/@web/test-runner-chrome": { "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.15.0.tgz", - "integrity": "sha512-ZqkTJGQ57FDz3lWw+9CKfHuTV64S9GzBy5+0siSQulEVPfGiTzpksx9DohtA3BCLXdbEq4OHg40/XIQJomlc9w==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -3519,9 +2792,8 @@ }, "node_modules/@web/test-runner-commands": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", - "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "mkdirp": "^1.0.4" @@ -3532,9 +2804,8 @@ }, "node_modules/@web/test-runner-core": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", - "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/babel__code-frame": "^7.0.2", @@ -3569,9 +2840,8 @@ }, "node_modules/@web/test-runner-coverage-v8": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz", - "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "istanbul-lib-coverage": "^3.0.0", @@ -3585,18 +2855,16 @@ }, "node_modules/@web/test-runner-coverage-v8/node_modules/lru-cache": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/test-runner-mocha": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz", - "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0" }, @@ -3606,9 +2874,8 @@ }, "node_modules/@web/test-runner-playwright": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz", - "integrity": "sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -3648,8 +2915,6 @@ }, "node_modules/@web5/dwn-server": { "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@web5/dwn-server/-/dwn-server-0.1.9.tgz", - "integrity": "sha512-t1xpWGQ+hbIglu0OjZS3DG6Q8pmrxK2TmPo53YaxNpceKNT9tkqJqgssiIJzVWiQS90BmR/JULchKR/aQX1sOg==", "dev": true, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -3677,18 +2942,16 @@ }, "node_modules/@web5/dwn-server/node_modules/uuid": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@web5/dwn-server/node_modules/ws": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -3719,9 +2982,8 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -3730,30 +2992,26 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -3763,16 +3021,14 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3783,9 +3039,8 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -3793,9 +3048,8 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" @@ -3803,16 +3057,14 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3827,9 +3079,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3841,9 +3092,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3854,9 +3104,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3869,9 +3118,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3880,29 +3128,19 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, + "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, + "license": "Apache-2.0", "peer": true }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3912,8 +3150,7 @@ }, "node_modules/abstract-level": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -3929,9 +3166,8 @@ }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3942,9 +3178,8 @@ }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3954,9 +3189,8 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^8" @@ -3964,18 +3198,16 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -3985,8 +3217,7 @@ }, "node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -4000,8 +3231,7 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -4016,18 +3246,16 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4040,9 +3268,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4052,18 +3279,16 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -4073,9 +3298,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4086,23 +3310,20 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-back": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -4113,23 +3334,20 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -4148,9 +3366,8 @@ }, "node_modules/asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -4160,15 +3377,13 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/assert": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -4179,18 +3394,16 @@ }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/ast-types": { "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -4200,35 +3413,31 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-mutex": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", - "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4238,27 +3447,22 @@ }, "node_modules/b4a": { "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + "license": "ISC" }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-arraybuffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4272,21 +3476,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/basic-ftp": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", - "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/bencode": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", - "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", + "license": "MIT", "dependencies": { "uint8-util": "^2.2.2" }, @@ -4296,10 +3499,9 @@ }, "node_modules/better-sqlite3": { "version": "8.7.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.7.0.tgz", - "integrity": "sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" @@ -4307,32 +3509,27 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/bindings": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bintrees": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bittorrent-dht": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-11.0.5.tgz", - "integrity": "sha512-R09D6uNaziRqsc+B/j5QzkjceTak+wH9vcNLnkmt8A52EWF9lQwBP0vvCKgSA3AJOYYl+41n3osA2KYYn/z5uQ==", "funding": [ { "type": "github", @@ -4347,6 +3544,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "bencode": "^4.0.0", "debug": "^4.3.4", @@ -4363,8 +3561,7 @@ }, "node_modules/bl": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -4373,8 +3570,7 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4386,8 +3582,7 @@ }, "node_modules/blake2b": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", - "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", + "license": "ISC", "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" @@ -4395,8 +3590,7 @@ }, "node_modules/blake2b-wasm": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", - "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", + "license": "MIT", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -4404,8 +3598,7 @@ }, "node_modules/blockstore-core": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/blockstore-core/-/blockstore-core-4.2.0.tgz", - "integrity": "sha512-F8BCobc75D+9/+hUD+5cixbU6zmZA+lBgNiuBkNlJqRgmAaBBvLOQF6Ad9Jei0Nvmy2a1jaF4CiN76W1apIghA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "err-code": "^3.0.1", "interface-blockstore": "^5.0.0", @@ -4419,15 +3612,13 @@ }, "node_modules/bn.js": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -4449,24 +3640,21 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser/node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -4479,9 +3667,8 @@ }, "node_modules/body-parser/node_modules/raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -4494,23 +3681,20 @@ }, "node_modules/bowser": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -4520,14 +3704,12 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browser-level": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.1", @@ -4537,24 +3719,21 @@ }, "node_modules/browser-resolve": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.17.0" } }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4566,9 +3745,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -4577,9 +3755,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -4589,9 +3766,8 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -4599,9 +3775,8 @@ }, "node_modules/browserify-sign": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, + "license": "ISC", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -4619,9 +3794,8 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4633,8 +3807,6 @@ }, "node_modules/browserify-sign/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -4649,21 +3821,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, + "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.22.3", "dev": true, "funding": [ { @@ -4679,10 +3849,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -4695,8 +3866,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -4711,6 +3880,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -4718,40 +3888,35 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/buffer-writer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -4761,33 +3926,29 @@ }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtins": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/c8": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-9.0.0.tgz", - "integrity": "sha512-nFJhU2Cz6Frh2awk3IW7wwk3wx27/U2v8ojQCHGc1GWTCHS6aMu4lal327/ZnnYj7oSThGF1X3qUP1yzAJBcOQ==", "dev": true, + "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", @@ -4810,9 +3971,8 @@ }, "node_modules/cache-content-type": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -4823,8 +3983,7 @@ }, "node_modules/call-bind": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", @@ -4836,18 +3995,16 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4856,9 +4013,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001580", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz", - "integrity": "sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==", + "version": "1.0.30001581", "dev": true, "funding": [ { @@ -4874,42 +4029,38 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "CC-BY-4.0", "peer": true }, "node_modules/canonicalize": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", - "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" + "license": "Apache-2.0" }, "node_modules/catering": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cborg": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-2.0.5.tgz", - "integrity": "sha512-xVW1rSIw1ZXbkwl2XhJ7o/jAv0vnVoQv/QlfQxV8a7V5PlA4UU/AcIiXqmpyybwNWy/GPQU1m/aBVNIWr7/T0w==", + "license": "Apache-2.0", "bin": { "cborg": "cli.js" } }, "node_modules/chacha20-universal": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chacha20-universal/-/chacha20-universal-1.0.4.tgz", - "integrity": "sha512-/IOxdWWNa7nRabfe7+oF+jVkGjlr2xUL4J8l/OvzZhj+c9RpMqoo3Dq+5nU1j/BflRV4BKnaQ4+4oH1yBpQG1Q==", + "license": "ISC", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/chai": { "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -4925,9 +4076,8 @@ }, "node_modules/chai-as-promised": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, + "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -4937,9 +4087,8 @@ }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4951,9 +4100,8 @@ }, "node_modules/chalk-template": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -4966,9 +4114,8 @@ }, "node_modules/chalk-template/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4981,9 +4128,8 @@ }, "node_modules/chalk-template/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4997,9 +4143,8 @@ }, "node_modules/chalk-template/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5009,24 +4154,21 @@ }, "node_modules/chalk-template/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/chalk-template/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/chalk-template/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5036,18 +4178,16 @@ }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/check-error": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -5057,8 +4197,6 @@ }, "node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -5066,6 +4204,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5084,14 +4223,11 @@ }, "node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/chrome-dgram": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.6.tgz", - "integrity": "sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==", "funding": [ { "type": "github", @@ -5106,6 +4242,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "run-series": "^1.1.9" @@ -5113,17 +4250,15 @@ }, "node_modules/chrome-dns": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chrome-dns/-/chrome-dns-1.0.1.tgz", - "integrity": "sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==", + "license": "MIT", "dependencies": { "chrome-net": "^3.3.2" } }, "node_modules/chrome-launcher": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -5139,9 +4274,8 @@ }, "node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5151,8 +4285,6 @@ }, "node_modules/chrome-net": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/chrome-net/-/chrome-net-3.3.4.tgz", - "integrity": "sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==", "funding": [ { "type": "github", @@ -5167,15 +4299,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "inherits": "^2.0.1" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.0" @@ -5183,9 +4315,8 @@ }, "node_modules/chromium-bidi": { "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mitt": "3.0.0" }, @@ -5195,9 +4326,8 @@ }, "node_modules/cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5205,9 +4335,8 @@ }, "node_modules/classic-level": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz", - "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", @@ -5221,9 +4350,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5233,9 +4361,8 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5247,9 +4374,8 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5262,9 +4388,8 @@ }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5274,21 +4399,18 @@ }, "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5300,9 +4422,8 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5317,18 +4438,16 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -5336,9 +4455,8 @@ }, "node_modules/co-body": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", "dev": true, + "license": "MIT", "dependencies": { "inflation": "^2.0.0", "qs": "^6.5.2", @@ -5348,24 +4466,21 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/command-line-args": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -5378,9 +4493,8 @@ }, "node_modules/command-line-usage": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -5393,52 +4507,44 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -5448,8 +4554,6 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -5464,43 +4568,39 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookies": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -5511,9 +4611,8 @@ }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -5524,9 +4623,8 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -5534,15 +4632,13 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5553,9 +4649,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5567,22 +4662,19 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "4.0.0", + "license": "MIT", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5600,18 +4692,15 @@ }, "node_modules/cross-fetch/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/cross-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/cross-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -5619,9 +4708,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5633,15 +4721,13 @@ }, "node_modules/cross-spawn/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5654,18 +4740,16 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, + "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -5685,23 +4769,20 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -5716,14 +4797,12 @@ }, "node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "license": "MIT" }, "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5733,9 +4812,8 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -5748,9 +4826,8 @@ }, "node_modules/deep-eql": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, + "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -5760,37 +4837,32 @@ }, "node_modules/deep-equal": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/define-data-property": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -5802,17 +4874,15 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5827,9 +4897,8 @@ }, "node_modules/degenerator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -5841,42 +4910,37 @@ }, "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/denque": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-graph": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/des.js": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -5884,9 +4948,8 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -5894,38 +4957,33 @@ }, "node_modules/detect-libc": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/devtools-protocol": { "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/did-resolver": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" + "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -5934,15 +4992,13 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -5952,8 +5008,7 @@ }, "node_modules/dns-packet": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -5963,9 +5018,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5975,9 +5029,8 @@ }, "node_modules/domain-browser": { "version": "4.23.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", - "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", "dev": true, + "license": "Artistic-2.0", "engines": { "node": ">=10" }, @@ -5987,14 +5040,12 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eciesjs": { "version": "0.4.5", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.5.tgz", - "integrity": "sha512-2zSRIygO48LpdS95Rwt9ryIkJNO37IdbkjRsnYyAn7gx7e4WPBNimnk6jGNdx2QQYr/VJRPnSVdwQpO5bycYZw==", + "license": "MIT", "dependencies": { "@noble/ciphers": "^0.3.0", "@noble/curves": "^1.2.0", @@ -6006,30 +5057,26 @@ }, "node_modules/eciesjs/node_modules/@noble/ciphers": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.3.0.tgz", - "integrity": "sha512-ldbrnOjmNRwFdXcTM6uXDcxpMIFrbzAWNnpBPp4oTJTFF0XByGD6vf45WrehZGXRQTRVV+Zm8YP+EgEf+e4cWA==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.645", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.645.tgz", - "integrity": "sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==", + "version": "1.4.651", "dev": true, + "license": "ISC", "peer": true }, "node_modules/elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -6042,39 +5089,34 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -6086,19 +5128,16 @@ }, "node_modules/err-code": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + "license": "MIT" }, "node_modules/errorstacks": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz", - "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-abstract": { "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", @@ -6149,14 +5188,12 @@ }, "node_modules/es-module-lexer": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-set-tostringtag": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -6168,8 +5205,7 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -6184,10 +5220,9 @@ }, "node_modules/esbuild": { "version": "0.19.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", - "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -6221,33 +5256,29 @@ }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -6266,9 +5297,8 @@ }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -6276,9 +5306,8 @@ }, "node_modules/eslint": { "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -6332,9 +5361,8 @@ }, "node_modules/eslint-plugin-mocha": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz", - "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==", "dev": true, + "license": "MIT", "dependencies": { "eslint-utils": "^3.0.0", "rambda": "^7.1.0" @@ -6348,9 +5376,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6364,9 +5391,8 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -6382,18 +5408,16 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6403,9 +5427,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6420,9 +5443,8 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-convert": "^2.0.1" @@ -6436,9 +5458,8 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -6447,9 +5468,8 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -6464,9 +5484,8 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-name": "~1.1.4" @@ -6477,16 +5496,14 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -6497,9 +5514,8 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.3" @@ -6510,9 +5526,8 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -6520,16 +5535,14 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -6540,9 +5553,8 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -6553,9 +5565,8 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -6570,8 +5581,7 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6582,9 +5592,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6594,9 +5603,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6606,62 +5614,54 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6669,18 +5669,16 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, + "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/express": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -6720,24 +5718,21 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express/node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -6750,8 +5745,6 @@ }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -6766,13 +5759,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -6790,9 +5783,8 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -6805,20 +5797,17 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6832,19 +5821,15 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "license": "MIT" }, "node_modules/fast-xml-parser": { "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ { "type": "paypal", @@ -6855,6 +5840,7 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -6863,27 +5849,23 @@ } }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.0", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -6895,6 +5877,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -6905,9 +5888,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6917,15 +5899,13 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6935,9 +5915,8 @@ }, "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -6953,24 +5932,21 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -6980,9 +5956,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6996,18 +5971,15 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -7019,9 +5991,8 @@ }, "node_modules/flat-cache/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7029,9 +6000,8 @@ }, "node_modules/flat-cache/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7049,9 +6019,8 @@ }, "node_modules/flat-cache/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7061,9 +6030,8 @@ }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7076,23 +6044,20 @@ }, "node_modules/flatted": { "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -7106,9 +6071,8 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -7118,33 +6082,29 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -7156,16 +6116,13 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7176,16 +6133,14 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7201,43 +6156,38 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/generate-function": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "dev": true, + "license": "MIT", "dependencies": { "is-property": "^1.0.2" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", @@ -7250,9 +6200,8 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7262,8 +6211,7 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -7277,9 +6225,8 @@ }, "node_modules/get-uri": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", - "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.0", @@ -7292,24 +6239,21 @@ }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", - "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/glob": { "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -7329,9 +6273,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7341,16 +6284,14 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, + "license": "BSD-2-Clause", "peer": true }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7363,8 +6304,7 @@ }, "node_modules/globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -7377,9 +6317,8 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7397,8 +6336,7 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -7408,28 +6346,24 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graceful-goodbye": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/graceful-goodbye/-/graceful-goodbye-1.3.0.tgz", - "integrity": "sha512-hcZOs20emYlTM7MmUE0FpuZcjlk2GPsR+UYTHDeWxtGjXcbh2CawGi8vlzqsIvspqAbot7mRv3sC/uhgtKc4hQ==", + "license": "MIT", "dependencies": { "safety-catch": "^1.0.2" } }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hamt-sharding": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.2.tgz", - "integrity": "sha512-f0DzBD2tSmLFdFsLAvOflIBqFPjerbA7BfmwO8mVho/5hXwgyyYhv+ijIzidQf/DpDX3bRjAQvhGoBFj+DBvPw==", + "license": "Apache-2.0 OR MIT", "dependencies": { "sparse-array": "^1.3.1", "uint8arrays": "^4.0.2" @@ -7441,25 +6375,22 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2" }, @@ -7469,8 +6400,7 @@ }, "node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7480,8 +6410,7 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7491,8 +6420,7 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7505,9 +6433,8 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -7519,9 +6446,8 @@ }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7533,8 +6459,6 @@ }, "node_modules/hash-base/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -7549,18 +6473,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/hash-wasm": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", - "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" + "license": "MIT" }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -7568,8 +6491,7 @@ }, "node_modules/hasown": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7579,18 +6501,16 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -7599,9 +6519,8 @@ }, "node_modules/hosted-git-info": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -7611,15 +6530,13 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, + "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -7630,18 +6547,16 @@ }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-assert/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7655,18 +6570,16 @@ }, "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7680,9 +6593,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -7693,15 +6605,13 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -7712,9 +6622,8 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7724,8 +6633,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -7739,22 +6646,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7768,27 +6674,24 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflation": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", - "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7796,19 +6699,16 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/interface-blockstore": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.2.3.tgz", - "integrity": "sha512-15cN+ZFdcVXdXo6I/SrSzFDsuJyDTyEI52XuvXQlR/G5fe3cK8p0tvVjfu5diRQH1XqNgmJEdMPixyt0xgjtvQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "interface-store": "^5.0.0", "multiformats": "^11.0.2" @@ -7820,8 +6720,7 @@ }, "node_modules/interface-store": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.2.tgz", - "integrity": "sha512-q2sLoqC+UdaWnjwGyghsH0jwqqVk226lsG207e3QwPB8sAZYmYIWUnJwJH3JjFNNRV9e6CUTmm+gDO0Xg4KRiw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -7829,8 +6728,7 @@ }, "node_modules/internal-slot": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", @@ -7842,23 +6740,20 @@ }, "node_modules/ip": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/ipfs-unixfs": { "version": "11.1.3", - "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.1.3.tgz", - "integrity": "sha512-sy6Koojwm/EcM8yvDlycRYA89C8wIcLcGTMMpqnCPUtqTCdl+JxsuPNCBgAu7tmO8Nipm7Tv7f0g/erxTGKKRA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "err-code": "^3.0.1", "protons-runtime": "^5.0.0", @@ -7867,8 +6762,7 @@ }, "node_modules/ipfs-unixfs-exporter": { "version": "13.1.5", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.1.5.tgz", - "integrity": "sha512-O5aMawsHoe4DaYk5FFil2EPrNOaU3pkHC6qUR5JMnW7es93W3b/RjJoO7AyDL1rpb+M3K0oRu86Yc5wLNQQ8jg==", + "license": "Apache-2.0 OR MIT", "dependencies": { "@ipld/dag-cbor": "^9.0.0", "@ipld/dag-pb": "^4.0.0", @@ -7895,8 +6789,7 @@ }, "node_modules/ipfs-unixfs-importer": { "version": "15.1.5", - "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.1.5.tgz", - "integrity": "sha512-TXaOI0M5KNpq2+qLw8AIYd0Lnc0gWTKCBqUd9eErBUwaP3Fna4qauF+JX9Rj2UrwaOvG/1xbF8Vm+92eOcKWMA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "@ipld/dag-pb": "^4.0.0", "@multiformats/murmur3": "^2.0.0", @@ -7922,9 +6815,8 @@ }, "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7938,8 +6830,7 @@ }, "node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -7951,8 +6842,7 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -7962,9 +6852,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7974,8 +6863,7 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7989,8 +6877,6 @@ }, "node_modules/is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -8005,15 +6891,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -8026,8 +6912,7 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8037,9 +6922,8 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -8049,8 +6933,7 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8063,9 +6946,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -8078,27 +6960,24 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8111,9 +6990,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -8123,15 +7001,13 @@ }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -8145,8 +7021,7 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8156,17 +7031,15 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8179,32 +7052,28 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-property": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8218,8 +7087,7 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -8229,9 +7097,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -8241,8 +7108,7 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8255,8 +7121,7 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -8269,8 +7134,7 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -8283,9 +7147,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8295,8 +7158,7 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -8306,9 +7168,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -8318,14 +7179,12 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "license": "MIT" }, "node_modules/isbinaryfile": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", - "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.0.0" }, @@ -8335,36 +7194,32 @@ }, "node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", - "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -8376,18 +7231,16 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8397,9 +7250,8 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -8410,73 +7262,62 @@ }, "node_modules/it-all": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz", - "integrity": "sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-batch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.4.tgz", - "integrity": "sha512-WRu2mqOYIs+T9k7+yxSK9VJdk0UE4R0jKQsWQcti5c6vhb1FhjC2+yCB5XBrctQ9edNfCMU/wVzdDj8qSwimbA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-filter": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz", - "integrity": "sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-first": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", - "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-last": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.4.tgz", - "integrity": "sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-map": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz", - "integrity": "sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-merge": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz", - "integrity": "sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-pushable": "^3.2.0" } }, "node_modules/it-parallel": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.6.tgz", - "integrity": "sha512-i7UM7I9LTkDJw3YIqXHFAPZX6CWYzGc+X3irdNrVExI4vPazrJdI7t5OqrSVN8CONXLAunCiqaSV/zZRbQR56A==", + "license": "Apache-2.0 OR MIT", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-parallel-batch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.4.tgz", - "integrity": "sha512-O1omh8ss8+UtXiMjE+8kM5C20DT0Ma4VtKVfrSHOJU0UHZ+iWBXarabzPYEp+WiuQmrv+klDPPlTZ9KaLN9xOA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-batch": "^3.0.0" } }, "node_modules/it-peekable": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz", - "integrity": "sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w==" + "license": "Apache-2.0 OR MIT" }, "node_modules/it-pipe": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", - "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "it-merge": "^3.0.0", "it-pushable": "^3.1.2", @@ -8489,16 +7330,14 @@ }, "node_modules/it-pushable": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", - "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "license": "Apache-2.0 OR MIT", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-stream-types": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", - "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -8506,9 +7345,8 @@ }, "node_modules/jackspeak": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -8524,9 +7362,8 @@ }, "node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -8539,9 +7376,8 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -8549,9 +7385,8 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -8565,15 +7400,13 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8583,67 +7416,57 @@ }, "node_modules/jsbi": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", - "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" + "license": "Apache-2.0" }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/just-extend": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jwt-decode": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + "license": "MIT" }, "node_modules/k-bucket": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", - "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", + "license": "MIT", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/k-rpc": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-5.1.0.tgz", - "integrity": "sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==", + "license": "MIT", "dependencies": { "k-bucket": "^5.0.0", "k-rpc-socket": "^1.7.2", @@ -8652,8 +7475,7 @@ }, "node_modules/k-rpc-socket": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz", - "integrity": "sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==", + "license": "MIT", "dependencies": { "bencode": "^2.0.0", "chrome-dgram": "^3.0.2", @@ -8663,14 +7485,12 @@ }, "node_modules/k-rpc-socket/node_modules/bencode": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.3.tgz", - "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==" + "license": "MIT" }, "node_modules/keygrip": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, + "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -8680,18 +7500,16 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/koa": { "version": "2.15.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.0.tgz", - "integrity": "sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -8723,15 +7541,13 @@ }, "node_modules/koa-compose": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/koa-convert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, + "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -8742,18 +7558,16 @@ }, "node_modules/koa-etag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", - "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", "dev": true, + "license": "MIT", "dependencies": { "etag": "^1.8.1" } }, "node_modules/koa-send": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "http-errors": "^1.7.3", @@ -8765,18 +7579,16 @@ }, "node_modules/koa-send/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-send/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -8790,18 +7602,16 @@ }, "node_modules/koa-send/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-static": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.1.0", "koa-send": "^5.0.0" @@ -8812,18 +7622,16 @@ }, "node_modules/koa-static/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/koa/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -8837,45 +7645,39 @@ }, "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/kysely": { "version": "0.26.3", - "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.3.tgz", - "integrity": "sha512-yWSgGi9bY13b/W06DD2OCDDHQmq1kwTGYlQ4wpZkMOJqMGCstVCFIvxCCVG4KfY1/3G0MhDAcZsip/Lw8/vJWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/last-one-wins": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", - "integrity": "sha512-t+KLJFkHPQk8lfN6WBOiGkiUXoub+gnb2XTYI2P3aiISL+94xgZ1vgz1SXN/N4hthuOoLXarXfBZPUruyjQtfA==" + "license": "MIT" }, "node_modules/layerr": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-2.0.1.tgz", - "integrity": "sha512-z0730CwG/JO24evdORnyDkwG1Q7b7mF2Tp1qRQ0YvrMMARbt1DFG694SOv439Gm7hYKolyZyaB49YIrYIfZBdg==" + "license": "MIT" }, "node_modules/level": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "license": "MIT", "dependencies": { "browser-level": "^1.0.1", "classic-level": "^1.2.0" @@ -8890,16 +7692,14 @@ }, "node_modules/level-supports": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/level-transcoder": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "module-error": "^1.0.1" @@ -8910,9 +7710,8 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8923,9 +7722,8 @@ }, "node_modules/lighthouse-logger": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -8933,24 +7731,21 @@ }, "node_modules/lighthouse-logger/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loader-runner": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -8958,9 +7753,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8973,38 +7767,32 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash.assignwith": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -9018,9 +7806,8 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9033,9 +7820,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9049,9 +7835,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9061,24 +7846,21 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9088,9 +7870,8 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -9106,9 +7887,8 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9121,9 +7901,8 @@ }, "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9133,21 +7912,18 @@ }, "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9159,9 +7935,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9172,10 +7947,9 @@ } }, "node_modules/loglevel": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.0.tgz", - "integrity": "sha512-R2gzz0NRm1QSQLu7IiNVXzvudxLbzF9G3EmwWbg5kYiCPyLVo7mGrvilTxDq/zisq9thJ1c6lb9ImMF/xPstcA==", + "version": "1.9.1", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -9186,29 +7960,25 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/long": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lru": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", - "integrity": "sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1" }, @@ -9217,19 +7987,17 @@ } }, "node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.0", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -9242,15 +8010,13 @@ }, "node_modules/marky": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/md5": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -9259,9 +8025,8 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -9270,55 +8035,48 @@ }, "node_modules/md5/node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -9329,9 +8087,8 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -9342,15 +8099,13 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9360,18 +8115,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -9381,18 +8134,16 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9402,21 +8153,18 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9429,32 +8177,28 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -9464,15 +8208,13 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -9510,9 +8252,8 @@ }, "node_modules/mocha-junit-reporter": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", - "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "md5": "^2.3.0", @@ -9526,9 +8267,8 @@ }, "node_modules/mocha-junit-reporter/node_modules/mkdirp": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -9541,9 +8281,8 @@ }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9556,9 +8295,8 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -9567,9 +8305,8 @@ }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9579,30 +8316,26 @@ }, "node_modules/mocha/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9612,9 +8345,8 @@ }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9632,9 +8364,8 @@ }, "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9642,9 +8373,8 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9654,18 +8384,16 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9675,9 +8403,8 @@ }, "node_modules/mocha/node_modules/nanoid": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9687,9 +8414,8 @@ }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9701,9 +8427,8 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9716,9 +8441,8 @@ }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9733,9 +8457,8 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9751,31 +8474,26 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/module-error": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "license": "MIT" }, "node_modules/multibase": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", - "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", - "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", "dependencies": { "@multiformats/base-x": "^4.0.1" }, @@ -9786,8 +8504,7 @@ }, "node_modules/multiformats": { "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -9795,8 +8512,7 @@ }, "node_modules/multihashes": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", - "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", + "license": "MIT", "dependencies": { "multibase": "^4.0.1", "uint8arrays": "^3.0.0", @@ -9809,35 +8525,30 @@ }, "node_modules/multihashes/node_modules/multiformats": { "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + "license": "(Apache-2.0 AND MIT)" }, "node_modules/multihashes/node_modules/uint8arrays": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/multihashes/node_modules/varint": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "license": "MIT" }, "node_modules/murmurhash3js-revisited": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", - "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/mysql2": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.8.0.tgz", - "integrity": "sha512-rC9J/Wy9TCaoQWhk/p4J0Jd+WCDYghniuawi7pheDqhQOEJyDfiWGiWOR3iPgTFJaOK3GezC7dmCki7cP1HFkQ==", + "version": "3.9.1", "dev": true, + "license": "MIT", "dependencies": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -9854,9 +8565,8 @@ }, "node_modules/mysql2/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -9866,18 +8576,16 @@ }, "node_modules/mysql2/node_modules/lru-cache": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, + "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/named-placeholders": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", - "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "^7.14.1" }, @@ -9887,34 +8595,30 @@ }, "node_modules/named-placeholders/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/nanoassert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", - "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" + "license": "ISC" }, "node_modules/nanocolors": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", - "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9924,51 +8628,44 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/napi-macros": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/nise": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.7.tgz", - "integrity": "sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==", + "version": "5.1.9", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", @@ -9979,24 +8676,21 @@ }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", - "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/nise/node_modules/path-to-regexp": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-abi": { "version": "3.54.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", - "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -10006,8 +8700,6 @@ }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -10019,15 +8711,15 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dev": true, + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -10043,8 +8735,7 @@ }, "node_modules/node-gyp-build": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -10053,16 +8744,14 @@ }, "node_modules/node-releases": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/node-stdlib-browser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", - "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^2.0.0", "browser-resolve": "^2.0.0", @@ -10098,8 +8787,6 @@ }, "node_modules/node-stdlib-browser/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -10115,6 +8802,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -10122,9 +8810,8 @@ }, "node_modules/node-stdlib-browser/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10136,9 +8823,8 @@ }, "node_modules/normalize-package-data": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -10151,18 +8837,16 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-install-checks": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -10172,18 +8856,16 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", @@ -10196,9 +8878,8 @@ }, "node_modules/npm-pick-manifest": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -10211,26 +8892,23 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -10244,16 +8922,14 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -10269,9 +8945,8 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -10281,27 +8956,24 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -10314,15 +8986,12 @@ }, "node_modules/only": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", "dev": true }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -10337,9 +9006,8 @@ }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -10354,14 +9022,12 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/p-defer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", - "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -10371,9 +9037,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10386,9 +9051,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -10401,8 +9065,7 @@ }, "node_modules/p-queue": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", - "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^5.0.2" @@ -10416,8 +9079,7 @@ }, "node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -10427,9 +9089,8 @@ }, "node_modules/pac-proxy-agent": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", @@ -10446,9 +9107,8 @@ }, "node_modules/pac-resolver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", - "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "ip": "^1.1.8", @@ -10460,21 +9120,18 @@ }, "node_modules/packet-reader": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10484,9 +9141,8 @@ }, "node_modules/parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, + "license": "ISC", "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -10497,63 +9153,55 @@ }, "node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -10567,33 +9215,29 @@ }, "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -10607,15 +9251,13 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", - "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -10642,55 +9284,48 @@ }, "node_modules/pg-cloudflare": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", - "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg-cursor": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.10.3.tgz", - "integrity": "sha512-rDyBVoqPVnx/PTmnwQAYgusSeAKlTL++gmpf5klVK+mYMFEqsOc6VHHZnPKc/4lOvr4r6fiMuoxSFuBF1dx4FQ==", "dev": true, + "license": "MIT", "peerDependencies": { "pg": "^8" } }, "node_modules/pg-int8": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", "dev": true, + "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-pool": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "dev": true, + "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "dev": true, + "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -10704,25 +9339,22 @@ }, "node_modules/pgpass": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "dev": true, + "license": "MIT", "dependencies": { "split2": "^4.1.0" } }, "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true, + "license": "ISC", "peer": true }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10732,8 +9364,7 @@ }, "node_modules/pkarr": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkarr/-/pkarr-1.1.1.tgz", - "integrity": "sha512-X27LKqf83X3WuJd2Z9qdfVxkmfOu6HUbY0pm11LqeBbFmgmZRPgOxJG8bKiIsmmD6Vjc25j45KHYflF2lfodyQ==", + "license": "MIT", "dependencies": { "bencode": "^3.0.3", "bittorrent-dht": "^11.0.4", @@ -10749,8 +9380,7 @@ }, "node_modules/pkarr/node_modules/bencode": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bencode/-/bencode-3.1.1.tgz", - "integrity": "sha512-btsxX9201yoWh45TdqYg6+OZ5O1xTYKTYSGvJndICDFtznE/9zXgow8yjMvvhOqKKuzuL7h+iiCMpfkG8+QuBA==", + "license": "MIT", "dependencies": { "uint8-util": "^2.1.6" }, @@ -10760,8 +9390,7 @@ }, "node_modules/pkarr/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -10771,9 +9400,8 @@ }, "node_modules/pkg-dir": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -10783,9 +9411,8 @@ }, "node_modules/playwright": { "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", - "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.40.1" }, @@ -10801,9 +9428,8 @@ }, "node_modules/playwright-core": { "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", - "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -10813,10 +9439,8 @@ }, "node_modules/playwright/node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -10827,9 +9451,8 @@ }, "node_modules/portfinder": { "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, + "license": "MIT", "dependencies": { "async": "^2.6.4", "debug": "^3.2.7", @@ -10841,18 +9464,16 @@ }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/portfinder/node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -10862,36 +9483,32 @@ }, "node_modules/postgres-array": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/postgres-bytea": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-date": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-interval": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "dev": true, + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -10901,9 +9518,8 @@ }, "node_modules/prebuild-install": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, + "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -10927,43 +9543,38 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/proc-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/progress-events": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.0.tgz", - "integrity": "sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -10971,9 +9582,8 @@ }, "node_modules/prom-client": { "version": "14.2.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", - "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tdigest": "^0.1.1" }, @@ -10983,15 +9593,13 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -11002,37 +9610,33 @@ }, "node_modules/promise-retry/node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/protons-runtime": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.2.2.tgz", - "integrity": "sha512-o97rNPN9pE3cxOxjs/waZNRKlbY/DR11oc20rUvarWZgFzQLLLzJU0RFh5JPi6GJCN67VGVn9/FDIEtFblfB3A==", + "version": "5.3.0", + "license": "Apache-2.0 OR MIT", "dependencies": { + "uint8-varint": "^2.0.2", "uint8arraylist": "^2.4.3", "uint8arrays": "^5.0.1" } }, "node_modules/protons-runtime/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/protons-runtime/node_modules/uint8arrays": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", - "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -11043,9 +9647,8 @@ }, "node_modules/proxy-agent": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -11062,24 +9665,21 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -11091,15 +9691,13 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -11107,15 +9705,13 @@ }, "node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/puppeteer-core": { "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", @@ -11136,62 +9732,10 @@ } } }, - "node_modules/puppeteer-core/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/puppeteer-core/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/puppeteer-core/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/puppeteer-core/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -11210,9 +9754,8 @@ }, "node_modules/qs": { "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -11225,8 +9768,6 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" @@ -11234,8 +9775,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -11249,18 +9788,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rabin-wasm": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", - "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", + "license": "MIT", "dependencies": { "@assemblyscript/loader": "^0.9.4", "bl": "^5.0.0", @@ -11275,8 +9813,7 @@ }, "node_modules/rabin-wasm/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11294,8 +9831,7 @@ }, "node_modules/rabin-wasm/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11307,18 +9843,15 @@ }, "node_modules/rabin-wasm/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/rabin-wasm/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/rabin-wasm/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -11326,23 +9859,20 @@ }, "node_modules/rambda": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", - "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -11350,18 +9880,16 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -11374,9 +9902,8 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -11389,17 +9916,15 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/readable-stream": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -11413,8 +9938,7 @@ }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "license": "MIT", "dependencies": { "readable-stream": "^3.6.0" }, @@ -11428,8 +9952,7 @@ }, "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11441,9 +9964,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -11453,16 +9975,14 @@ }, "node_modules/record-cache": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.2.0.tgz", - "integrity": "sha512-kyy3HWCez2WrotaL3O4fTn0rsIdfRKOdQQcEJ9KpvmKmbffKVvwsloX063EgRUlpJIXHiDQFhJcTbZequ2uTZw==", + "license": "MIT", "dependencies": { "b4a": "^1.3.1" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11477,26 +9997,23 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -11511,18 +10028,16 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-path": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, + "license": "MIT", "dependencies": { "http-errors": "~1.6.2", "path-is-absolute": "1.0.1" @@ -11533,18 +10048,16 @@ }, "node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/resolve-path/node_modules/http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -11557,30 +10070,26 @@ }, "node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve-path/node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve-path/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/response-time": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", - "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.0", "on-headers": "~1.0.1" @@ -11591,18 +10100,16 @@ }, "node_modules/response-time/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11613,24 +10120,21 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -11638,9 +10142,8 @@ }, "node_modules/rimraf": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", - "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -11656,9 +10159,8 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -11674,9 +10176,8 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11689,18 +10190,16 @@ }, "node_modules/rimraf/node_modules/minipass": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -11708,9 +10207,8 @@ }, "node_modules/rollup": { "version": "4.9.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", - "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -11740,8 +10238,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -11757,14 +10253,13 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-parallel-limit": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "funding": [ { "type": "github", @@ -11779,14 +10274,13 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-series": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", "funding": [ { "type": "github", @@ -11800,12 +10294,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-array-concat": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", @@ -11821,13 +10315,11 @@ }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", @@ -11842,20 +10334,17 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safety-catch": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safety-catch/-/safety-catch-1.0.2.tgz", - "integrity": "sha512-C1UYVZ4dtbBxEtvOcpjBaaD27nP8MlvyAQEp2fOTOEe6pfUpk1cDUxij6BR1jZup6rSyUTaBBplK7LanskrULA==" + "license": "MIT" }, "node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -11872,9 +10361,8 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -11889,9 +10377,8 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -11899,16 +10386,14 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/semver": { "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11921,9 +10406,8 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11933,9 +10417,8 @@ }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -11957,39 +10440,33 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/seq-queue": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", "dev": true }, "node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -12002,8 +10479,7 @@ }, "node_modules/set-function-length": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.1", "function-bind": "^1.1.2", @@ -12017,8 +10493,7 @@ }, "node_modules/set-function-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -12030,21 +10505,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -12055,8 +10527,7 @@ }, "node_modules/sha256-universal": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sha256-universal/-/sha256-universal-1.2.1.tgz", - "integrity": "sha512-ghn3muhdn1ailCQqqceNxRgkOeZSVfSE13RQWEg6njB+itsFzGVSJv+O//2hvNXZuxVIRyNzrgsZ37SPDdGJJw==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "sha256-wasm": "^2.2.1" @@ -12064,8 +10535,7 @@ }, "node_modules/sha256-wasm": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/sha256-wasm/-/sha256-wasm-2.2.2.tgz", - "integrity": "sha512-qKSGARvao+JQlFiA+sjJZhJ/61gmW/3aNLblB2rsgIxDlDxsJPHo8a1seXj12oKtuHVgJSJJ7QEGBUYQN741lQ==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -12073,8 +10543,7 @@ }, "node_modules/sha512-universal": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sha512-universal/-/sha512-universal-1.2.1.tgz", - "integrity": "sha512-kehYuigMoRkIngCv7rhgruLJNNHDnitGTBdkcYbCbooL8Cidj/bS78MDxByIjcc69M915WxcQTgZetZ1JbeQTQ==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "sha512-wasm": "^2.3.1" @@ -12082,8 +10551,7 @@ }, "node_modules/sha512-wasm": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/sha512-wasm/-/sha512-wasm-2.3.4.tgz", - "integrity": "sha512-akWoxJPGCB3aZCrZ+fm6VIFhJ/p8idBv7AWGFng/CZIrQo51oQNsvDbTSRXWAzIiZJvpy16oIDiCCPqTe21sKg==", + "license": "ISC", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -12091,9 +10559,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -12103,17 +10570,15 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12125,9 +10590,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -12137,8 +10601,6 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -12153,12 +10615,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -12174,6 +10635,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -12182,9 +10644,8 @@ }, "node_modules/sinon": { "version": "16.1.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", - "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^10.3.0", @@ -12200,18 +10661,16 @@ }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12221,26 +10680,23 @@ }, "node_modules/siphash24": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/siphash24/-/siphash24-1.3.1.tgz", - "integrity": "sha512-moemC3ZKiTzH29nbFo3Iw8fbemWWod4vNs/WgKbQ54oEs6mE6XVlguxvinYjB+UmaE0PThgyED9fUkWvirT8hA==", + "license": "MIT", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -12255,9 +10711,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12270,9 +10725,8 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12282,15 +10736,13 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -12298,9 +10750,8 @@ }, "node_modules/socks": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, + "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -12312,9 +10763,8 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -12326,14 +10776,12 @@ }, "node_modules/socks/node_modules/ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sodium-javascript": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/sodium-javascript/-/sodium-javascript-0.8.0.tgz", - "integrity": "sha512-rEBzR5mPxPES+UjyMDvKPIXy9ImF17KOJ32nJNi9uIquWpS/nfj+h6m05J5yLJaGXjgM72LmQoUbWZVxh/rmGg==", + "license": "MIT", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -12345,18 +10793,16 @@ } }, "node_modules/sodium-native": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.0.5.tgz", - "integrity": "sha512-YGimGhy7Ho6pTAAvuNdn3Tv9C2MD7HP89X1omReHat0Fd1mMnapGqwzb5YoHTAbIEh8tQmKP6+uLlwYCkf+EOA==", + "version": "4.0.6", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-gyp-build": "^4.6.0" } }, "node_modules/sodium-universal": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sodium-universal/-/sodium-universal-4.0.0.tgz", - "integrity": "sha512-iKHl8XnBV96k1c75gwwzANFdephw/MDWSjQAjPmBE+du0y3P23Q8uf7AcdcfFsYAMwLg7WVBfSAIBtV/JvRsjA==", + "license": "MIT", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -12371,29 +10817,25 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "version": "4.0.2", "dev": true, + "license": "MIT", "dependencies": { - "abab": "^2.0.6", "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" }, @@ -12410,9 +10852,8 @@ }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -12422,9 +10863,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "buffer-from": "^1.0.0", @@ -12433,9 +10873,8 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -12443,14 +10882,12 @@ }, "node_modules/sparse-array": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", - "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==" + "license": "ISC" }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -12458,15 +10895,13 @@ }, "node_modules/spdx-exceptions": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -12474,40 +10909,35 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/sqlstring": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/static-eval": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", "dependencies": { "escodegen": "^1.8.1" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -12527,16 +10957,14 @@ }, "node_modules/static-eval/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/static-eval/node_modules/levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -12547,8 +10975,7 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -12563,16 +10990,13 @@ }, "node_modules/static-eval/node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, "node_modules/static-eval/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -12580,8 +11004,7 @@ }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -12591,18 +11014,16 @@ }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -12610,9 +11031,8 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12624,9 +11044,8 @@ }, "node_modules/stream-http": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -12636,9 +11055,8 @@ }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12650,18 +11068,16 @@ }, "node_modules/stream-read-all": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", - "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/streamx": { "version": "2.15.6", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", - "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", "dev": true, + "license": "MIT", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -12669,16 +11085,13 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -12692,13 +11105,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -12714,9 +11127,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12728,15 +11140,13 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12746,9 +11156,8 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12761,8 +11170,7 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12780,8 +11188,7 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12796,8 +11203,7 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12809,8 +11215,7 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12822,9 +11227,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12835,9 +11239,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -12847,9 +11250,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -12859,14 +11261,12 @@ }, "node_modules/strnum": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12876,9 +11276,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12888,9 +11287,8 @@ }, "node_modules/table-layout": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", - "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", "dev": true, + "license": "MIT", "dependencies": { "@75lb/deep-merge": "^1.1.1", "array-back": "^6.2.2", @@ -12909,27 +11307,24 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/table-layout/node_modules/typical": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -12937,9 +11332,8 @@ }, "node_modules/tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -12949,9 +11343,8 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -12965,9 +11358,8 @@ }, "node_modules/tar-stream/node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -12976,8 +11368,6 @@ }, "node_modules/tar-stream/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -12993,6 +11383,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -13000,9 +11391,8 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13014,18 +11404,16 @@ }, "node_modules/tdigest": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dev": true, + "license": "MIT", "dependencies": { "bintrees": "1.0.2" } }, "node_modules/terser": { "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13042,9 +11430,8 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -13077,9 +11464,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "dependencies": { "randombytes": "^2.1.0" @@ -13087,9 +11473,8 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -13101,9 +11486,8 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13111,9 +11495,8 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13131,9 +11514,8 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13143,21 +11525,18 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, + "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -13167,9 +11546,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -13179,18 +11557,16 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -13200,18 +11576,16 @@ }, "node_modules/tr46/node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ts-api-utils": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.13.0" }, @@ -13221,29 +11595,25 @@ }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.x" } }, "node_modules/tty-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -13253,9 +11623,8 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -13265,18 +11634,16 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13286,9 +11653,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -13299,8 +11665,7 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -13312,8 +11677,7 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -13329,8 +11693,7 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -13347,8 +11710,7 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -13360,9 +11722,8 @@ }, "node_modules/typescript": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13373,54 +11734,66 @@ }, "node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uint8-util": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", - "integrity": "sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA==", + "license": "MIT", "dependencies": { "base64-arraybuffer": "^1.0.2" } }, + "node_modules/uint8-varint": { + "version": "2.0.4", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/uint8-varint/node_modules/multiformats": { + "version": "13.0.1", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/uint8-varint/node_modules/uint8arrays": { + "version": "5.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, "node_modules/uint8arraylist": { "version": "2.4.8", - "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", - "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arrays": "^5.0.1" } }, "node_modules/uint8arraylist/node_modules/multiformats": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + "license": "Apache-2.0 OR MIT" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", - "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/uint8arrays": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", - "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^12.0.1" } }, "node_modules/uint8arrays/node_modules/multiformats": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", - "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -13428,8 +11801,7 @@ }, "node_modules/ulidx": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ulidx/-/ulidx-2.1.0.tgz", - "integrity": "sha512-DlMi97oP9HASI3kLCjBlOhAG1SoisUrEqC2PJ7itiFbq9q5Zo0JejupXeu2Gke99W62epNzA4MFNToNiq8A5LA==", + "license": "MIT", "dependencies": { "layerr": "^2.0.1" }, @@ -13439,8 +11811,7 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -13453,9 +11824,8 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -13463,8 +11833,6 @@ }, "node_modules/unbzip2-stream/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -13480,6 +11848,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -13487,32 +11856,27 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -13528,6 +11892,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { "escalade": "^3.1.1", @@ -13542,25 +11907,22 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/url": { "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" @@ -13568,14 +11930,12 @@ }, "node_modules/utf8-codec": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utf8-codec/-/utf8-codec-1.0.0.tgz", - "integrity": "sha512-S/QSLezp3qvG4ld5PUfXiH7mCFxLKjSVZRFkB3DOjgwHuJPFDkInAXc/anf7BAbHt/D38ozDzL+QMZ6/7gsI6w==" + "license": "MIT" }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -13586,31 +11946,27 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -13622,9 +11978,8 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -13632,9 +11987,8 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, + "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -13644,29 +11998,25 @@ }, "node_modules/varint": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/watchpack": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -13678,27 +12028,24 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { "version": "5.90.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.0.tgz", - "integrity": "sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -13744,9 +12091,8 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -13754,9 +12100,8 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -13768,9 +12113,8 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -13778,16 +12122,14 @@ }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -13798,9 +12140,8 @@ }, "node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -13813,8 +12154,7 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -13828,8 +12168,7 @@ }, "node_modules/which-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", @@ -13846,32 +12185,28 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrapjs": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -13887,9 +12222,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13904,9 +12238,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13919,9 +12252,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13931,21 +12263,18 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13957,9 +12286,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -13969,9 +12297,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -13981,9 +12308,8 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -13996,15 +12322,13 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -14023,44 +12347,38 @@ }, "node_modules/xml": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xsalsa20": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", - "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" + "license": "MIT" }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -14076,18 +12394,16 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -14100,15 +12416,13 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14120,9 +12434,8 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -14130,18 +12443,16 @@ }, "node_modules/ylru": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", - "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14151,19 +12462,18 @@ }, "node_modules/z32": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/z32/-/z32-1.0.1.tgz", - "integrity": "sha512-Uytfqf6VEVchHKZDw0NRdCViOARHP84uzvOw0CXCMLOwhgHZUL9XibpEPLLQN10mCVLxOlGCQWbkV7km7yNYcw==", + "license": "MIT", "dependencies": { "b4a": "^1.5.3" } }, "packages/agent": { "name": "@web5/agent", - "version": "0.2.5", + "version": "0.2.6", "license": "Apache-2.0", "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", - "@web5/common": "0.2.2", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4", "level": "8.0.0", @@ -14204,16 +12514,14 @@ }, "packages/agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -14223,8 +12531,7 @@ }, "packages/agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -14234,9 +12541,8 @@ }, "packages/agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14262,9 +12568,8 @@ }, "packages/agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14275,9 +12580,8 @@ }, "packages/agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14302,8 +12606,7 @@ }, "packages/agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -14316,8 +12619,7 @@ }, "packages/agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -14328,8 +12630,7 @@ }, "packages/agent/node_modules/@web5/dids": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", - "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", + "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -14346,11 +12647,22 @@ "node": ">=18.0.0" } }, + "packages/agent/node_modules/@web5/dids/node_modules/@web5/common": { + "version": "0.2.2", + "license": "Apache-2.0", + "dependencies": { + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/agent/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14364,9 +12676,8 @@ }, "packages/agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14379,9 +12690,8 @@ }, "packages/agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14389,9 +12699,8 @@ }, "packages/agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14405,9 +12714,8 @@ }, "packages/agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14417,15 +12725,13 @@ }, "packages/agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14435,9 +12741,8 @@ }, "packages/agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14489,9 +12794,8 @@ }, "packages/agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14501,24 +12805,21 @@ }, "packages/agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14528,9 +12829,8 @@ }, "packages/agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14579,7 +12879,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" }, "engines": { @@ -14588,16 +12888,14 @@ }, "packages/api/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/api/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -14607,8 +12905,7 @@ }, "packages/api/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -14618,9 +12915,8 @@ }, "packages/api/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14646,9 +12942,8 @@ }, "packages/api/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14659,9 +12954,8 @@ }, "packages/api/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14684,10 +12978,89 @@ } } }, + "packages/api/node_modules/@web5/agent": { + "version": "0.2.5", + "license": "Apache-2.0", + "dependencies": { + "@tbd54566975/dwn-sdk-js": "0.2.8", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "@web5/dids": "0.2.3", + "level": "8.0.0", + "readable-stream": "4.4.2", + "readable-web-to-node-stream": "3.0.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/api/node_modules/@web5/agent/node_modules/@tbd54566975/dwn-sdk-js": { + "version": "0.2.8", + "license": "Apache-2.0", + "dependencies": { + "@ipld/dag-cbor": "9.0.3", + "@js-temporal/polyfill": "0.4.4", + "@noble/ed25519": "2.0.0", + "@noble/secp256k1": "2.0.0", + "abstract-level": "1.0.3", + "ajv": "8.12.0", + "blockstore-core": "4.2.0", + "cross-fetch": "4.0.0", + "eciesjs": "0.4.5", + "flat": "5.0.2", + "interface-blockstore": "5.2.3", + "interface-store": "5.1.2", + "ipfs-unixfs-exporter": "13.1.5", + "ipfs-unixfs-importer": "15.1.5", + "level": "8.0.0", + "lodash": "4.17.21", + "lru-cache": "9.1.2", + "ms": "2.1.3", + "multiformats": "11.0.2", + "randombytes": "2.1.0", + "readable-stream": "4.4.2", + "ulidx": "2.1.0", + "uuid": "8.3.2", + "varint": "6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "packages/api/node_modules/@web5/agent/node_modules/@web5/dids": { + "version": "0.2.3", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/api/node_modules/@web5/common": { + "version": "0.2.2", + "license": "Apache-2.0", + "dependencies": { + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/api/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -14700,8 +13073,7 @@ }, "packages/api/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -14712,8 +13084,7 @@ }, "packages/api/node_modules/@web5/dids": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", - "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", + "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -14730,27 +13101,42 @@ "node": ">=18.0.0" } }, - "packages/api/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "packages/api/node_modules/@web5/user-agent": { + "version": "0.2.5", + "license": "Apache-2.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@web5/agent": "0.2.5", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "@web5/dids": "0.2.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=18.0.0" + } + }, + "packages/api/node_modules/@web5/user-agent/node_modules/@web5/dids": { + "version": "0.2.3", + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" } }, "packages/api/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14763,9 +13149,8 @@ }, "packages/api/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14773,9 +13158,8 @@ }, "packages/api/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14789,9 +13173,8 @@ }, "packages/api/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14801,15 +13184,13 @@ }, "packages/api/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/api/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14819,9 +13200,8 @@ }, "packages/api/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14871,11 +13251,25 @@ "url": "https://opencollective.com/eslint" } }, + "packages/api/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/api/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14885,24 +13279,28 @@ }, "packages/api/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/api/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "packages/api/node_modules/lru-cache": { + "version": "9.1.2", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } }, "packages/api/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14912,9 +13310,8 @@ }, "packages/api/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14924,7 +13321,7 @@ }, "packages/common": { "name": "@web5/common", - "version": "0.2.2", + "version": "0.2.3", "license": "Apache-2.0", "dependencies": { "level": "8.0.0", @@ -14960,9 +13357,8 @@ }, "packages/common/node_modules/@types/readable-stream": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.9.tgz", - "integrity": "sha512-4cwuvrmNF96M4Nrx0Eep37RwPB1Mth+nCSezsGRv5+PsFyRvDdLd0pil6gVLcWD/bh69INNdwZ98dJwfHpLohA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -14970,9 +13366,8 @@ }, "packages/common/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14998,9 +13393,8 @@ }, "packages/common/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15011,9 +13405,8 @@ }, "packages/common/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15038,9 +13431,8 @@ }, "packages/common/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15054,9 +13446,8 @@ }, "packages/common/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15069,9 +13460,8 @@ }, "packages/common/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15079,9 +13469,8 @@ }, "packages/common/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15095,9 +13484,8 @@ }, "packages/common/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15107,15 +13495,13 @@ }, "packages/common/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/common/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15125,9 +13511,8 @@ }, "packages/common/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15179,9 +13564,8 @@ }, "packages/common/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15191,24 +13575,21 @@ }, "packages/common/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/common/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/common/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15218,9 +13599,8 @@ }, "packages/common/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15266,16 +13646,14 @@ }, "packages/credentials/node_modules/@noble/ciphers": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz", - "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@noble/curves": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -15285,8 +13663,7 @@ }, "packages/credentials/node_modules/@noble/hashes": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -15296,9 +13673,8 @@ }, "packages/credentials/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15324,9 +13700,8 @@ }, "packages/credentials/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15337,9 +13712,8 @@ }, "packages/credentials/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15362,10 +13736,21 @@ } } }, + "packages/credentials/node_modules/@web5/common": { + "version": "0.2.2", + "license": "Apache-2.0", + "dependencies": { + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/credentials/node_modules/@web5/crypto": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.4.tgz", - "integrity": "sha512-heRUuV10mZ04dWp1C2mNF/EEPw8nnRe+yAXvmclJ+4XUHL6+mY7j+hjYOTKUAQzd4ouvbHrpJM0uYcUntA3AeA==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.4.0", "@noble/curves": "1.2.0", @@ -15378,8 +13763,7 @@ }, "packages/credentials/node_modules/@web5/dids": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", - "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", + "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -15398,16 +13782,14 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -15417,8 +13799,7 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -15428,8 +13809,7 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -15442,8 +13822,7 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -15454,9 +13833,8 @@ }, "packages/credentials/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15470,9 +13848,8 @@ }, "packages/credentials/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15485,9 +13862,8 @@ }, "packages/credentials/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15495,9 +13871,8 @@ }, "packages/credentials/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15511,9 +13886,8 @@ }, "packages/credentials/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15523,15 +13897,13 @@ }, "packages/credentials/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/credentials/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15541,9 +13913,8 @@ }, "packages/credentials/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15595,9 +13966,8 @@ }, "packages/credentials/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15607,24 +13977,21 @@ }, "packages/credentials/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/credentials/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/credentials/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15634,9 +14001,8 @@ }, "packages/credentials/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15652,7 +14018,7 @@ "@noble/ciphers": "0.4.1", "@noble/curves": "1.3.0", "@noble/hashes": "1.3.3", - "@web5/common": "0.2.2" + "@web5/common": "0.2.3" }, "devDependencies": { "@playwright/test": "1.40.1", @@ -15676,7 +14042,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" }, "engines": { @@ -15685,7 +14051,7 @@ }, "packages/crypto-aws-kms": { "name": "@web5/crypto-aws-kms", - "version": "0.1.0", + "version": "0.2.0", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-kms": "3.478.0", @@ -15702,7 +14068,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "@web5/common": "0.2.2", + "@web5/common": "0.2.3", "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", @@ -15713,7 +14079,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" }, "engines": { @@ -15722,9 +14088,8 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15750,9 +14115,8 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15763,9 +14127,8 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15790,9 +14153,8 @@ }, "packages/crypto-aws-kms/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15806,9 +14168,8 @@ }, "packages/crypto-aws-kms/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15821,9 +14182,8 @@ }, "packages/crypto-aws-kms/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15831,9 +14191,8 @@ }, "packages/crypto-aws-kms/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15847,9 +14206,8 @@ }, "packages/crypto-aws-kms/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15859,15 +14217,13 @@ }, "packages/crypto-aws-kms/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto-aws-kms/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15877,9 +14233,8 @@ }, "packages/crypto-aws-kms/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15931,9 +14286,8 @@ }, "packages/crypto-aws-kms/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15943,24 +14297,21 @@ }, "packages/crypto-aws-kms/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto-aws-kms/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto-aws-kms/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15970,9 +14321,8 @@ }, "packages/crypto-aws-kms/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15982,9 +14332,8 @@ }, "packages/crypto/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -16010,9 +14359,8 @@ }, "packages/crypto/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -16023,9 +14371,8 @@ }, "packages/crypto/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -16050,9 +14397,8 @@ }, "packages/crypto/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16066,9 +14412,8 @@ }, "packages/crypto/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16081,9 +14426,8 @@ }, "packages/crypto/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16091,9 +14435,8 @@ }, "packages/crypto/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16107,9 +14450,8 @@ }, "packages/crypto/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16119,15 +14461,13 @@ }, "packages/crypto/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16137,9 +14477,8 @@ }, "packages/crypto/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16191,9 +14530,8 @@ }, "packages/crypto/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16203,24 +14541,21 @@ }, "packages/crypto/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/crypto/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16230,9 +14565,8 @@ }, "packages/crypto/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16245,10 +14579,9 @@ "version": "0.3.0", "license": "Apache-2.0", "dependencies": { - "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", "@dnsquery/dns-packet": "6.1.1", - "@web5/common": "0.2.2", + "@web5/common": "0.2.3", "@web5/crypto": "0.4.0", "bencode": "4.0.0", "level": "8.0.0", @@ -16277,7 +14610,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" }, "engines": { @@ -16286,9 +14619,8 @@ }, "packages/dids/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -16314,9 +14646,8 @@ }, "packages/dids/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -16327,9 +14658,8 @@ }, "packages/dids/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -16354,9 +14684,8 @@ }, "packages/dids/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16370,9 +14699,8 @@ }, "packages/dids/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16385,9 +14713,8 @@ }, "packages/dids/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16395,9 +14722,8 @@ }, "packages/dids/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16411,9 +14737,8 @@ }, "packages/dids/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16423,15 +14748,13 @@ }, "packages/dids/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/dids/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16441,9 +14764,8 @@ }, "packages/dids/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16495,9 +14817,8 @@ }, "packages/dids/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16507,24 +14828,21 @@ }, "packages/dids/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/dids/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/dids/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16534,9 +14852,8 @@ }, "packages/dids/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16546,11 +14863,11 @@ }, "packages/identity-agent": { "name": "@web5/identity-agent", - "version": "0.2.5", + "version": "0.2.6", "license": "Apache-2.0", "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4" }, @@ -16584,16 +14901,14 @@ }, "packages/identity-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/identity-agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -16603,8 +14918,7 @@ }, "packages/identity-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -16614,9 +14928,8 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -16642,9 +14955,8 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -16655,9 +14967,8 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -16680,10 +14991,42 @@ } } }, + "packages/identity-agent/node_modules/@web5/agent/node_modules/@web5/common": { + "version": "0.2.2", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/identity-agent/node_modules/@web5/agent/node_modules/@web5/dids": { + "version": "0.2.3", + "extraneous": true, + "license": "Apache-2.0", + "dependencies": { + "@decentralized-identity/ion-pow-sdk": "1.0.17", + "@decentralized-identity/ion-sdk": "1.0.1", + "@web5/common": "0.2.2", + "@web5/crypto": "0.2.2", + "did-resolver": "4.1.0", + "dns-packet": "5.6.1", + "level": "8.0.0", + "ms": "2.1.3", + "pkarr": "1.1.1", + "z32": "1.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "packages/identity-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -16696,8 +15039,7 @@ }, "packages/identity-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -16708,8 +15050,7 @@ }, "packages/identity-agent/node_modules/@web5/dids": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", - "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", + "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -16726,27 +15067,22 @@ "node": ">=18.0.0" } }, - "packages/identity-agent/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "packages/identity-agent/node_modules/@web5/dids/node_modules/@web5/common": { + "version": "0.2.2", + "license": "Apache-2.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=18.0.0" } }, "packages/identity-agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16759,9 +15095,8 @@ }, "packages/identity-agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16769,9 +15104,8 @@ }, "packages/identity-agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16785,9 +15119,8 @@ }, "packages/identity-agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16797,15 +15130,13 @@ }, "packages/identity-agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/identity-agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16815,9 +15146,8 @@ }, "packages/identity-agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16867,11 +15197,25 @@ "url": "https://opencollective.com/eslint" } }, + "packages/identity-agent/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/identity-agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16881,24 +15225,21 @@ }, "packages/identity-agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/identity-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/identity-agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16908,9 +15249,8 @@ }, "packages/identity-agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16920,11 +15260,11 @@ }, "packages/proxy-agent": { "name": "@web5/proxy-agent", - "version": "0.2.5", + "version": "0.2.6", "license": "Apache-2.0", "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4" }, @@ -16958,16 +15298,14 @@ }, "packages/proxy-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/proxy-agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -16977,8 +15315,7 @@ }, "packages/proxy-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -16988,9 +15325,8 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -17016,9 +15352,8 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -17029,9 +15364,8 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -17056,8 +15390,7 @@ }, "packages/proxy-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -17070,8 +15403,7 @@ }, "packages/proxy-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -17082,8 +15414,7 @@ }, "packages/proxy-agent/node_modules/@web5/dids": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", - "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", + "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -17100,27 +15431,22 @@ "node": ">=18.0.0" } }, - "packages/proxy-agent/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "packages/proxy-agent/node_modules/@web5/dids/node_modules/@web5/common": { + "version": "0.2.2", + "license": "Apache-2.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=18.0.0" } }, "packages/proxy-agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17133,9 +15459,8 @@ }, "packages/proxy-agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17143,9 +15468,8 @@ }, "packages/proxy-agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17159,9 +15483,8 @@ }, "packages/proxy-agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17171,15 +15494,13 @@ }, "packages/proxy-agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/proxy-agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17189,9 +15510,8 @@ }, "packages/proxy-agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -17241,11 +15561,25 @@ "url": "https://opencollective.com/eslint" } }, + "packages/proxy-agent/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/proxy-agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -17255,24 +15589,21 @@ }, "packages/proxy-agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/proxy-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/proxy-agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17282,9 +15613,8 @@ }, "packages/proxy-agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17294,11 +15624,11 @@ }, "packages/user-agent": { "name": "@web5/user-agent", - "version": "0.2.5", + "version": "0.2.6", "license": "Apache-2.0", "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4" }, @@ -17332,16 +15662,14 @@ }, "packages/user-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", - "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/user-agent/node_modules/@noble/curves": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -17351,8 +15679,7 @@ }, "packages/user-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -17362,9 +15689,8 @@ }, "packages/user-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", - "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -17390,9 +15716,8 @@ }, "packages/user-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", - "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -17403,9 +15728,8 @@ }, "packages/user-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", - "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -17430,8 +15754,7 @@ }, "packages/user-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", - "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -17444,8 +15767,7 @@ }, "packages/user-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", - "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", + "license": "Apache-2.0", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -17456,8 +15778,7 @@ }, "packages/user-agent/node_modules/@web5/dids": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", - "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", + "license": "Apache-2.0", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -17474,27 +15795,22 @@ "node": ">=18.0.0" } }, - "packages/user-agent/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "packages/user-agent/node_modules/@web5/dids/node_modules/@web5/common": { + "version": "0.2.2", + "license": "Apache-2.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=18.0.0" } }, "packages/user-agent/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17507,9 +15823,8 @@ }, "packages/user-agent/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17517,9 +15832,8 @@ }, "packages/user-agent/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17533,9 +15847,8 @@ }, "packages/user-agent/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17545,15 +15858,13 @@ }, "packages/user-agent/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/user-agent/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17563,9 +15874,8 @@ }, "packages/user-agent/node_modules/eslint": { "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -17615,11 +15925,25 @@ "url": "https://opencollective.com/eslint" } }, + "packages/user-agent/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/user-agent/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -17629,24 +15953,21 @@ }, "packages/user-agent/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "packages/user-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/user-agent/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17656,9 +15977,8 @@ }, "packages/user-agent/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, diff --git a/packages/agent/package.json b/packages/agent/package.json index de2308ce4..699348b41 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@web5/agent", - "version": "0.2.5", + "version": "0.2.6", "type": "module", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -69,7 +69,7 @@ }, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", - "@web5/common": "0.2.2", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4", "level": "8.0.0", diff --git a/packages/api/package.json b/packages/api/package.json index f8665c968..96b3cc5c6 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -112,7 +112,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" } } diff --git a/packages/common/package.json b/packages/common/package.json index 39f1b17e0..8779f29da 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@web5/common", - "version": "0.2.2", + "version": "0.2.3", "type": "module", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/crypto-aws-kms/package.json b/packages/crypto-aws-kms/package.json index 4e007779a..0de42c962 100644 --- a/packages/crypto-aws-kms/package.json +++ b/packages/crypto-aws-kms/package.json @@ -1,6 +1,6 @@ { "name": "@web5/crypto-aws-kms", - "version": "0.1.0", + "version": "0.2.0", "description": "Web5 cryptographic library using AWS KMS", "type": "module", "main": "./dist/cjs/index.js", @@ -83,7 +83,7 @@ "@typescript-eslint/parser": "6.4.0", "@web/test-runner": "0.18.0", "@web/test-runner-playwright": "0.11.0", - "@web5/common": "0.2.2", + "@web5/common": "0.2.3", "c8": "9.0.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", @@ -94,7 +94,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" } } diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 4e5cd689e..30e989c59 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -77,7 +77,7 @@ "@noble/ciphers": "0.4.1", "@noble/curves": "1.3.0", "@noble/hashes": "1.3.3", - "@web5/common": "0.2.2" + "@web5/common": "0.2.3" }, "devDependencies": { "@playwright/test": "1.40.1", @@ -101,7 +101,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" } } diff --git a/packages/dids/package.json b/packages/dids/package.json index 5beaa95fe..41226316d 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -75,10 +75,9 @@ "node": ">=18.0.0" }, "dependencies": { - "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", "@dnsquery/dns-packet": "6.1.1", - "@web5/common": "0.2.2", + "@web5/common": "0.2.3", "@web5/crypto": "0.4.0", "bencode": "4.0.0", "level": "8.0.0", @@ -107,7 +106,7 @@ "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "16.1.3", - "source-map-loader": "4.0.1", + "source-map-loader": "4.0.2", "typescript": "5.1.6" } } diff --git a/packages/dids/tests/tsconfig.json b/packages/dids/tests/tsconfig.json index ee97c2267..7c6d2c8e7 100644 --- a/packages/dids/tests/tsconfig.json +++ b/packages/dids/tests/tsconfig.json @@ -7,7 +7,6 @@ }, "include": [ "../src", - "../typings", ".", ], "exclude": [ diff --git a/packages/dids/tsconfig.cjs.json b/packages/dids/tsconfig.cjs.json index 63f6f61a4..966f80c2b 100644 --- a/packages/dids/tsconfig.cjs.json +++ b/packages/dids/tsconfig.cjs.json @@ -14,7 +14,6 @@ "downlevelIteration": true }, "include": [ - "src", - "typings" + "src" ] } \ No newline at end of file diff --git a/packages/dids/tsconfig.json b/packages/dids/tsconfig.json index d9e64c722..23ed4ccf6 100644 --- a/packages/dids/tsconfig.json +++ b/packages/dids/tsconfig.json @@ -5,8 +5,7 @@ "outDir": "dist/esm" }, "include": [ - "src", - "typings" + "src" ], "exclude": [ "node_modules" diff --git a/packages/dids/typings/decentralized-identity__ion-pow-sdk.d.ts b/packages/dids/typings/decentralized-identity__ion-pow-sdk.d.ts deleted file mode 100644 index 03fc84a06..000000000 --- a/packages/dids/typings/decentralized-identity__ion-pow-sdk.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module '@decentralized-identity/ion-pow-sdk' { - export default class IonProofOfWork { - static randomHexString(): string; - static submitIonRequestUntilSuccess(getChallengeUri: string, solveChallengeUri: string, requestBody: string): Promise; - static submitIonRequest(getChallengeUri: string, solveChallengeUri: string, requestBody: string): Promise; - } -} \ No newline at end of file diff --git a/packages/identity-agent/package.json b/packages/identity-agent/package.json index e8431c6de..9293c452a 100644 --- a/packages/identity-agent/package.json +++ b/packages/identity-agent/package.json @@ -1,6 +1,6 @@ { "name": "@web5/identity-agent", - "version": "0.2.5", + "version": "0.2.6", "type": "module", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -68,8 +68,8 @@ "node": ">=18.0.0" }, "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4" }, diff --git a/packages/proxy-agent/package.json b/packages/proxy-agent/package.json index 9c26ae3f6..91fc854ce 100644 --- a/packages/proxy-agent/package.json +++ b/packages/proxy-agent/package.json @@ -1,6 +1,6 @@ { "name": "@web5/proxy-agent", - "version": "0.2.5", + "version": "0.2.6", "type": "module", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -68,8 +68,8 @@ "node": ">=18.0.0" }, "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4" }, diff --git a/packages/user-agent/package.json b/packages/user-agent/package.json index 912466042..c3fb84c7a 100644 --- a/packages/user-agent/package.json +++ b/packages/user-agent/package.json @@ -1,6 +1,6 @@ { "name": "@web5/user-agent", - "version": "0.2.5", + "version": "0.2.6", "type": "module", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", @@ -68,8 +68,8 @@ "node": ">=18.0.0" }, "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4" }, From 6cb1abba5ec2b8e02038f25bcfe61e29adc9b59f Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 11:51:11 -0500 Subject: [PATCH 33/39] Resolve package dependency issue Signed-off-by: Frank Hinek --- package-lock.json | 5275 ++++++++++++++++++++++++------------- packages/api/package.json | 6 +- 2 files changed, 3501 insertions(+), 1780 deletions(-) diff --git a/package-lock.json b/package-lock.json index a65d75a01..87dd6ef81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,8 +27,9 @@ }, "node_modules/@75lb/deep-merge": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", + "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", "dev": true, - "license": "MIT", "dependencies": { "lodash.assignwith": "^4.2.0", "typical": "^7.1.1" @@ -39,34 +40,39 @@ }, "node_modules/@75lb/deep-merge/node_modules/typical": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@assemblyscript/loader": { "version": "0.9.4", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", + "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==" }, "node_modules/@astronautlabs/jsonpath": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz", + "integrity": "sha512-FqL/muoreH7iltYC1EB5Tvox5E8NSOOPGkgns4G+qxRKl6k5dxEVljUjB5NcKESzkqwnUqWjSZkL61XGYOuV+A==", "dependencies": { "static-eval": "2.0.2" } }, "node_modules/@aws-crypto/crc32": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -75,22 +81,26 @@ }, "node_modules/@aws-crypto/crc32/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", "dependencies": { "@aws-crypto/ie11-detection": "^3.0.0", "@aws-crypto/sha256-js": "^3.0.0", @@ -104,11 +114,13 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/sha256-js": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", "dependencies": { "@aws-crypto/util": "^3.0.0", "@aws-sdk/types": "^3.222.0", @@ -117,22 +129,26 @@ }, "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", "dependencies": { "tslib": "^1.11.1" } }, "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-crypto/util": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", "dependencies": { "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-utf8-browser": "^3.0.0", @@ -141,11 +157,13 @@ }, "node_modules/@aws-crypto/util/node_modules/tslib": { "version": "1.14.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-kms": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.478.0.tgz", + "integrity": "sha512-aipAUgPdl9phhCyDNXIdU7zym/UfoMNbwhs1CQ5PiktAcRTb7ERvSvtNKHioKatz8oGVR35+5n5V3mupe4URgA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -194,7 +212,8 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.478.0.tgz", + "integrity": "sha512-Jxy9cE1JMkPR0PklCpq3cORHnZq/Z4klhSTNGgZNeBWovMa+plor52kyh8iUNHKl3XEJvTbHM7V+dvrr/x0P1g==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -240,7 +259,8 @@ }, "node_modules/@aws-sdk/client-sts": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.478.0.tgz", + "integrity": "sha512-D+QID0dYzmn9dcxgKP3/nMndUqiQbDLsqI0Zf2pG4MW5gPhVNKlDGIV3Ztz8SkMjzGJExNOLW2L569o8jshJVw==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -289,7 +309,8 @@ }, "node_modules/@aws-sdk/core": { "version": "3.477.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.477.0.tgz", + "integrity": "sha512-o0434EH+d1BxHZvgG7z8vph2SYefciQ5RnJw2MgvETGnthgqsnI4nnNJLSw0FVeqCeS18n6vRtzqlGYR2YPCNg==", "dependencies": { "@smithy/core": "^1.2.0", "@smithy/protocol-http": "^3.0.11", @@ -304,7 +325,8 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz", + "integrity": "sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -317,7 +339,8 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.478.0.tgz", + "integrity": "sha512-SsrYEYUvTG9ZoPC+zB19AnVoOKID+QIEHJDIi1GCZXW5kTVyr1saTVm4orG2TjYvbHQMddsWtHOvGYXZWAYMbw==", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-process": "3.468.0", @@ -336,7 +359,8 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.478.0.tgz", + "integrity": "sha512-nwDutJYeHiIZCQDgKIUrsgwAWTil0mNe+cbd+j8fi+wwxkWUzip+F0+z02molJ8WrUUKNRhqB1V5aVx7IranuA==", "dependencies": { "@aws-sdk/credential-provider-env": "3.468.0", "@aws-sdk/credential-provider-ini": "3.478.0", @@ -356,7 +380,8 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz", + "integrity": "sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -370,7 +395,8 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.478.0.tgz", + "integrity": "sha512-LsDShG51X/q+s5ZFN7kHVqrd8ZHdyEyHqdhoocmRvvw2Dif50M0AqQfvCrW1ndj5CNzXO4x/eH8EK5ZOVlS6Sg==", "dependencies": { "@aws-sdk/client-sso": "3.478.0", "@aws-sdk/token-providers": "3.478.0", @@ -386,7 +412,8 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz", + "integrity": "sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -399,7 +426,8 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz", + "integrity": "sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -412,7 +440,8 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz", + "integrity": "sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -424,7 +453,8 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz", + "integrity": "sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/protocol-http": "^3.0.11", @@ -437,7 +467,8 @@ }, "node_modules/@aws-sdk/middleware-signing": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz", + "integrity": "sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/property-provider": "^2.0.0", @@ -453,7 +484,8 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz", + "integrity": "sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw==", "dependencies": { "@aws-sdk/types": "3.468.0", "@aws-sdk/util-endpoints": "3.478.0", @@ -467,7 +499,8 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.470.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.470.0.tgz", + "integrity": "sha512-C1o1J06iIw8cyAAOvHqT4Bbqf+PgQ/RDlSyjt2gFfP2OovDpc2o2S90dE8f8iZdSGpg70N5MikT1DBhW9NbhtQ==", "dependencies": { "@smithy/node-config-provider": "^2.1.8", "@smithy/types": "^2.7.0", @@ -481,7 +514,8 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.478.0.tgz", + "integrity": "sha512-7b5tj1y/wGHZIZ+ckjOUKgKrMuCJMF/G1UKZKIqqdekeEsjcThbvoxAMeY0FEowu2ODVk/ggOmpBFxcu0iYd6A==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", @@ -527,7 +561,8 @@ }, "node_modules/@aws-sdk/types": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.468.0.tgz", + "integrity": "sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA==", "dependencies": { "@smithy/types": "^2.7.0", "tslib": "^2.5.0" @@ -538,7 +573,8 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.478.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz", + "integrity": "sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/util-endpoints": "^1.0.7", @@ -550,7 +586,8 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.495.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", + "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", "dependencies": { "tslib": "^2.5.0" }, @@ -560,7 +597,8 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.468.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz", + "integrity": "sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/types": "^2.7.0", @@ -570,7 +608,8 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.470.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz", + "integrity": "sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ==", "dependencies": { "@aws-sdk/types": "3.468.0", "@smithy/node-config-provider": "^2.1.8", @@ -591,15 +630,17 @@ }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", "dependencies": { "tslib": "^2.3.1" } }, "node_modules/@babel/code-frame": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -610,16 +651,18 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -631,12 +674,14 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@decentralized-identity/ion-pow-sdk": { "version": "1.0.17", - "license": "apache-2.0", + "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-pow-sdk/-/ion-pow-sdk-1.0.17.tgz", + "integrity": "sha512-vk7DTDM8aKDbFyu1ad/qkoRrGL4q+KvNeL/FNZXhkWPaDhVExBN/qGEoRLf1YSfFe+myto3+4RYTPut+riiqnw==", "dependencies": { "buffer": "6.0.3", "cross-fetch": "3.1.5", @@ -645,14 +690,16 @@ }, "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/cross-fetch": { "version": "3.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dependencies": { "node-fetch": "2.6.7" } }, "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/node-fetch": { "version": "2.6.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -670,15 +717,18 @@ }, "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/@decentralized-identity/ion-pow-sdk/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -686,7 +736,8 @@ }, "node_modules/@decentralized-identity/ion-sdk": { "version": "1.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@decentralized-identity/ion-sdk/-/ion-sdk-1.0.1.tgz", + "integrity": "sha512-+P+DXcRSFjsEsI5KIqUmVjpzgUT28B2lWpTO+IxiBcfibAN/1Sg20NebGTO/+serz2CnSZf95N2a1OZ6eXypGQ==", "dependencies": { "@noble/ed25519": "^2.0.0", "@noble/secp256k1": "^2.0.0", @@ -698,7 +749,8 @@ }, "node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats": { "version": "12.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -706,7 +758,8 @@ }, "node_modules/@dnsquery/dns-packet": { "version": "6.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@dnsquery/dns-packet/-/dns-packet-6.1.1.tgz", + "integrity": "sha512-WXTuFvL3G+74SchFAtz3FgIYVOe196ycvGsMgvSH/8Goptb1qpIQtIuM4SOK9G9lhMWYpHxnXyy544ZhluFOew==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.4", "utf8-codec": "^1.0.0" @@ -715,13 +768,62 @@ "node": ">=6" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", + "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", + "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", + "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", + "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -730,10 +832,299 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", + "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", + "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", + "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", + "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", + "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", + "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", + "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", + "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", + "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", + "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", + "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", + "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", + "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", + "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", + "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", + "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", + "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", + "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -746,16 +1137,18 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -776,8 +1169,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -791,8 +1185,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -800,13 +1195,15 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -816,16 +1213,18 @@ }, "node_modules/@eslint/js": { "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -837,8 +1236,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -846,8 +1246,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -857,8 +1258,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -869,12 +1271,14 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true }, "node_modules/@ipld/dag-cbor": { "version": "9.0.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.0.3.tgz", + "integrity": "sha512-A2UFccS0+sARK9xwXiVZIaWbLbPxLGP3UZOjBeOMWfDY04SXi8h1+t4rHBzOlKYF/yWNm3RbFLyclWO7hZcy4g==", "dependencies": { "cborg": "^2.0.1", "multiformats": "^12.0.1" @@ -886,7 +1290,8 @@ }, "node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "12.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -894,7 +1299,8 @@ }, "node_modules/@ipld/dag-pb": { "version": "4.0.8", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.8.tgz", + "integrity": "sha512-693AqMY2jvhe+w4jSwjnDrbhxIu39gm1H4f6/KD5gG+6VFMM6EXV7vq85BvEf8CRsnA0+auWfA29/S8gbWI0Ew==", "dependencies": { "multiformats": "^13.0.0" }, @@ -905,12 +1311,14 @@ }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -925,8 +1333,9 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -936,8 +1345,9 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -950,16 +1360,18 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -972,16 +1384,18 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.0.0" @@ -989,8 +1403,9 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -999,13 +1414,15 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1013,7 +1430,8 @@ }, "node_modules/@js-temporal/polyfill": { "version": "0.4.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.4.4.tgz", + "integrity": "sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==", "dependencies": { "jsbi": "^4.3.0", "tslib": "^2.4.1" @@ -1024,15 +1442,18 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@multiformats/base-x": { "version": "4.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" }, "node_modules/@multiformats/murmur3": { "version": "2.1.8", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.1.8.tgz", + "integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==", "dependencies": { "multiformats": "^13.0.0", "murmurhash3js-revisited": "^3.0.0" @@ -1044,18 +1465,21 @@ }, "node_modules/@multiformats/murmur3/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/@noble/ciphers": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", + "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", "dependencies": { "@noble/hashes": "1.3.3" }, @@ -1065,17 +1489,19 @@ }, "node_modules/@noble/ed25519": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-2.0.0.tgz", + "integrity": "sha512-/extjhkwFupyopDrt80OMWKdLgP429qLZj+z6sYJz90rF2Iz0gjZh2ArMKPImUl13Kx+0EXI2hN9T/KJV0/Zng==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@noble/hashes": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", "engines": { "node": ">= 16" }, @@ -1085,18 +1511,20 @@ }, "node_modules/@noble/secp256k1": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", + "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1107,16 +1535,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1127,8 +1557,9 @@ }, "node_modules/@npmcli/git": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", + "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", @@ -1145,8 +1576,9 @@ }, "node_modules/@npmcli/package-json": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -1162,8 +1594,9 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "dev": true, - "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -1173,8 +1606,9 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1182,8 +1616,9 @@ }, "node_modules/@playwright/test": { "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", + "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "playwright": "1.40.1" }, @@ -1196,8 +1631,9 @@ }, "node_modules/@puppeteer/browsers": { "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", + "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -1224,13 +1660,15 @@ }, "node_modules/@puppeteer/browsers/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/@puppeteer/browsers/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1242,8 +1680,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-fs": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, - "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -1252,8 +1691,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, - "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -1262,8 +1702,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1279,8 +1720,9 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, - "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1303,8 +1745,9 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1322,38 +1765,198 @@ } } }, - "node_modules/@rollup/rollup-darwin-arm64": { + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" ] }, "node_modules/@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", @@ -1362,20 +1965,23 @@ }, "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.2", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true }, "node_modules/@smithy/abort-controller": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1386,7 +1992,8 @@ }, "node_modules/@smithy/config-resolver": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.1.tgz", + "integrity": "sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", @@ -1400,7 +2007,8 @@ }, "node_modules/@smithy/core": { "version": "1.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.1.tgz", + "integrity": "sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q==", "dependencies": { "@smithy/middleware-endpoint": "^2.4.1", "@smithy/middleware-retry": "^2.1.1", @@ -1417,7 +2025,8 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "2.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz", + "integrity": "sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/property-provider": "^2.1.1", @@ -1431,7 +2040,8 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz", + "integrity": "sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==", "dependencies": { "@aws-crypto/crc32": "3.0.0", "@smithy/types": "^2.9.1", @@ -1441,7 +2051,8 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "2.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz", + "integrity": "sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==", "dependencies": { "@smithy/protocol-http": "^3.1.1", "@smithy/querystring-builder": "^2.1.1", @@ -1452,7 +2063,8 @@ }, "node_modules/@smithy/hash-node": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.1.tgz", + "integrity": "sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==", "dependencies": { "@smithy/types": "^2.9.1", "@smithy/util-buffer-from": "^2.1.1", @@ -1465,7 +2077,8 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz", + "integrity": "sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1473,7 +2086,8 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", + "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", "dependencies": { "tslib": "^2.5.0" }, @@ -1483,7 +2097,8 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz", + "integrity": "sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==", "dependencies": { "@smithy/protocol-http": "^3.1.1", "@smithy/types": "^2.9.1", @@ -1495,7 +2110,8 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "2.4.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz", + "integrity": "sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==", "dependencies": { "@smithy/middleware-serde": "^2.1.1", "@smithy/node-config-provider": "^2.2.1", @@ -1511,7 +2127,8 @@ }, "node_modules/@smithy/middleware-retry": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz", + "integrity": "sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/protocol-http": "^3.1.1", @@ -1529,7 +2146,8 @@ }, "node_modules/@smithy/middleware-serde": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz", + "integrity": "sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1540,7 +2158,8 @@ }, "node_modules/@smithy/middleware-stack": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz", + "integrity": "sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1551,7 +2170,8 @@ }, "node_modules/@smithy/node-config-provider": { "version": "2.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz", + "integrity": "sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==", "dependencies": { "@smithy/property-provider": "^2.1.1", "@smithy/shared-ini-file-loader": "^2.3.1", @@ -1564,7 +2184,8 @@ }, "node_modules/@smithy/node-http-handler": { "version": "2.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz", + "integrity": "sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==", "dependencies": { "@smithy/abort-controller": "^2.1.1", "@smithy/protocol-http": "^3.1.1", @@ -1578,7 +2199,8 @@ }, "node_modules/@smithy/property-provider": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.1.tgz", + "integrity": "sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1589,7 +2211,8 @@ }, "node_modules/@smithy/protocol-http": { "version": "3.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.1.1.tgz", + "integrity": "sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1600,7 +2223,8 @@ }, "node_modules/@smithy/querystring-builder": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz", + "integrity": "sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==", "dependencies": { "@smithy/types": "^2.9.1", "@smithy/util-uri-escape": "^2.1.1", @@ -1612,7 +2236,8 @@ }, "node_modules/@smithy/querystring-parser": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz", + "integrity": "sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1623,7 +2248,8 @@ }, "node_modules/@smithy/service-error-classification": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz", + "integrity": "sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==", "dependencies": { "@smithy/types": "^2.9.1" }, @@ -1633,7 +2259,8 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "2.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz", + "integrity": "sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1644,7 +2271,8 @@ }, "node_modules/@smithy/signature-v4": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.1.tgz", + "integrity": "sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==", "dependencies": { "@smithy/eventstream-codec": "^2.1.1", "@smithy/is-array-buffer": "^2.1.1", @@ -1661,7 +2289,8 @@ }, "node_modules/@smithy/smithy-client": { "version": "2.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.3.1.tgz", + "integrity": "sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==", "dependencies": { "@smithy/middleware-endpoint": "^2.4.1", "@smithy/middleware-stack": "^2.1.1", @@ -1676,7 +2305,8 @@ }, "node_modules/@smithy/types": { "version": "2.9.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.9.1.tgz", + "integrity": "sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==", "dependencies": { "tslib": "^2.5.0" }, @@ -1686,7 +2316,8 @@ }, "node_modules/@smithy/url-parser": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.1.tgz", + "integrity": "sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==", "dependencies": { "@smithy/querystring-parser": "^2.1.1", "@smithy/types": "^2.9.1", @@ -1695,7 +2326,8 @@ }, "node_modules/@smithy/util-base64": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.1.1.tgz", + "integrity": "sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==", "dependencies": { "@smithy/util-buffer-from": "^2.1.1", "tslib": "^2.5.0" @@ -1706,14 +2338,16 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", + "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", "dependencies": { "tslib": "^2.5.0" } }, "node_modules/@smithy/util-body-length-node": { "version": "2.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", + "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", "dependencies": { "tslib": "^2.5.0" }, @@ -1723,7 +2357,8 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", + "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", "dependencies": { "@smithy/is-array-buffer": "^2.1.1", "tslib": "^2.5.0" @@ -1734,7 +2369,8 @@ }, "node_modules/@smithy/util-config-provider": { "version": "2.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", + "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", "dependencies": { "tslib": "^2.5.0" }, @@ -1744,7 +2380,8 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz", + "integrity": "sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==", "dependencies": { "@smithy/property-provider": "^2.1.1", "@smithy/smithy-client": "^2.3.1", @@ -1758,7 +2395,8 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz", + "integrity": "sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA==", "dependencies": { "@smithy/config-resolver": "^2.1.1", "@smithy/credential-provider-imds": "^2.2.1", @@ -1774,7 +2412,8 @@ }, "node_modules/@smithy/util-endpoints": { "version": "1.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz", + "integrity": "sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==", "dependencies": { "@smithy/node-config-provider": "^2.2.1", "@smithy/types": "^2.9.1", @@ -1786,7 +2425,8 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", + "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", "dependencies": { "tslib": "^2.5.0" }, @@ -1796,7 +2436,8 @@ }, "node_modules/@smithy/util-middleware": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.1.tgz", + "integrity": "sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==", "dependencies": { "@smithy/types": "^2.9.1", "tslib": "^2.5.0" @@ -1807,7 +2448,8 @@ }, "node_modules/@smithy/util-retry": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.1.tgz", + "integrity": "sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==", "dependencies": { "@smithy/service-error-classification": "^2.1.1", "@smithy/types": "^2.9.1", @@ -1819,7 +2461,8 @@ }, "node_modules/@smithy/util-stream": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.1.tgz", + "integrity": "sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==", "dependencies": { "@smithy/fetch-http-handler": "^2.4.1", "@smithy/node-http-handler": "^2.3.1", @@ -1836,7 +2479,8 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", + "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", "dependencies": { "tslib": "^2.5.0" }, @@ -1846,7 +2490,8 @@ }, "node_modules/@smithy/util-utf8": { "version": "2.1.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.1.1.tgz", + "integrity": "sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==", "dependencies": { "@smithy/util-buffer-from": "^2.1.1", "tslib": "^2.5.0" @@ -1857,7 +2502,8 @@ }, "node_modules/@sphereon/pex": { "version": "2.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@sphereon/pex/-/pex-2.1.0.tgz", + "integrity": "sha512-108iEqbu6D421pK9Q6bq4wnWcL8V+fEtw4Ry6NhBidIlDHuJehdLM8Z70A/axgNYMB1C0smMDYt1Xur/ROLwvQ==", "dependencies": { "@astronautlabs/jsonpath": "^1.1.2", "@sphereon/pex-models": "^2.0.3", @@ -1874,18 +2520,21 @@ }, "node_modules/@sphereon/pex-models": { "version": "2.1.5", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-2.1.5.tgz", + "integrity": "sha512-7THexvdYUK/Dh8olBB46ErT9q/RnecnMdb5r2iwZ6be0Dt4vQLAUN7QU80H0HZBok4jRTb8ydt12x0raBSTHOg==" }, "node_modules/@sphereon/ssi-types": { "version": "0.13.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@sphereon/ssi-types/-/ssi-types-0.13.0.tgz", + "integrity": "sha512-THzkvgY6AN4/0INgGowinzOFX6NeUQJ/KmAcXrBXx2Rny5v5wCp7LhBIlK21KF2/76fbiCyJvwcd/+Yeb0fjwQ==", "dependencies": { "jwt-decode": "^3.1.2" } }, "node_modules/@tbd54566975/dwn-sdk-js": { "version": "0.2.10", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sdk-js/-/dwn-sdk-js-0.2.10.tgz", + "integrity": "sha512-CoKO8+NciwWNzD4xRoAAgeElqQCXKM4Fc+zEHsUWD0M3E9v67hRWiTHI6AenUfQv1RSEB2H4GHUeUOHuEV72uw==", "dependencies": { "@ipld/dag-cbor": "9.0.3", "@js-temporal/polyfill": "0.4.4", @@ -1917,15 +2566,17 @@ }, "node_modules/@tbd54566975/dwn-sdk-js/node_modules/lru-cache": { "version": "9.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", "engines": { "node": "14 || >=16.14" } }, "node_modules/@tbd54566975/dwn-sql-store": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@tbd54566975/dwn-sql-store/-/dwn-sql-store-0.2.6.tgz", + "integrity": "sha512-N5SSyKGgHoW7ttWW6xrPq4xK7aYfxDvrmXdYEi+eA3qlT+Wzi5HZfrlcSnFIHee9+s56V6WpJw1AQ6XmjZH2QQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@ipld/dag-cbor": "^9.0.5", "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -1939,8 +2590,9 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz", + "integrity": "sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ==", "dev": true, - "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^4.0.0", "multiformats": "^13.0.0" @@ -1952,21 +2604,24 @@ }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/@ipld/dag-cbor/node_modules/multiformats": { "version": "13.0.1", - "dev": true, - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==", + "dev": true }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/cborg": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", + "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==", "dev": true, - "license": "Apache-2.0", "bin": { "cborg": "lib/bin.js" } }, "node_modules/@tbd54566975/dwn-sql-store/node_modules/multiformats": { "version": "12.0.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.0.1.tgz", + "integrity": "sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==", "dev": true, - "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -1974,34 +2629,39 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true }, "node_modules/@types/accepts": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/babel__code-frame": { "version": "7.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.6.tgz", + "integrity": "sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==", + "dev": true }, "node_modules/@types/bencode": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.4.tgz", + "integrity": "sha512-sirDu3HUSG7jZMlhTDvCzSFiPR4lkUYBQA75CoMi6DEf2alFZWJWtHgfjBbb9PachPZhPMB1IlH09deyMNBipQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/body-parser": { "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2009,21 +2669,24 @@ }, "node_modules/@types/chai": { "version": "4.3.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "dev": true }, "node_modules/@types/chai-as-promised": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*" } }, "node_modules/@types/co-body": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.3.tgz", + "integrity": "sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*" @@ -2031,31 +2694,36 @@ }, "node_modules/@types/command-line-args": { "version": "5.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", + "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", + "dev": true }, "node_modules/@types/connect": { "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/content-disposition": { "version": "0.5.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", + "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==", + "dev": true }, "node_modules/@types/convert-source-map": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-2.0.3.tgz", + "integrity": "sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==", + "dev": true }, "node_modules/@types/cookies": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", + "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -2065,21 +2733,24 @@ }, "node_modules/@types/debounce": { "version": "1.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.4.tgz", + "integrity": "sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==", + "dev": true }, "node_modules/@types/dns-packet": { "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.4.tgz", + "integrity": "sha512-R0ORTvCCeujG+upKfV4JlvozKLdQWlpsducXGd1L6ezBChwpjSj9K84F+KoMDsZQ9RhOLTR1hnNrwJHWagY24g==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2087,8 +2758,9 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/eslint": "*", @@ -2097,13 +2769,15 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/express": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2113,8 +2787,9 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.42", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz", + "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2124,49 +2799,57 @@ }, "node_modules/@types/http-assert": { "version": "1.5.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", + "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==", + "dev": true }, "node_modules/@types/http-errors": { "version": "2.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/keygrip": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", + "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", + "dev": true }, "node_modules/@types/koa": { "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.14.0.tgz", + "integrity": "sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==", "dev": true, - "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -2180,54 +2863,63 @@ }, "node_modules/@types/koa-compose": { "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", + "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", "dev": true, - "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/mime": { "version": "1.3.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true }, "node_modules/@types/mocha": { "version": "10.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true }, "node_modules/@types/ms": { "version": "0.7.31", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true }, "node_modules/@types/node": { "version": "20.11.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.13.tgz", + "integrity": "sha512-5G4zQwdiQBSWYTDAH1ctw2eidqdhMJaNsiIDKHFr55ihz5Trl2qqR8fdrT732yPBho5gkNxXm67OxWFBqX9aPg==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/parse5": { "version": "6.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true }, "node_modules/@types/readable-stream": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.6.tgz", + "integrity": "sha512-awa7+N1SSD9xz8ZvEUSO3/N3itc2PMH6Sca11HiX55TVsWiMaIgmbM76lN+2eZOrCQPiFqj0GmgsfsNtNGWoUw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -2235,18 +2927,21 @@ }, "node_modules/@types/resolve": { "version": "1.20.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "node_modules/@types/semver": { "version": "7.5.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true }, "node_modules/@types/send": { "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2254,8 +2949,9 @@ }, "node_modules/@types/serve-static": { "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -2264,29 +2960,33 @@ }, "node_modules/@types/sinon": { "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", + "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "dev": true }, "node_modules/@types/ws": { "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -2294,8 +2994,9 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.0.tgz", + "integrity": "sha512-62o2Hmc7Gs3p8SLfbXcipjWAa6qk2wZGChXG2JbBtYpwSRmti/9KHLqfbLs9uDigOexG+3PaQ9G2g3201FWLKg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.4.0", @@ -2328,8 +3029,9 @@ }, "node_modules/@typescript-eslint/parser": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.20.0", @@ -2356,8 +3058,9 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/types": "6.20.0", @@ -2373,8 +3076,9 @@ }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/types": "6.20.0", @@ -2390,8 +3094,9 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.0.tgz", + "integrity": "sha512-TUS7vaKkPWDVvl7GDNHFQMsMruD+zhkd3SdVW0d7b+7Zo+bd/hXJQ8nsiUZMi1jloWo6c9qt3B7Sqo+flC1nig==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0" @@ -2406,8 +3111,9 @@ }, "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2418,8 +3124,9 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.0.tgz", + "integrity": "sha512-TvqrUFFyGY0cX3WgDHcdl2/mMCWCDv/0thTtx/ODMY1QhEiyFtv/OlLaNIiYLwRpAxAtOLOY9SUf1H3Q3dlwAg==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.4.0", "@typescript-eslint/utils": "6.4.0", @@ -2444,8 +3151,9 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2456,8 +3164,9 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -2482,8 +3191,9 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2495,8 +3205,9 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "@typescript-eslint/types": "6.20.0", @@ -2523,8 +3234,9 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/types": "6.20.0", @@ -2540,8 +3252,9 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.0.tgz", + "integrity": "sha512-BvvwryBQpECPGo8PwF/y/q+yacg8Hn/2XS+DqL/oRsOPK+RPt29h5Ui5dqOKHDlbXrAeHUTnyG3wZA0KTDxRZw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -2564,8 +3277,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2576,8 +3290,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -2602,8 +3317,9 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.0.tgz", + "integrity": "sha512-yJSfyT+uJm+JRDWYRYdCm2i+pmvXJSMtPR9Cq5/XQs4QIgNoLcoRtDdzsLbLsFM/c6um6ohQkg/MLxWvoIndJA==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.4.0", "eslint-visitor-keys": "^3.4.1" @@ -2618,8 +3334,9 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2630,14 +3347,16 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/@web/browser-logs": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", + "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", "dev": true, - "license": "MIT", "dependencies": { "errorstacks": "^2.2.0" }, @@ -2647,16 +3366,18 @@ }, "node_modules/@web/config-loader": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.3.1.tgz", + "integrity": "sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/@web/dev-server": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.4.2.tgz", + "integrity": "sha512-5IS2Rev+DRqIPtIiecOumoj+GZ4volRS6BeX+3mvuMF0OA51pCGhOozqUMVFFpAVuhHScihqIGk1gnHhw9d9kQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", @@ -2683,8 +3404,9 @@ }, "node_modules/@web/dev-server-core": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.1.tgz", + "integrity": "sha512-alHd2j0f4e1ekqYDR8lWScrzR7D5gfsUZq3BP3De9bkFWM3AELINCmqqlVKmCtlkAdEc9VyQvNiEqrxraOdc2A==", "dev": true, - "license": "MIT", "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", @@ -2711,16 +3433,18 @@ }, "node_modules/@web/dev-server-core/node_modules/lru-cache": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/dev-server-rollup": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.1.tgz", + "integrity": "sha512-vhtsQ8qu1pBHailOBOYJwZnYDc1Lmx6ZAd2j+y5PD2ck0R1LmVsZ7dZK8hDCpkvpvlu2ndURjL9tbzdcsBRJmg==", "dev": true, - "license": "MIT", "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.0", @@ -2735,8 +3459,9 @@ }, "node_modules/@web/parse5-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-2.1.0.tgz", + "integrity": "sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse5": "^6.0.1", "parse5": "^6.0.1" @@ -2747,8 +3472,9 @@ }, "node_modules/@web/test-runner": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.0.tgz", + "integrity": "sha512-aAlQrdSqwCie1mxuSK5kM0RYDJZL4Q0Hd5LeXn1on3OtHLtgztL4dZzzNSuAWablR2/Vuve3ChwDDxmYSTqXRg==", "dev": true, - "license": "MIT", "dependencies": { "@web/browser-logs": "^0.4.0", "@web/config-loader": "^0.3.0", @@ -2777,8 +3503,9 @@ }, "node_modules/@web/test-runner-chrome": { "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.15.0.tgz", + "integrity": "sha512-ZqkTJGQ57FDz3lWw+9CKfHuTV64S9GzBy5+0siSQulEVPfGiTzpksx9DohtA3BCLXdbEq4OHg40/XIQJomlc9w==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -2792,8 +3519,9 @@ }, "node_modules/@web/test-runner-commands": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", + "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "mkdirp": "^1.0.4" @@ -2804,8 +3532,9 @@ }, "node_modules/@web/test-runner-core": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", + "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/babel__code-frame": "^7.0.2", @@ -2840,8 +3569,9 @@ }, "node_modules/@web/test-runner-coverage-v8": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz", + "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "istanbul-lib-coverage": "^3.0.0", @@ -2855,16 +3585,18 @@ }, "node_modules/@web/test-runner-coverage-v8/node_modules/lru-cache": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/@web/test-runner-mocha": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz", + "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0" }, @@ -2874,8 +3606,9 @@ }, "node_modules/@web/test-runner-playwright": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.11.0.tgz", + "integrity": "sha512-s+f43DSAcssKYVOD9SuzueUcctJdHzq1by45gAnSCKa9FQcaTbuYe8CzmxA21g+NcL5+ayo4z+MA9PO4H+PssQ==", "dev": true, - "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", @@ -2915,6 +3648,8 @@ }, "node_modules/@web5/dwn-server": { "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@web5/dwn-server/-/dwn-server-0.1.9.tgz", + "integrity": "sha512-t1xpWGQ+hbIglu0OjZS3DG6Q8pmrxK2TmPo53YaxNpceKNT9tkqJqgssiIJzVWiQS90BmR/JULchKR/aQX1sOg==", "dev": true, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", @@ -2942,16 +3677,18 @@ }, "node_modules/@web5/dwn-server/node_modules/uuid": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@web5/dwn-server/node_modules/ws": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", + "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -2982,8 +3719,9 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -2992,26 +3730,30 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -3021,14 +3763,16 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3039,8 +3783,9 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -3048,8 +3793,9 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" @@ -3057,14 +3803,16 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3079,8 +3827,9 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3092,8 +3841,9 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3104,8 +3854,9 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3118,8 +3869,9 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", @@ -3128,19 +3880,22 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0", "peer": true }, "node_modules/abort-controller": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3150,7 +3905,8 @@ }, "node_modules/abstract-level": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", "dependencies": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -3166,8 +3922,9 @@ }, "node_modules/accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3178,8 +3935,9 @@ }, "node_modules/acorn": { "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3189,8 +3947,9 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^8" @@ -3198,16 +3957,18 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -3217,7 +3978,8 @@ }, "node_modules/ajv": { "version": "8.12.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3231,7 +3993,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dependencies": { "ajv": "^8.0.0" }, @@ -3246,16 +4009,18 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -3268,8 +4033,9 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3279,16 +4045,18 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -3298,8 +4066,9 @@ }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3310,20 +4079,23 @@ }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-back": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -3334,20 +4106,23 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -3366,8 +4141,9 @@ }, "node_modules/asn1.js": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -3377,13 +4153,15 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/assert": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -3394,16 +4172,18 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/ast-types": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -3413,31 +4193,35 @@ }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-mutex": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "engines": { "node": ">= 0.4" }, @@ -3447,22 +4231,27 @@ }, "node_modules/b4a": { "version": "1.6.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-arraybuffer": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", "engines": { "node": ">= 0.6.0" } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -3476,20 +4265,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/basic-ftp": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", + "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/bencode": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", + "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", "dependencies": { "uint8-util": "^2.2.2" }, @@ -3499,9 +4289,10 @@ }, "node_modules/better-sqlite3": { "version": "8.7.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.7.0.tgz", + "integrity": "sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" @@ -3509,27 +4300,32 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/bindings": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bintrees": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", + "dev": true }, "node_modules/bittorrent-dht": { "version": "11.0.5", + "resolved": "https://registry.npmjs.org/bittorrent-dht/-/bittorrent-dht-11.0.5.tgz", + "integrity": "sha512-R09D6uNaziRqsc+B/j5QzkjceTak+wH9vcNLnkmt8A52EWF9lQwBP0vvCKgSA3AJOYYl+41n3osA2KYYn/z5uQ==", "funding": [ { "type": "github", @@ -3544,7 +4340,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "bencode": "^4.0.0", "debug": "^4.3.4", @@ -3561,7 +4356,8 @@ }, "node_modules/bl": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -3570,7 +4366,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3582,7 +4379,8 @@ }, "node_modules/blake2b": { "version": "2.1.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", + "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" @@ -3590,7 +4388,8 @@ }, "node_modules/blake2b-wasm": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", + "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -3598,7 +4397,8 @@ }, "node_modules/blockstore-core": { "version": "4.2.0", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/blockstore-core/-/blockstore-core-4.2.0.tgz", + "integrity": "sha512-F8BCobc75D+9/+hUD+5cixbU6zmZA+lBgNiuBkNlJqRgmAaBBvLOQF6Ad9Jei0Nvmy2a1jaF4CiN76W1apIghA==", "dependencies": { "err-code": "^3.0.1", "interface-blockstore": "^5.0.0", @@ -3612,13 +4412,15 @@ }, "node_modules/bn.js": { "version": "5.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true }, "node_modules/body-parser": { "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -3640,21 +4442,24 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/body-parser/node_modules/qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -3667,8 +4472,9 @@ }, "node_modules/body-parser/node_modules/raw-body": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -3681,20 +4487,23 @@ }, "node_modules/bowser": { "version": "2.11.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -3704,12 +4513,14 @@ }, "node_modules/brorand": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true }, "node_modules/browser-level": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.1", @@ -3719,21 +4530,24 @@ }, "node_modules/browser-resolve": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve": "^1.17.0" } }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -3745,8 +4559,9 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -3755,8 +4570,9 @@ }, "node_modules/browserify-des": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -3766,8 +4582,9 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -3775,8 +4592,9 @@ }, "node_modules/browserify-sign": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", "dev": true, - "license": "ISC", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -3794,8 +4612,9 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3807,6 +4626,8 @@ }, "node_modules/browserify-sign/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -3821,19 +4642,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/browserify-zlib": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -3849,7 +4672,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001580", @@ -3866,6 +4688,8 @@ }, "node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -3880,7 +4704,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -3888,35 +4711,40 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/buffer-writer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/buffer-xor": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true }, "node_modules/builtin-modules": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -3926,29 +4754,33 @@ }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true }, "node_modules/builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/c8": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.0.0.tgz", + "integrity": "sha512-nFJhU2Cz6Frh2awk3IW7wwk3wx27/U2v8ojQCHGc1GWTCHS6aMu4lal327/ZnnYj7oSThGF1X3qUP1yzAJBcOQ==", "dev": true, - "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", @@ -3971,8 +4803,9 @@ }, "node_modules/cache-content-type": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -3983,7 +4816,8 @@ }, "node_modules/call-bind": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", @@ -3995,16 +4829,18 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4014,6 +4850,8 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001581", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", + "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", "dev": true, "funding": [ { @@ -4029,38 +4867,42 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "CC-BY-4.0", "peer": true }, "node_modules/canonicalize": { "version": "2.0.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" }, "node_modules/catering": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", "engines": { "node": ">=6" } }, "node_modules/cborg": { "version": "2.0.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-2.0.5.tgz", + "integrity": "sha512-xVW1rSIw1ZXbkwl2XhJ7o/jAv0vnVoQv/QlfQxV8a7V5PlA4UU/AcIiXqmpyybwNWy/GPQU1m/aBVNIWr7/T0w==", "bin": { "cborg": "cli.js" } }, "node_modules/chacha20-universal": { "version": "1.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/chacha20-universal/-/chacha20-universal-1.0.4.tgz", + "integrity": "sha512-/IOxdWWNa7nRabfe7+oF+jVkGjlr2xUL4J8l/OvzZhj+c9RpMqoo3Dq+5nU1j/BflRV4BKnaQ4+4oH1yBpQG1Q==", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/chai": { "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -4076,8 +4918,9 @@ }, "node_modules/chai-as-promised": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -4087,8 +4930,9 @@ }, "node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4100,8 +4944,9 @@ }, "node_modules/chalk-template": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -4114,8 +4959,9 @@ }, "node_modules/chalk-template/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4128,8 +4974,9 @@ }, "node_modules/chalk-template/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4143,8 +4990,9 @@ }, "node_modules/chalk-template/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4154,21 +5002,24 @@ }, "node_modules/chalk-template/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/chalk-template/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/chalk-template/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4178,16 +5029,18 @@ }, "node_modules/charenc": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -4197,6 +5050,8 @@ }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -4204,7 +5059,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4223,11 +5077,14 @@ }, "node_modules/chownr": { "version": "1.1.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "node_modules/chrome-dgram": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.6.tgz", + "integrity": "sha512-bqBsUuaOiXiqxXt/zA/jukNJJ4oaOtc7ciwqJpZVEaaXwwxqgI2/ZdG02vXYWUhHGziDlvGMQWk0qObgJwVYKA==", "funding": [ { "type": "github", @@ -4242,7 +5099,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "run-series": "^1.1.9" @@ -4250,15 +5106,17 @@ }, "node_modules/chrome-dns": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chrome-dns/-/chrome-dns-1.0.1.tgz", + "integrity": "sha512-HqsYJgIc8ljJJOqOzLphjAs79EUuWSX3nzZi2LNkzlw3GIzAeZbaSektC8iT/tKvLqZq8yl1GJu5o6doA4TRbg==", "dependencies": { "chrome-net": "^3.3.2" } }, "node_modules/chrome-launcher": { "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -4274,8 +5132,9 @@ }, "node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4285,6 +5144,8 @@ }, "node_modules/chrome-net": { "version": "3.3.4", + "resolved": "https://registry.npmjs.org/chrome-net/-/chrome-net-3.3.4.tgz", + "integrity": "sha512-Jzy2EnzmE+ligqIZUsmWnck9RBXLuUy6CaKyuNMtowFG3ZvLt8d+WBJCTPEludV0DHpIKjAOlwjFmTaEdfdWCw==", "funding": [ { "type": "github", @@ -4299,15 +5160,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "inherits": "^2.0.1" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.0" @@ -4315,8 +5176,9 @@ }, "node_modules/chromium-bidi": { "version": "0.4.16", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", + "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "mitt": "3.0.0" }, @@ -4326,8 +5188,9 @@ }, "node_modules/cipher-base": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4335,8 +5198,9 @@ }, "node_modules/classic-level": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz", + "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", @@ -4350,8 +5214,9 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4361,8 +5226,9 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4374,8 +5240,9 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4388,8 +5255,9 @@ }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4399,18 +5267,21 @@ }, "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4422,8 +5293,9 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4438,16 +5310,18 @@ }, "node_modules/clone": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -4455,8 +5329,9 @@ }, "node_modules/co-body": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", "dev": true, - "license": "MIT", "dependencies": { "inflation": "^2.0.0", "qs": "^6.5.2", @@ -4466,21 +5341,24 @@ }, "node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/command-line-args": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -4493,8 +5371,9 @@ }, "node_modules/command-line-usage": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", + "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -4507,44 +5386,52 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/console-browserify": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/constants-browserify": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -4554,6 +5441,8 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -4568,39 +5457,43 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/content-type": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true }, "node_modules/cookies": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -4611,8 +5504,9 @@ }, "node_modules/cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, - "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -4623,8 +5517,9 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -4632,13 +5527,15 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/create-hash": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -4649,8 +5546,9 @@ }, "node_modules/create-hmac": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -4662,19 +5560,22 @@ }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-fetch": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -4692,15 +5593,18 @@ }, "node_modules/cross-fetch/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/cross-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/cross-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -4708,8 +5612,9 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4721,13 +5626,15 @@ }, "node_modules/cross-spawn/node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4740,16 +5647,18 @@ }, "node_modules/crypt": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/crypto-browserify": { "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -4769,20 +5678,23 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/debounce": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -4797,12 +5709,14 @@ }, "node_modules/debug/node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4812,8 +5726,9 @@ }, "node_modules/decompress-response": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -4826,8 +5741,9 @@ }, "node_modules/deep-eql": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -4837,32 +5753,37 @@ }, "node_modules/deep-equal": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/define-data-property": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -4874,15 +5795,17 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4897,8 +5820,9 @@ }, "node_modules/degenerator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -4910,37 +5834,42 @@ }, "node_modules/delegates": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/denque": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-graph": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/des.js": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -4948,8 +5877,9 @@ }, "node_modules/destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4957,33 +5887,38 @@ }, "node_modules/detect-libc": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/devtools-protocol": { "version": "0.0.1147663", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", + "dev": true }, "node_modules/did-resolver": { "version": "4.1.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" }, "node_modules/diff": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -4992,13 +5927,15 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -5008,7 +5945,8 @@ }, "node_modules/dns-packet": { "version": "5.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -5018,8 +5956,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5029,8 +5968,9 @@ }, "node_modules/domain-browser": { "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", "dev": true, - "license": "Artistic-2.0", "engines": { "node": ">=10" }, @@ -5040,12 +5980,14 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/eciesjs": { "version": "0.4.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.5.tgz", + "integrity": "sha512-2zSRIygO48LpdS95Rwt9ryIkJNO37IdbkjRsnYyAn7gx7e4WPBNimnk6jGNdx2QQYr/VJRPnSVdwQpO5bycYZw==", "dependencies": { "@noble/ciphers": "^0.3.0", "@noble/curves": "^1.2.0", @@ -5057,26 +5999,30 @@ }, "node_modules/eciesjs/node_modules/@noble/ciphers": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.3.0.tgz", + "integrity": "sha512-ldbrnOjmNRwFdXcTM6uXDcxpMIFrbzAWNnpBPp4oTJTFF0XByGD6vf45WrehZGXRQTRVV+Zm8YP+EgEf+e4cWA==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/ee-first": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true }, "node_modules/electron-to-chromium": { "version": "1.4.651", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.651.tgz", + "integrity": "sha512-jjks7Xx+4I7dslwsbaFocSwqBbGHQmuXBJUK9QBZTIrzPq3pzn6Uf2szFSP728FtLYE3ldiccmlkOM/zhGKCpA==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/elliptic": { "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5089,34 +6035,39 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -5128,16 +6079,19 @@ }, "node_modules/err-code": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" }, "node_modules/errorstacks": { "version": "2.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.1.tgz", + "integrity": "sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==", + "dev": true }, "node_modules/es-abstract": { "version": "1.22.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", @@ -5188,12 +6142,14 @@ }, "node_modules/es-module-lexer": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true }, "node_modules/es-set-tostringtag": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -5205,7 +6161,8 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5220,9 +6177,10 @@ }, "node_modules/esbuild": { "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", + "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5256,29 +6214,33 @@ }, "node_modules/escalade": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -5297,8 +6259,9 @@ }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -5306,8 +6269,9 @@ }, "node_modules/eslint": { "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -5361,8 +6325,9 @@ }, "node_modules/eslint-plugin-mocha": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz", + "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==", "dev": true, - "license": "MIT", "dependencies": { "eslint-utils": "^3.0.0", "rambda": "^7.1.0" @@ -5376,8 +6341,9 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5391,8 +6357,9 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -5408,16 +6375,18 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5427,8 +6396,9 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5443,8 +6413,9 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "color-convert": "^2.0.1" @@ -5458,8 +6429,9 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -5468,8 +6440,9 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -5484,8 +6457,9 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "color-name": "~1.1.4" @@ -5496,14 +6470,16 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -5514,8 +6490,9 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.3" @@ -5526,8 +6503,9 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -5535,14 +6513,16 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -5553,8 +6533,9 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -5565,8 +6546,9 @@ }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5581,7 +6563,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5592,8 +6575,9 @@ }, "node_modules/esquery": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5603,8 +6587,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5614,54 +6599,62 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "5.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/events": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -5669,16 +6662,18 @@ }, "node_modules/expand-template": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, - "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/express": { "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -5718,21 +6713,24 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/express/node_modules/qs": { "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -5745,6 +6743,8 @@ }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -5759,13 +6759,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -5783,8 +6783,9 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5797,17 +6798,20 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-fifo": { "version": "1.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5821,15 +6825,19 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-xml-parser": { "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", "funding": [ { "type": "paypal", @@ -5840,7 +6848,6 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -5850,22 +6857,26 @@ }, "node_modules/fastq": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fetch-blob": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -5877,7 +6888,6 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -5888,8 +6898,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -5899,13 +6910,15 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true }, "node_modules/fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5915,8 +6928,9 @@ }, "node_modules/finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -5932,21 +6946,24 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/find-replace": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -5956,8 +6973,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5971,15 +6989,18 @@ }, "node_modules/flat": { "version": "5.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -5991,8 +7012,9 @@ }, "node_modules/flat-cache/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6000,8 +7022,9 @@ }, "node_modules/flat-cache/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6019,8 +7042,9 @@ }, "node_modules/flat-cache/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6030,8 +7054,9 @@ }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6044,20 +7069,23 @@ }, "node_modules/flatted": { "version": "3.2.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/for-each": { "version": "0.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6071,8 +7099,9 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, - "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -6082,29 +7111,33 @@ }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -6116,13 +7149,16 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -6133,14 +7169,16 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6156,38 +7194,43 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/generate-function": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "dev": true, - "license": "MIT", "dependencies": { "is-property": "^1.0.2" } }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", @@ -6200,8 +7243,9 @@ }, "node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -6211,7 +7255,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -6225,8 +7270,9 @@ }, "node_modules/get-uri": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dev": true, - "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.0", @@ -6239,21 +7285,24 @@ }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/github-from-package": { "version": "0.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true }, "node_modules/glob": { "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -6273,8 +7322,9 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6284,14 +7334,16 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause", "peer": true }, "node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -6304,7 +7356,8 @@ }, "node_modules/globalthis": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dependencies": { "define-properties": "^1.1.3" }, @@ -6317,8 +7370,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6336,7 +7390,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6346,24 +7401,28 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graceful-goodbye": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graceful-goodbye/-/graceful-goodbye-1.3.0.tgz", + "integrity": "sha512-hcZOs20emYlTM7MmUE0FpuZcjlk2GPsR+UYTHDeWxtGjXcbh2CawGi8vlzqsIvspqAbot7mRv3sC/uhgtKc4hQ==", "dependencies": { "safety-catch": "^1.0.2" } }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/hamt-sharding": { "version": "3.0.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.2.tgz", + "integrity": "sha512-f0DzBD2tSmLFdFsLAvOflIBqFPjerbA7BfmwO8mVho/5hXwgyyYhv+ijIzidQf/DpDX3bRjAQvhGoBFj+DBvPw==", "dependencies": { "sparse-array": "^1.3.1", "uint8arrays": "^4.0.2" @@ -6375,22 +7434,25 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { "get-intrinsic": "^1.2.2" }, @@ -6400,7 +7462,8 @@ }, "node_modules/has-proto": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { "node": ">= 0.4" }, @@ -6410,7 +7473,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -6420,7 +7484,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { "has-symbols": "^1.0.2" }, @@ -6433,8 +7498,9 @@ }, "node_modules/hash-base": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -6446,8 +7512,9 @@ }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6459,6 +7526,8 @@ }, "node_modules/hash-base/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -6473,17 +7542,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/hash-wasm": { "version": "4.9.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", + "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" }, "node_modules/hash.js": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -6491,7 +7561,8 @@ }, "node_modules/hasown": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { "function-bind": "^1.1.2" }, @@ -6501,16 +7572,18 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hmac-drbg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -6519,8 +7592,9 @@ }, "node_modules/hosted-git-info": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -6530,13 +7604,15 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/http-assert": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, - "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -6547,16 +7623,18 @@ }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-assert/node_modules/http-errors": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -6570,16 +7648,18 @@ }, "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -6593,8 +7673,9 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -6605,13 +7686,15 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true }, "node_modules/https-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -6622,8 +7705,9 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6633,6 +7717,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -6646,21 +7732,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6674,24 +7761,27 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflation": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", + "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6699,16 +7789,19 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/interface-blockstore": { "version": "5.2.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.2.3.tgz", + "integrity": "sha512-15cN+ZFdcVXdXo6I/SrSzFDsuJyDTyEI52XuvXQlR/G5fe3cK8p0tvVjfu5diRQH1XqNgmJEdMPixyt0xgjtvQ==", "dependencies": { "interface-store": "^5.0.0", "multiformats": "^11.0.2" @@ -6720,7 +7813,8 @@ }, "node_modules/interface-store": { "version": "5.1.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.2.tgz", + "integrity": "sha512-q2sLoqC+UdaWnjwGyghsH0jwqqVk226lsG207e3QwPB8sAZYmYIWUnJwJH3JjFNNRV9e6CUTmm+gDO0Xg4KRiw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -6728,7 +7822,8 @@ }, "node_modules/internal-slot": { "version": "1.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", @@ -6740,20 +7835,23 @@ }, "node_modules/ip": { "version": "1.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/ipfs-unixfs": { "version": "11.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.1.3.tgz", + "integrity": "sha512-sy6Koojwm/EcM8yvDlycRYA89C8wIcLcGTMMpqnCPUtqTCdl+JxsuPNCBgAu7tmO8Nipm7Tv7f0g/erxTGKKRA==", "dependencies": { "err-code": "^3.0.1", "protons-runtime": "^5.0.0", @@ -6762,7 +7860,8 @@ }, "node_modules/ipfs-unixfs-exporter": { "version": "13.1.5", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.1.5.tgz", + "integrity": "sha512-O5aMawsHoe4DaYk5FFil2EPrNOaU3pkHC6qUR5JMnW7es93W3b/RjJoO7AyDL1rpb+M3K0oRu86Yc5wLNQQ8jg==", "dependencies": { "@ipld/dag-cbor": "^9.0.0", "@ipld/dag-pb": "^4.0.0", @@ -6789,7 +7888,8 @@ }, "node_modules/ipfs-unixfs-importer": { "version": "15.1.5", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.1.5.tgz", + "integrity": "sha512-TXaOI0M5KNpq2+qLw8AIYd0Lnc0gWTKCBqUd9eErBUwaP3Fna4qauF+JX9Rj2UrwaOvG/1xbF8Vm+92eOcKWMA==", "dependencies": { "@ipld/dag-pb": "^4.0.0", "@multiformats/murmur3": "^2.0.0", @@ -6815,8 +7915,9 @@ }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6830,7 +7931,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -6842,7 +7944,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { "has-bigints": "^1.0.1" }, @@ -6852,8 +7955,9 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6863,7 +7967,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6877,6 +7982,8 @@ }, "node_modules/is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -6891,15 +7998,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-builtin-module": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, - "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -6912,7 +8019,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -6922,8 +8030,9 @@ }, "node_modules/is-core-module": { "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -6933,7 +8042,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6946,8 +8056,9 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -6960,24 +8071,27 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6990,8 +8104,9 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7001,13 +8116,15 @@ }, "node_modules/is-module": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true }, "node_modules/is-nan": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -7021,7 +8138,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -7031,15 +8149,17 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7052,28 +8172,32 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-property": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true }, "node_modules/is-regex": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7087,7 +8211,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { "call-bind": "^1.0.2" }, @@ -7097,8 +8222,9 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7108,7 +8234,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7121,7 +8248,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7134,7 +8262,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -7147,8 +8276,9 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7158,7 +8288,8 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { "call-bind": "^1.0.2" }, @@ -7168,8 +8299,9 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -7179,12 +8311,14 @@ }, "node_modules/isarray": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isbinaryfile": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", + "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.0.0" }, @@ -7194,32 +8328,36 @@ }, "node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -7231,16 +8369,18 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7250,8 +8390,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -7262,62 +8403,73 @@ }, "node_modules/it-all": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz", + "integrity": "sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ==" }, "node_modules/it-batch": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.4.tgz", + "integrity": "sha512-WRu2mqOYIs+T9k7+yxSK9VJdk0UE4R0jKQsWQcti5c6vhb1FhjC2+yCB5XBrctQ9edNfCMU/wVzdDj8qSwimbA==" }, "node_modules/it-filter": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz", + "integrity": "sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-first": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", + "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" }, "node_modules/it-last": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.4.tgz", + "integrity": "sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q==" }, "node_modules/it-map": { "version": "3.0.5", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz", + "integrity": "sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w==", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-merge": { "version": "3.0.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz", + "integrity": "sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA==", "dependencies": { "it-pushable": "^3.2.0" } }, "node_modules/it-parallel": { "version": "3.0.6", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.6.tgz", + "integrity": "sha512-i7UM7I9LTkDJw3YIqXHFAPZX6CWYzGc+X3irdNrVExI4vPazrJdI7t5OqrSVN8CONXLAunCiqaSV/zZRbQR56A==", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-parallel-batch": { "version": "3.0.4", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.4.tgz", + "integrity": "sha512-O1omh8ss8+UtXiMjE+8kM5C20DT0Ma4VtKVfrSHOJU0UHZ+iWBXarabzPYEp+WiuQmrv+klDPPlTZ9KaLN9xOA==", "dependencies": { "it-batch": "^3.0.0" } }, "node_modules/it-peekable": { "version": "3.0.3", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz", + "integrity": "sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w==" }, "node_modules/it-pipe": { "version": "3.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", "dependencies": { "it-merge": "^3.0.0", "it-pushable": "^3.1.2", @@ -7330,14 +8482,16 @@ }, "node_modules/it-pushable": { "version": "3.2.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", "dependencies": { "p-defer": "^4.0.0" } }, "node_modules/it-stream-types": { "version": "2.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", + "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -7345,8 +8499,9 @@ }, "node_modules/jackspeak": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7362,8 +8517,9 @@ }, "node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -7376,8 +8532,9 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -7385,8 +8542,9 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -7400,13 +8558,15 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7416,57 +8576,67 @@ }, "node_modules/jsbi": { "version": "4.3.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", + "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, - "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/just-extend": { "version": "6.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true }, "node_modules/jwt-decode": { "version": "3.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, "node_modules/k-bucket": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz", + "integrity": "sha512-Fac7iINEovXIWU20GPnOMLUbjctiS+cnmyjC4zAUgvs3XPf1vo9akfCHkigftSic/jiKqKl+KA3a/vFcJbHyCg==", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/k-rpc": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-rpc/-/k-rpc-5.1.0.tgz", + "integrity": "sha512-FGc+n70Hcjoa/X2JTwP+jMIOpBz+pkRffHnSl9yrYiwUxg3FIgD50+u1ePfJUOnRCnx6pbjmVk5aAeB1wIijuQ==", "dependencies": { "k-bucket": "^5.0.0", "k-rpc-socket": "^1.7.2", @@ -7475,7 +8645,8 @@ }, "node_modules/k-rpc-socket": { "version": "1.11.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.11.1.tgz", + "integrity": "sha512-8xtA8oqbZ6v1Niryp2/g4GxW16EQh5MvrUylQoOG+zcrDff5CKttON2XUXvMwlIHq4/2zfPVFiinAccJ+WhxoA==", "dependencies": { "bencode": "^2.0.0", "chrome-dgram": "^3.0.2", @@ -7485,12 +8656,14 @@ }, "node_modules/k-rpc-socket/node_modules/bencode": { "version": "2.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bencode/-/bencode-2.0.3.tgz", + "integrity": "sha512-D/vrAD4dLVX23NalHwb8dSvsUsxeRPO8Y7ToKA015JQYq69MLDOMkC0uGZYA/MPpltLO8rt8eqFC2j8DxjTZ/w==" }, "node_modules/keygrip": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, - "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -7500,16 +8673,18 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/koa": { "version": "2.15.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.0.tgz", + "integrity": "sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -7541,13 +8716,15 @@ }, "node_modules/koa-compose": { "version": "4.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true }, "node_modules/koa-convert": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, - "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -7558,16 +8735,18 @@ }, "node_modules/koa-etag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", "dev": true, - "license": "MIT", "dependencies": { "etag": "^1.8.1" } }, "node_modules/koa-send": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "http-errors": "^1.7.3", @@ -7579,16 +8758,18 @@ }, "node_modules/koa-send/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-send/node_modules/http-errors": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7602,16 +8783,18 @@ }, "node_modules/koa-send/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa-static": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.1.0", "koa-send": "^5.0.0" @@ -7622,16 +8805,18 @@ }, "node_modules/koa-static/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/koa/node_modules/http-errors": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7645,39 +8830,45 @@ }, "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/kysely": { "version": "0.26.3", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.26.3.tgz", + "integrity": "sha512-yWSgGi9bY13b/W06DD2OCDDHQmq1kwTGYlQ4wpZkMOJqMGCstVCFIvxCCVG4KfY1/3G0MhDAcZsip/Lw8/vJWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/last-one-wins": { "version": "1.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/last-one-wins/-/last-one-wins-1.0.4.tgz", + "integrity": "sha512-t+KLJFkHPQk8lfN6WBOiGkiUXoub+gnb2XTYI2P3aiISL+94xgZ1vgz1SXN/N4hthuOoLXarXfBZPUruyjQtfA==" }, "node_modules/layerr": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/layerr/-/layerr-2.0.1.tgz", + "integrity": "sha512-z0730CwG/JO24evdORnyDkwG1Q7b7mF2Tp1qRQ0YvrMMARbt1DFG694SOv439Gm7hYKolyZyaB49YIrYIfZBdg==" }, "node_modules/level": { "version": "8.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", "dependencies": { "browser-level": "^1.0.1", "classic-level": "^1.2.0" @@ -7692,14 +8883,16 @@ }, "node_modules/level-supports": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", "engines": { "node": ">=12" } }, "node_modules/level-transcoder": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", "dependencies": { "buffer": "^6.0.3", "module-error": "^1.0.1" @@ -7710,8 +8903,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7722,8 +8916,9 @@ }, "node_modules/lighthouse-logger": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" @@ -7731,21 +8926,24 @@ }, "node_modules/lighthouse-logger/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -7753,8 +8951,9 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -7767,32 +8966,38 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.assignwith": { "version": "4.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==", + "dev": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7806,8 +9011,9 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7820,8 +9026,9 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7835,8 +9042,9 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7846,21 +9054,24 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7870,8 +9081,9 @@ }, "node_modules/log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -7887,8 +9099,9 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7901,8 +9114,9 @@ }, "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7912,18 +9126,21 @@ }, "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7935,8 +9152,9 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7948,8 +9166,9 @@ }, "node_modules/loglevel": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz", + "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -7960,25 +9179,29 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true }, "node_modules/long": { "version": "5.2.3", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lru": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lru/-/lru-3.1.0.tgz", + "integrity": "sha512-5OUtoiVIGU4VXBOshidmtOsvBIvcQR6FD/RzWSvaeHyxCGB+PCUCu+52lqMfdc0h/2CLvHhZS4TwUmMQrrMbBQ==", "dependencies": { "inherits": "^2.0.1" }, @@ -7988,16 +9211,18 @@ }, "node_modules/lru-cache": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, - "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -8010,13 +9235,15 @@ }, "node_modules/marky": { "version": "1.2.5", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true }, "node_modules/md5": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -8025,8 +9252,9 @@ }, "node_modules/md5.js": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -8035,48 +9263,55 @@ }, "node_modules/md5/node_modules/is-buffer": { "version": "1.1.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -8087,8 +9322,9 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -8099,13 +9335,15 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8115,16 +9353,18 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8134,16 +9374,18 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8153,18 +9395,21 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, "node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8177,28 +9422,32 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true }, "node_modules/mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -8208,13 +9457,15 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "node_modules/mocha": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -8252,8 +9503,9 @@ }, "node_modules/mocha-junit-reporter": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", + "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4", "md5": "^2.3.0", @@ -8267,8 +9519,9 @@ }, "node_modules/mocha-junit-reporter/node_modules/mkdirp": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -8281,8 +9534,9 @@ }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8295,8 +9549,9 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -8305,8 +9560,9 @@ }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8316,26 +9572,30 @@ }, "node_modules/mocha/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8345,8 +9605,9 @@ }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8364,8 +9625,9 @@ }, "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8373,8 +9635,9 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8384,16 +9647,18 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8403,8 +9668,9 @@ }, "node_modules/mocha/node_modules/nanoid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8414,8 +9680,9 @@ }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8427,8 +9694,9 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8441,8 +9709,9 @@ }, "node_modules/mocha/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8457,8 +9726,9 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8474,26 +9744,31 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/module-error": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multibase": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "deprecated": "This module has been superseded by the multiformats module", "dependencies": { "@multiformats/base-x": "^4.0.1" }, @@ -8504,7 +9779,8 @@ }, "node_modules/multiformats": { "version": "11.0.2", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -8512,7 +9788,8 @@ }, "node_modules/multihashes": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", + "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", "dependencies": { "multibase": "^4.0.1", "uint8arrays": "^3.0.0", @@ -8525,30 +9802,35 @@ }, "node_modules/multihashes/node_modules/multiformats": { "version": "9.9.0", - "license": "(Apache-2.0 AND MIT)" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" }, "node_modules/multihashes/node_modules/uint8arrays": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", "dependencies": { "multiformats": "^9.4.2" } }, "node_modules/multihashes/node_modules/varint": { "version": "5.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" }, "node_modules/murmurhash3js-revisited": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", + "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", "engines": { "node": ">=8.0.0" } }, "node_modules/mysql2": { "version": "3.9.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.1.tgz", + "integrity": "sha512-3njoWAAhGBYy0tWBabqUQcLtczZUxrmmtc2vszQUekg3kTJyZ5/IeLC3Fo04u6y6Iy5Sba7pIIa2P/gs8D3ZeQ==", "dev": true, - "license": "MIT", "dependencies": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -8565,8 +9847,9 @@ }, "node_modules/mysql2/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -8576,16 +9859,18 @@ }, "node_modules/mysql2/node_modules/lru-cache": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", "dev": true, - "license": "ISC", "engines": { "node": ">=16.14" } }, "node_modules/named-placeholders": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "dev": true, - "license": "MIT", "dependencies": { "lru-cache": "^7.14.1" }, @@ -8595,30 +9880,34 @@ }, "node_modules/named-placeholders/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/nanoassert": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", + "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" }, "node_modules/nanocolors": { "version": "0.2.13", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8628,44 +9917,51 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true }, "node_modules/napi-macros": { "version": "2.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/netmask": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/nise": { "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", @@ -8676,21 +9972,24 @@ }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/nise/node_modules/path-to-regexp": { "version": "6.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true }, "node_modules/node-abi": { "version": "3.54.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", + "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -8700,6 +9999,8 @@ }, "node_modules/node-domexception": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -8711,15 +10012,15 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dev": true, - "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -8735,7 +10036,8 @@ }, "node_modules/node-gyp-build": { "version": "4.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -8744,14 +10046,16 @@ }, "node_modules/node-releases": { "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/node-stdlib-browser": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", "dev": true, - "license": "MIT", "dependencies": { "assert": "^2.0.0", "browser-resolve": "^2.0.0", @@ -8787,6 +10091,8 @@ }, "node_modules/node-stdlib-browser/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -8802,7 +10108,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -8810,8 +10115,9 @@ }, "node_modules/node-stdlib-browser/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8823,8 +10129,9 @@ }, "node_modules/normalize-package-data": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -8837,16 +10144,18 @@ }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-install-checks": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -8856,16 +10165,18 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^3.0.0", @@ -8878,8 +10189,9 @@ }, "node_modules/npm-pick-manifest": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", "dev": true, - "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -8892,23 +10204,26 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -8922,14 +10237,16 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -8945,8 +10262,9 @@ }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -8956,24 +10274,27 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -8986,12 +10307,15 @@ }, "node_modules/only": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", "dev": true }, "node_modules/open": { "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, - "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -9006,8 +10330,9 @@ }, "node_modules/optionator": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -9022,12 +10347,14 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true }, "node_modules/p-defer": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", "engines": { "node": ">=12" }, @@ -9037,8 +10364,9 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9051,8 +10379,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9065,7 +10394,8 @@ }, "node_modules/p-queue": { "version": "7.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^5.0.2" @@ -9079,7 +10409,8 @@ }, "node_modules/p-timeout": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "engines": { "node": ">=12" }, @@ -9089,8 +10420,9 @@ }, "node_modules/pac-proxy-agent": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", @@ -9107,8 +10439,9 @@ }, "node_modules/pac-resolver": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "dev": true, - "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "ip": "^1.1.8", @@ -9120,18 +10453,21 @@ }, "node_modules/packet-reader": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", + "dev": true }, "node_modules/pako": { "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9141,8 +10477,9 @@ }, "node_modules/parse-asn1": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "license": "ISC", "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -9153,55 +10490,63 @@ }, "node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-browserify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -9215,29 +10560,33 @@ }, "node_modules/path-to-regexp": { "version": "0.1.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -9251,13 +10600,15 @@ }, "node_modules/pend": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/pg": { "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -9284,48 +10635,55 @@ }, "node_modules/pg-cloudflare": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { "version": "2.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", + "dev": true }, "node_modules/pg-cursor": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.10.3.tgz", + "integrity": "sha512-rDyBVoqPVnx/PTmnwQAYgusSeAKlTL++gmpf5klVK+mYMFEqsOc6VHHZnPKc/4lOvr4r6fiMuoxSFuBF1dx4FQ==", "dev": true, - "license": "MIT", "peerDependencies": { "pg": "^8" } }, "node_modules/pg-int8": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", "dev": true, - "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-pool": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", "dev": true, - "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { "version": "1.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==", + "dev": true }, "node_modules/pg-types": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "dev": true, - "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -9339,22 +10697,25 @@ }, "node_modules/pgpass": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "dev": true, - "license": "MIT", "dependencies": { "split2": "^4.1.0" } }, "node_modules/picocolors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9364,7 +10725,8 @@ }, "node_modules/pkarr": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pkarr/-/pkarr-1.1.1.tgz", + "integrity": "sha512-X27LKqf83X3WuJd2Z9qdfVxkmfOu6HUbY0pm11LqeBbFmgmZRPgOxJG8bKiIsmmD6Vjc25j45KHYflF2lfodyQ==", "dependencies": { "bencode": "^3.0.3", "bittorrent-dht": "^11.0.4", @@ -9380,7 +10742,8 @@ }, "node_modules/pkarr/node_modules/bencode": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-3.1.1.tgz", + "integrity": "sha512-btsxX9201yoWh45TdqYg6+OZ5O1xTYKTYSGvJndICDFtznE/9zXgow8yjMvvhOqKKuzuL7h+iiCMpfkG8+QuBA==", "dependencies": { "uint8-util": "^2.1.6" }, @@ -9390,7 +10753,8 @@ }, "node_modules/pkarr/node_modules/chalk": { "version": "5.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -9400,8 +10764,9 @@ }, "node_modules/pkg-dir": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -9411,8 +10776,9 @@ }, "node_modules/playwright": { "version": "1.40.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", + "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "playwright-core": "1.40.1" }, @@ -9428,8 +10794,9 @@ }, "node_modules/playwright-core": { "version": "1.40.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", + "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", "dev": true, - "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -9439,8 +10806,10 @@ }, "node_modules/playwright/node_modules/fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -9451,8 +10820,9 @@ }, "node_modules/portfinder": { "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, - "license": "MIT", "dependencies": { "async": "^2.6.4", "debug": "^3.2.7", @@ -9464,16 +10834,18 @@ }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/portfinder/node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -9483,32 +10855,36 @@ }, "node_modules/postgres-array": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/postgres-bytea": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-date": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postgres-interval": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "dev": true, - "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -9518,8 +10894,9 @@ }, "node_modules/prebuild-install": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, - "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -9543,38 +10920,43 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/proc-log": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process": { "version": "0.11.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { "node": ">= 0.6.0" } }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/progress-events": { "version": "1.0.0", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.0.tgz", + "integrity": "sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -9582,8 +10964,9 @@ }, "node_modules/prom-client": { "version": "14.2.0", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", + "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tdigest": "^0.1.1" }, @@ -9593,13 +10976,15 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -9610,12 +10995,14 @@ }, "node_modules/promise-retry/node_modules/err-code": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/protons-runtime": { "version": "5.3.0", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.3.0.tgz", + "integrity": "sha512-RySXxx+jvz4mi/rr2VsnvgWvC6dFP2pVyWpVRFYb/jxmwih862ZjXJLUkjd+nOtXBx0Lwk2xeuY2f2fmd3FT9w==", "dependencies": { "uint8-varint": "^2.0.2", "uint8arraylist": "^2.4.3", @@ -9624,19 +11011,22 @@ }, "node_modules/protons-runtime/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/protons-runtime/node_modules/uint8arrays": { "version": "5.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -9647,8 +11037,9 @@ }, "node_modules/proxy-agent": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -9665,21 +11056,24 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -9691,13 +11085,15 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -9705,13 +11101,15 @@ }, "node_modules/punycode": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true }, "node_modules/puppeteer-core": { "version": "20.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", + "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", @@ -9734,8 +11132,9 @@ }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9754,8 +11153,9 @@ }, "node_modules/qs": { "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -9768,6 +11168,8 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" @@ -9775,6 +11177,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -9788,17 +11192,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/queue-tick": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "node_modules/rabin-wasm": { "version": "0.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", + "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", "dependencies": { "@assemblyscript/loader": "^0.9.4", "bl": "^5.0.0", @@ -9813,7 +11218,8 @@ }, "node_modules/rabin-wasm/node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9831,7 +11237,8 @@ }, "node_modules/rabin-wasm/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9843,15 +11250,18 @@ }, "node_modules/rabin-wasm/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/rabin-wasm/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/rabin-wasm/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -9859,20 +11269,23 @@ }, "node_modules/rambda": { "version": "7.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", + "dev": true }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, - "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -9880,16 +11293,18 @@ }, "node_modules/range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -9902,8 +11317,9 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -9916,15 +11332,17 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/readable-stream": { "version": "4.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -9938,7 +11356,8 @@ }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dependencies": { "readable-stream": "^3.6.0" }, @@ -9952,7 +11371,8 @@ }, "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9964,8 +11384,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -9975,14 +11396,16 @@ }, "node_modules/record-cache": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/record-cache/-/record-cache-1.2.0.tgz", + "integrity": "sha512-kyy3HWCez2WrotaL3O4fTn0rsIdfRKOdQQcEJ9KpvmKmbffKVvwsloX063EgRUlpJIXHiDQFhJcTbZequ2uTZw==", "dependencies": { "b4a": "^1.3.1" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9997,23 +11420,26 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -10028,16 +11454,18 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-path": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, - "license": "MIT", "dependencies": { "http-errors": "~1.6.2", "path-is-absolute": "1.0.1" @@ -10048,16 +11476,18 @@ }, "node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/resolve-path/node_modules/http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -10070,26 +11500,30 @@ }, "node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, "node_modules/resolve-path/node_modules/setprototypeof": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true }, "node_modules/resolve-path/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/response-time": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.0", "on-headers": "~1.0.1" @@ -10100,16 +11534,18 @@ }, "node_modules/response-time/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -10120,21 +11556,24 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -10142,8 +11581,9 @@ }, "node_modules/rimraf": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", + "integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -10159,8 +11599,9 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -10176,8 +11617,9 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10190,16 +11632,18 @@ }, "node_modules/rimraf/node_modules/minipass": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/ripemd160": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -10207,8 +11651,9 @@ }, "node_modules/rollup": { "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -10238,6 +11683,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -10253,13 +11700,14 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-parallel-limit": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "funding": [ { "type": "github", @@ -10274,13 +11722,14 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-series": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", + "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", "funding": [ { "type": "github", @@ -10294,12 +11743,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-array-concat": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", @@ -10315,11 +11764,13 @@ }, "node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", @@ -10334,17 +11785,20 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/safety-catch": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safety-catch/-/safety-catch-1.0.2.tgz", + "integrity": "sha512-C1UYVZ4dtbBxEtvOcpjBaaD27nP8MlvyAQEp2fOTOEe6pfUpk1cDUxij6BR1jZup6rSyUTaBBplK7LanskrULA==" }, "node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -10361,8 +11815,9 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -10377,8 +11832,9 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -10386,14 +11842,16 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/semver": { "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10406,8 +11864,9 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10417,8 +11876,9 @@ }, "node_modules/send": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -10440,33 +11900,39 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/seq-queue": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", "dev": true }, "node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, - "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -10479,7 +11945,8 @@ }, "node_modules/set-function-length": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dependencies": { "define-data-property": "^1.1.1", "function-bind": "^1.1.2", @@ -10493,7 +11960,8 @@ }, "node_modules/set-function-name": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -10505,18 +11973,21 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "node_modules/setprototypeof": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "node_modules/sha.js": { "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -10527,7 +11998,8 @@ }, "node_modules/sha256-universal": { "version": "1.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha256-universal/-/sha256-universal-1.2.1.tgz", + "integrity": "sha512-ghn3muhdn1ailCQqqceNxRgkOeZSVfSE13RQWEg6njB+itsFzGVSJv+O//2hvNXZuxVIRyNzrgsZ37SPDdGJJw==", "dependencies": { "b4a": "^1.0.1", "sha256-wasm": "^2.2.1" @@ -10535,7 +12007,8 @@ }, "node_modules/sha256-wasm": { "version": "2.2.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha256-wasm/-/sha256-wasm-2.2.2.tgz", + "integrity": "sha512-qKSGARvao+JQlFiA+sjJZhJ/61gmW/3aNLblB2rsgIxDlDxsJPHo8a1seXj12oKtuHVgJSJJ7QEGBUYQN741lQ==", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -10543,7 +12016,8 @@ }, "node_modules/sha512-universal": { "version": "1.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha512-universal/-/sha512-universal-1.2.1.tgz", + "integrity": "sha512-kehYuigMoRkIngCv7rhgruLJNNHDnitGTBdkcYbCbooL8Cidj/bS78MDxByIjcc69M915WxcQTgZetZ1JbeQTQ==", "dependencies": { "b4a": "^1.0.1", "sha512-wasm": "^2.3.1" @@ -10551,7 +12025,8 @@ }, "node_modules/sha512-wasm": { "version": "2.3.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/sha512-wasm/-/sha512-wasm-2.3.4.tgz", + "integrity": "sha512-akWoxJPGCB3aZCrZ+fm6VIFhJ/p8idBv7AWGFng/CZIrQo51oQNsvDbTSRXWAzIiZJvpy16oIDiCCPqTe21sKg==", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -10559,8 +12034,9 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10570,15 +12046,17 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -10590,8 +12068,9 @@ }, "node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", "engines": { "node": ">=14" }, @@ -10601,6 +12080,8 @@ }, "node_modules/simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -10615,11 +12096,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/simple-get": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -10635,7 +12117,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -10644,8 +12125,9 @@ }, "node_modules/sinon": { "version": "16.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", + "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^10.3.0", @@ -10661,16 +12143,18 @@ }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10680,23 +12164,26 @@ }, "node_modules/siphash24": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/siphash24/-/siphash24-1.3.1.tgz", + "integrity": "sha512-moemC3ZKiTzH29nbFo3Iw8fbemWWod4vNs/WgKbQ54oEs6mE6XVlguxvinYjB+UmaE0PThgyED9fUkWvirT8hA==", "dependencies": { "nanoassert": "^2.0.0" } }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -10711,8 +12198,9 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10725,8 +12213,9 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10736,13 +12225,15 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -10750,8 +12241,9 @@ }, "node_modules/socks": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, - "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -10763,8 +12255,9 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -10776,12 +12269,14 @@ }, "node_modules/socks/node_modules/ip": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "node_modules/sodium-javascript": { "version": "0.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sodium-javascript/-/sodium-javascript-0.8.0.tgz", + "integrity": "sha512-rEBzR5mPxPES+UjyMDvKPIXy9ImF17KOJ32nJNi9uIquWpS/nfj+h6m05J5yLJaGXjgM72LmQoUbWZVxh/rmGg==", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -10794,15 +12289,17 @@ }, "node_modules/sodium-native": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.0.6.tgz", + "integrity": "sha512-uYsyycwcz9kYDwpXxJmL2YZosynsxcP6RPySbARVJdC9uNDa2CMjzJ7/WsMMvThKgvAYsBWdZc7L/WSVj9lTcA==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-gyp-build": "^4.6.0" } }, "node_modules/sodium-universal": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sodium-universal/-/sodium-universal-4.0.0.tgz", + "integrity": "sha512-iKHl8XnBV96k1c75gwwzANFdephw/MDWSjQAjPmBE+du0y3P23Q8uf7AcdcfFsYAMwLg7WVBfSAIBtV/JvRsjA==", "dependencies": { "blake2b": "^2.1.1", "chacha20-universal": "^1.0.4", @@ -10817,24 +12314,27 @@ }, "node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.2.tgz", + "integrity": "sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" @@ -10852,8 +12352,9 @@ }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -10863,8 +12364,9 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "buffer-from": "^1.0.0", @@ -10873,8 +12375,9 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -10882,12 +12385,14 @@ }, "node_modules/sparse-array": { "version": "1.3.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", + "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==" }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -10895,13 +12400,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.4.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -10909,35 +12416,40 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.16", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true }, "node_modules/split2": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/sqlstring": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/static-eval": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", "dependencies": { "escodegen": "^1.8.1" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -10957,14 +12469,16 @@ }, "node_modules/static-eval/node_modules/estraverse": { "version": "4.3.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { "node": ">=4.0" } }, "node_modules/static-eval/node_modules/levn": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -10975,7 +12489,8 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -10990,13 +12505,16 @@ }, "node_modules/static-eval/node_modules/prelude-ls": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, "node_modules/static-eval/node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true, "engines": { "node": ">=0.10.0" @@ -11004,7 +12522,8 @@ }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -11014,16 +12533,18 @@ }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stream-browserify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -11031,8 +12552,9 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11044,8 +12566,9 @@ }, "node_modules/stream-http": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, - "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -11055,8 +12578,9 @@ }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11068,16 +12592,18 @@ }, "node_modules/stream-read-all": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/streamx": { "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", "dev": true, - "license": "MIT", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -11085,13 +12611,16 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -11105,13 +12634,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -11127,8 +12656,9 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11140,13 +12670,15 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -11156,8 +12688,9 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11170,7 +12703,8 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11188,7 +12722,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11203,7 +12738,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11215,7 +12751,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11227,8 +12764,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11239,8 +12777,9 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11250,8 +12789,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -11261,12 +12801,14 @@ }, "node_modules/strnum": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -11276,8 +12818,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11287,8 +12830,9 @@ }, "node_modules/table-layout": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", + "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", "dev": true, - "license": "MIT", "dependencies": { "@75lb/deep-merge": "^1.1.1", "array-back": "^6.2.2", @@ -11307,24 +12851,27 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/table-layout/node_modules/typical": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -11332,8 +12879,9 @@ }, "node_modules/tar-fs": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -11343,8 +12891,9 @@ }, "node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -11358,8 +12907,9 @@ }, "node_modules/tar-stream/node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11368,6 +12918,8 @@ }, "node_modules/tar-stream/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -11383,7 +12935,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11391,8 +12942,9 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11404,16 +12956,18 @@ }, "node_modules/tdigest": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dev": true, - "license": "MIT", "dependencies": { "bintrees": "1.0.2" } }, "node_modules/terser": { "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -11430,8 +12984,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -11464,8 +13019,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { "randombytes": "^2.1.0" @@ -11473,8 +13029,9 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11486,8 +13043,9 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11495,8 +13053,9 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11514,8 +13073,9 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11525,18 +13085,21 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/timers-browserify": { "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, - "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -11546,8 +13109,9 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -11557,16 +13121,18 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -11576,16 +13142,18 @@ }, "node_modules/tr46/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ts-api-utils": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.13.0" }, @@ -11595,25 +13163,29 @@ }, "node_modules/tslib": { "version": "2.6.2", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsscmp": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.x" } }, "node_modules/tty-browserify": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -11623,8 +13195,9 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -11634,16 +13207,18 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -11653,8 +13228,9 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -11665,7 +13241,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -11677,7 +13254,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -11693,7 +13271,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -11710,7 +13289,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -11722,8 +13302,9 @@ }, "node_modules/typescript": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11734,22 +13315,25 @@ }, "node_modules/typical": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uint8-util": { "version": "2.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", + "integrity": "sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA==", "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "node_modules/uint8-varint": { "version": "2.0.4", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", "dependencies": { "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" @@ -11757,43 +13341,50 @@ }, "node_modules/uint8-varint/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/uint8-varint/node_modules/uint8arrays": { "version": "5.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/uint8arraylist": { "version": "2.4.8", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", "dependencies": { "uint8arrays": "^5.0.1" } }, "node_modules/uint8arraylist/node_modules/multiformats": { "version": "13.0.1", - "license": "Apache-2.0 OR MIT" + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { "version": "5.0.1", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", "dependencies": { "multiformats": "^13.0.0" } }, "node_modules/uint8arrays": { "version": "4.0.10", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", "dependencies": { "multiformats": "^12.0.1" } }, "node_modules/uint8arrays/node_modules/multiformats": { "version": "12.1.3", - "license": "Apache-2.0 OR MIT", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -11801,7 +13392,8 @@ }, "node_modules/ulidx": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ulidx/-/ulidx-2.1.0.tgz", + "integrity": "sha512-DlMi97oP9HASI3kLCjBlOhAG1SoisUrEqC2PJ7itiFbq9q5Zo0JejupXeu2Gke99W62epNzA4MFNToNiq8A5LA==", "dependencies": { "layerr": "^2.0.1" }, @@ -11811,7 +13403,8 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -11824,8 +13417,9 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -11833,6 +13427,8 @@ }, "node_modules/unbzip2-stream/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -11848,7 +13444,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11856,27 +13451,32 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -11892,7 +13492,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "peer": true, "dependencies": { "escalade": "^3.1.1", @@ -11907,22 +13506,25 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/url": { "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" @@ -11930,12 +13532,14 @@ }, "node_modules/utf8-codec": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/utf8-codec/-/utf8-codec-1.0.0.tgz", + "integrity": "sha512-S/QSLezp3qvG4ld5PUfXiH7mCFxLKjSVZRFkB3DOjgwHuJPFDkInAXc/anf7BAbHt/D38ozDzL+QMZ6/7gsI6w==" }, "node_modules/util": { "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -11946,27 +13550,31 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -11978,8 +13586,9 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -11987,8 +13596,9 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, - "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -11998,25 +13608,29 @@ }, "node_modules/varint": { "version": "6.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vm-browserify": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "node_modules/watchpack": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -12028,24 +13642,27 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { "version": "5.90.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.0.tgz", + "integrity": "sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -12091,8 +13708,9 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -12100,8 +13718,9 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -12113,8 +13732,9 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -12122,14 +13742,16 @@ }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/whatwg-url": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -12140,8 +13762,9 @@ }, "node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -12154,7 +13777,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -12168,7 +13792,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", @@ -12185,28 +13810,32 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrapjs": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", + "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/workerpool": { "version": "6.2.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -12222,8 +13851,9 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12238,8 +13868,9 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12252,8 +13883,9 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12263,18 +13895,21 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12286,8 +13921,9 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12297,8 +13933,9 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12308,8 +13945,9 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12322,13 +13960,15 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -12347,38 +13987,44 @@ }, "node_modules/xml": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true }, "node_modules/xsalsa20": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==" }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -12394,16 +14040,18 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -12416,13 +14064,15 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12434,8 +14084,9 @@ }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -12443,16 +14094,18 @@ }, "node_modules/ylru": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -12462,7 +14115,8 @@ }, "node_modules/z32": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/z32/-/z32-1.0.1.tgz", + "integrity": "sha512-Uytfqf6VEVchHKZDw0NRdCViOARHP84uzvOw0CXCMLOwhgHZUL9XibpEPLLQN10mCVLxOlGCQWbkV7km7yNYcw==", "dependencies": { "b4a": "^1.5.3" } @@ -12514,14 +14168,16 @@ }, "packages/agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -12531,7 +14187,8 @@ }, "packages/agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -12541,8 +14198,9 @@ }, "packages/agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -12568,8 +14226,9 @@ }, "packages/agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -12580,8 +14239,9 @@ }, "packages/agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -12606,7 +14266,8 @@ }, "packages/agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -12619,7 +14280,8 @@ }, "packages/agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -12630,7 +14292,8 @@ }, "packages/agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -12649,7 +14312,8 @@ }, "packages/agent/node_modules/@web5/dids/node_modules/@web5/common": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.2.tgz", + "integrity": "sha512-dRn6SmALExeTLMTK/W5ozGarfaddK+Lraf5OjuIGLAaLfcX1RWx3oDMoY5Hr9LjfxHJC8mGXB8DnKflbeYJRgA==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2", @@ -12661,8 +14325,9 @@ }, "packages/agent/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12676,8 +14341,9 @@ }, "packages/agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12690,8 +14356,9 @@ }, "packages/agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12699,8 +14366,9 @@ }, "packages/agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12714,8 +14382,9 @@ }, "packages/agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12725,13 +14394,15 @@ }, "packages/agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -12741,8 +14412,9 @@ }, "packages/agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -12794,8 +14466,9 @@ }, "packages/agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -12805,21 +14478,24 @@ }, "packages/agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12829,8 +14505,9 @@ }, "packages/agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12844,11 +14521,11 @@ "license": "Apache-2.0", "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4", - "@web5/user-agent": "0.2.5", + "@web5/user-agent": "0.2.6", "level": "8.0.0", "ms": "2.1.3", "readable-stream": "4.4.2", @@ -12888,14 +14565,16 @@ }, "packages/api/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/api/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -12905,7 +14584,8 @@ }, "packages/api/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -12915,8 +14595,9 @@ }, "packages/api/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -12929,138 +14610,61 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "packages/api/node_modules/@typescript-eslint/types": { - "version": "6.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "packages/api/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.4.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.4.0", - "@typescript-eslint/visitor-keys": "6.4.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "packages/api/node_modules/@web5/agent": { - "version": "0.2.5", - "license": "Apache-2.0", - "dependencies": { - "@tbd54566975/dwn-sdk-js": "0.2.8", - "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", - "@web5/dids": "0.2.3", - "level": "8.0.0", - "readable-stream": "4.4.2", - "readable-web-to-node-stream": "3.0.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/api/node_modules/@web5/agent/node_modules/@tbd54566975/dwn-sdk-js": { - "version": "0.2.8", - "license": "Apache-2.0", - "dependencies": { - "@ipld/dag-cbor": "9.0.3", - "@js-temporal/polyfill": "0.4.4", - "@noble/ed25519": "2.0.0", - "@noble/secp256k1": "2.0.0", - "abstract-level": "1.0.3", - "ajv": "8.12.0", - "blockstore-core": "4.2.0", - "cross-fetch": "4.0.0", - "eciesjs": "0.4.5", - "flat": "5.0.2", - "interface-blockstore": "5.2.3", - "interface-store": "5.1.2", - "ipfs-unixfs-exporter": "13.1.5", - "ipfs-unixfs-importer": "15.1.5", - "level": "8.0.0", - "lodash": "4.17.21", - "lru-cache": "9.1.2", - "ms": "2.1.3", - "multiformats": "11.0.2", - "randombytes": "2.1.0", - "readable-stream": "4.4.2", - "ulidx": "2.1.0", - "uuid": "8.3.2", - "varint": "6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "packages/api/node_modules/@web5/agent/node_modules/@web5/dids": { - "version": "0.2.3", - "license": "Apache-2.0", - "dependencies": { - "@decentralized-identity/ion-pow-sdk": "1.0.17", - "@decentralized-identity/ion-sdk": "1.0.1", - "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", - "did-resolver": "4.1.0", - "dns-packet": "5.6.1", - "level": "8.0.0", - "ms": "2.1.3", - "pkarr": "1.1.1", - "z32": "1.0.1" + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/api/node_modules/@typescript-eslint/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", + "dev": true, "engines": { - "node": ">=18.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "packages/api/node_modules/@web5/common": { - "version": "0.2.2", - "license": "Apache-2.0", + "packages/api/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", + "dev": true, "dependencies": { - "level": "8.0.0", - "multiformats": "11.0.2", - "readable-stream": "4.4.2" + "@typescript-eslint/types": "6.4.0", + "@typescript-eslint/visitor-keys": "6.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=18.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "packages/api/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -13073,7 +14677,8 @@ }, "packages/api/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -13084,7 +14689,8 @@ }, "packages/api/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -13101,42 +14707,40 @@ "node": ">=18.0.0" } }, - "packages/api/node_modules/@web5/user-agent": { - "version": "0.2.5", - "license": "Apache-2.0", + "packages/api/node_modules/@web5/dids/node_modules/@web5/common": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.2.tgz", + "integrity": "sha512-dRn6SmALExeTLMTK/W5ozGarfaddK+Lraf5OjuIGLAaLfcX1RWx3oDMoY5Hr9LjfxHJC8mGXB8DnKflbeYJRgA==", "dependencies": { - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", - "@web5/dids": "0.2.3" + "level": "8.0.0", + "multiformats": "11.0.2", + "readable-stream": "4.4.2" }, "engines": { "node": ">=18.0.0" } }, - "packages/api/node_modules/@web5/user-agent/node_modules/@web5/dids": { - "version": "0.2.3", - "license": "Apache-2.0", + "packages/api/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "@decentralized-identity/ion-pow-sdk": "1.0.17", - "@decentralized-identity/ion-sdk": "1.0.1", - "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", - "did-resolver": "4.1.0", - "dns-packet": "5.6.1", - "level": "8.0.0", - "ms": "2.1.3", - "pkarr": "1.1.1", - "z32": "1.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "packages/api/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13149,8 +14753,9 @@ }, "packages/api/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13158,8 +14763,9 @@ }, "packages/api/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13173,8 +14779,9 @@ }, "packages/api/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13184,13 +14791,15 @@ }, "packages/api/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/api/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13200,8 +14809,9 @@ }, "packages/api/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13251,25 +14861,11 @@ "url": "https://opencollective.com/eslint" } }, - "packages/api/node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "packages/api/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -13279,28 +14875,24 @@ }, "packages/api/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/api/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "packages/api/node_modules/lru-cache": { - "version": "9.1.2", - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/api/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13310,8 +14902,9 @@ }, "packages/api/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13357,8 +14950,9 @@ }, "packages/common/node_modules/@types/readable-stream": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.9.tgz", + "integrity": "sha512-4cwuvrmNF96M4Nrx0Eep37RwPB1Mth+nCSezsGRv5+PsFyRvDdLd0pil6gVLcWD/bh69INNdwZ98dJwfHpLohA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" @@ -13366,8 +14960,9 @@ }, "packages/common/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -13393,8 +14988,9 @@ }, "packages/common/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -13405,8 +15001,9 @@ }, "packages/common/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -13431,8 +15028,9 @@ }, "packages/common/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13446,8 +15044,9 @@ }, "packages/common/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13460,8 +15059,9 @@ }, "packages/common/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13469,8 +15069,9 @@ }, "packages/common/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13484,8 +15085,9 @@ }, "packages/common/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13495,13 +15097,15 @@ }, "packages/common/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/common/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13511,8 +15115,9 @@ }, "packages/common/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13564,8 +15169,9 @@ }, "packages/common/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -13575,21 +15181,24 @@ }, "packages/common/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/common/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/common/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13599,8 +15208,9 @@ }, "packages/common/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13646,14 +15256,16 @@ }, "packages/credentials/node_modules/@noble/ciphers": { "version": "0.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz", + "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@noble/curves": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -13663,7 +15275,8 @@ }, "packages/credentials/node_modules/@noble/hashes": { "version": "1.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "engines": { "node": ">= 16" }, @@ -13673,8 +15286,9 @@ }, "packages/credentials/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -13700,8 +15314,9 @@ }, "packages/credentials/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -13712,8 +15327,9 @@ }, "packages/credentials/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -13738,7 +15354,8 @@ }, "packages/credentials/node_modules/@web5/common": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.2.tgz", + "integrity": "sha512-dRn6SmALExeTLMTK/W5ozGarfaddK+Lraf5OjuIGLAaLfcX1RWx3oDMoY5Hr9LjfxHJC8mGXB8DnKflbeYJRgA==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2", @@ -13750,7 +15367,8 @@ }, "packages/credentials/node_modules/@web5/crypto": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.4.tgz", + "integrity": "sha512-heRUuV10mZ04dWp1C2mNF/EEPw8nnRe+yAXvmclJ+4XUHL6+mY7j+hjYOTKUAQzd4ouvbHrpJM0uYcUntA3AeA==", "dependencies": { "@noble/ciphers": "0.4.0", "@noble/curves": "1.2.0", @@ -13763,7 +15381,8 @@ }, "packages/credentials/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -13782,14 +15401,16 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -13799,7 +15420,8 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -13809,7 +15431,8 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -13822,7 +15445,8 @@ }, "packages/credentials/node_modules/@web5/dids/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -13833,8 +15457,9 @@ }, "packages/credentials/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13848,8 +15473,9 @@ }, "packages/credentials/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13862,8 +15488,9 @@ }, "packages/credentials/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13871,8 +15498,9 @@ }, "packages/credentials/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13886,8 +15514,9 @@ }, "packages/credentials/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13897,13 +15526,15 @@ }, "packages/credentials/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/credentials/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13913,8 +15544,9 @@ }, "packages/credentials/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13966,8 +15598,9 @@ }, "packages/credentials/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -13977,21 +15610,24 @@ }, "packages/credentials/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/credentials/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/credentials/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14001,8 +15637,9 @@ }, "packages/credentials/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14088,8 +15725,9 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14115,8 +15753,9 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14127,8 +15766,9 @@ }, "packages/crypto-aws-kms/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14153,8 +15793,9 @@ }, "packages/crypto-aws-kms/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14168,8 +15809,9 @@ }, "packages/crypto-aws-kms/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14182,8 +15824,9 @@ }, "packages/crypto-aws-kms/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14191,8 +15834,9 @@ }, "packages/crypto-aws-kms/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14206,8 +15850,9 @@ }, "packages/crypto-aws-kms/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14217,13 +15862,15 @@ }, "packages/crypto-aws-kms/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/crypto-aws-kms/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14233,8 +15880,9 @@ }, "packages/crypto-aws-kms/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14286,8 +15934,9 @@ }, "packages/crypto-aws-kms/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14297,21 +15946,24 @@ }, "packages/crypto-aws-kms/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto-aws-kms/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/crypto-aws-kms/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14321,8 +15973,9 @@ }, "packages/crypto-aws-kms/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14332,8 +15985,9 @@ }, "packages/crypto/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14359,8 +16013,9 @@ }, "packages/crypto/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14371,8 +16026,9 @@ }, "packages/crypto/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14397,8 +16053,9 @@ }, "packages/crypto/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14412,8 +16069,9 @@ }, "packages/crypto/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14426,8 +16084,9 @@ }, "packages/crypto/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14435,8 +16094,9 @@ }, "packages/crypto/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14450,8 +16110,9 @@ }, "packages/crypto/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14461,13 +16122,15 @@ }, "packages/crypto/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/crypto/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14477,8 +16140,9 @@ }, "packages/crypto/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14530,8 +16194,9 @@ }, "packages/crypto/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14541,21 +16206,24 @@ }, "packages/crypto/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/crypto/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/crypto/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14565,8 +16233,9 @@ }, "packages/crypto/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14619,8 +16288,9 @@ }, "packages/dids/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14646,8 +16316,9 @@ }, "packages/dids/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14658,8 +16329,9 @@ }, "packages/dids/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14684,8 +16356,9 @@ }, "packages/dids/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14699,8 +16372,9 @@ }, "packages/dids/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14713,8 +16387,9 @@ }, "packages/dids/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14722,8 +16397,9 @@ }, "packages/dids/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14737,8 +16413,9 @@ }, "packages/dids/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14748,13 +16425,15 @@ }, "packages/dids/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/dids/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14764,8 +16443,9 @@ }, "packages/dids/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14817,8 +16497,9 @@ }, "packages/dids/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14828,21 +16509,24 @@ }, "packages/dids/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/dids/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/dids/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14852,8 +16536,9 @@ }, "packages/dids/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14901,14 +16586,16 @@ }, "packages/identity-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/identity-agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -14918,7 +16605,8 @@ }, "packages/identity-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -14928,8 +16616,9 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -14955,8 +16644,9 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -14967,8 +16657,9 @@ }, "packages/identity-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -14991,42 +16682,10 @@ } } }, - "packages/identity-agent/node_modules/@web5/agent/node_modules/@web5/common": { - "version": "0.2.2", - "extraneous": true, - "license": "Apache-2.0", - "dependencies": { - "level": "8.0.0", - "multiformats": "11.0.2", - "readable-stream": "4.4.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/identity-agent/node_modules/@web5/agent/node_modules/@web5/dids": { - "version": "0.2.3", - "extraneous": true, - "license": "Apache-2.0", - "dependencies": { - "@decentralized-identity/ion-pow-sdk": "1.0.17", - "@decentralized-identity/ion-sdk": "1.0.1", - "@web5/common": "0.2.2", - "@web5/crypto": "0.2.2", - "did-resolver": "4.1.0", - "dns-packet": "5.6.1", - "level": "8.0.0", - "ms": "2.1.3", - "pkarr": "1.1.1", - "z32": "1.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, "packages/identity-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -15039,7 +16698,8 @@ }, "packages/identity-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -15050,7 +16710,8 @@ }, "packages/identity-agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -15069,7 +16730,8 @@ }, "packages/identity-agent/node_modules/@web5/dids/node_modules/@web5/common": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.2.tgz", + "integrity": "sha512-dRn6SmALExeTLMTK/W5ozGarfaddK+Lraf5OjuIGLAaLfcX1RWx3oDMoY5Hr9LjfxHJC8mGXB8DnKflbeYJRgA==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2", @@ -15079,10 +16741,27 @@ "node": ">=18.0.0" } }, + "packages/identity-agent/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/identity-agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15095,8 +16774,9 @@ }, "packages/identity-agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15104,8 +16784,9 @@ }, "packages/identity-agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15119,8 +16800,9 @@ }, "packages/identity-agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15130,13 +16812,15 @@ }, "packages/identity-agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/identity-agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15146,8 +16830,9 @@ }, "packages/identity-agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15197,25 +16882,11 @@ "url": "https://opencollective.com/eslint" } }, - "packages/identity-agent/node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "packages/identity-agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15225,21 +16896,24 @@ }, "packages/identity-agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/identity-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/identity-agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15249,8 +16923,9 @@ }, "packages/identity-agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15298,14 +16973,16 @@ }, "packages/proxy-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/proxy-agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -15315,7 +16992,8 @@ }, "packages/proxy-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -15325,8 +17003,9 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15352,8 +17031,9 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15364,8 +17044,9 @@ }, "packages/proxy-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15390,7 +17071,8 @@ }, "packages/proxy-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -15403,7 +17085,8 @@ }, "packages/proxy-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -15414,7 +17097,8 @@ }, "packages/proxy-agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -15433,7 +17117,8 @@ }, "packages/proxy-agent/node_modules/@web5/dids/node_modules/@web5/common": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.2.tgz", + "integrity": "sha512-dRn6SmALExeTLMTK/W5ozGarfaddK+Lraf5OjuIGLAaLfcX1RWx3oDMoY5Hr9LjfxHJC8mGXB8DnKflbeYJRgA==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2", @@ -15443,10 +17128,27 @@ "node": ">=18.0.0" } }, + "packages/proxy-agent/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/proxy-agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15459,8 +17161,9 @@ }, "packages/proxy-agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15468,8 +17171,9 @@ }, "packages/proxy-agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15483,8 +17187,9 @@ }, "packages/proxy-agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15494,13 +17199,15 @@ }, "packages/proxy-agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/proxy-agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15510,8 +17217,9 @@ }, "packages/proxy-agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15561,25 +17269,11 @@ "url": "https://opencollective.com/eslint" } }, - "packages/proxy-agent/node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "packages/proxy-agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15589,21 +17283,24 @@ }, "packages/proxy-agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/proxy-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/proxy-agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15613,8 +17310,9 @@ }, "packages/proxy-agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15662,14 +17360,16 @@ }, "packages/user-agent/node_modules/@noble/ciphers": { "version": "0.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.1.4.tgz", + "integrity": "sha512-d3ZR8vGSpy3v/nllS+bD/OMN5UZqusWiQqkyj7AwzTnhXFH72pF5oB4Ach6DQ50g5kXxC28LdaYBEpsyv9KOUQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "packages/user-agent/node_modules/@noble/curves": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -15679,7 +17379,8 @@ }, "packages/user-agent/node_modules/@noble/hashes": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", "engines": { "node": ">= 16" }, @@ -15689,8 +17390,9 @@ }, "packages/user-agent/node_modules/@typescript-eslint/parser": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.0.tgz", + "integrity": "sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.4.0", "@typescript-eslint/types": "6.4.0", @@ -15716,8 +17418,9 @@ }, "packages/user-agent/node_modules/@typescript-eslint/types": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.0.tgz", + "integrity": "sha512-+FV9kVFrS7w78YtzkIsNSoYsnOtrYVnKWSTVXoL1761CsCRv5wpDOINgsXpxD67YCLZtVQekDDyaxfjVWUJmmg==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -15728,8 +17431,9 @@ }, "packages/user-agent/node_modules/@typescript-eslint/typescript-estree": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.0.tgz", + "integrity": "sha512-iDPJArf/K2sxvjOR6skeUCNgHR/tCQXBsa+ee1/clRKr3olZjZ/dSkXPZjG6YkPtnW6p5D1egeEPMCW6Gn4yLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.4.0", "@typescript-eslint/visitor-keys": "6.4.0", @@ -15754,7 +17458,8 @@ }, "packages/user-agent/node_modules/@web5/crypto": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/crypto/-/crypto-0.2.2.tgz", + "integrity": "sha512-vHFg0wXQSQXrwuBNQyDHnmSZchfTfO6/Sv+7rDsNkvofs+6lGTE8CZ02cwUYMeIwTRMLer12c+fMfzYrXokEUQ==", "dependencies": { "@noble/ciphers": "0.1.4", "@noble/curves": "1.1.0", @@ -15767,7 +17472,8 @@ }, "packages/user-agent/node_modules/@web5/crypto/node_modules/@web5/common": { "version": "0.2.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.1.tgz", + "integrity": "sha512-Tt5P17HgQCx+Epw0IHnhRKqp5UU3E4xtsE8PkdghOBnvntBB0op5P6efvR1WqmJft5+VunDHt3yZAZstuqQkNg==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2" @@ -15778,7 +17484,8 @@ }, "packages/user-agent/node_modules/@web5/dids": { "version": "0.2.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/dids/-/dids-0.2.4.tgz", + "integrity": "sha512-e+m+xgpiM8ydTJgWcPdwmjILLMZYdl2kwahlO22mK0azSKVrg1klpGrUODzqkrWrQ5O0tnOyqEy39FcD5Sy11w==", "dependencies": { "@decentralized-identity/ion-pow-sdk": "1.0.17", "@decentralized-identity/ion-sdk": "1.0.1", @@ -15797,7 +17504,8 @@ }, "packages/user-agent/node_modules/@web5/dids/node_modules/@web5/common": { "version": "0.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@web5/common/-/common-0.2.2.tgz", + "integrity": "sha512-dRn6SmALExeTLMTK/W5ozGarfaddK+Lraf5OjuIGLAaLfcX1RWx3oDMoY5Hr9LjfxHJC8mGXB8DnKflbeYJRgA==", "dependencies": { "level": "8.0.0", "multiformats": "11.0.2", @@ -15807,10 +17515,27 @@ "node": ">=18.0.0" } }, + "packages/user-agent/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "packages/user-agent/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15823,8 +17548,9 @@ }, "packages/user-agent/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15832,8 +17558,9 @@ }, "packages/user-agent/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15847,8 +17574,9 @@ }, "packages/user-agent/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15858,13 +17586,15 @@ }, "packages/user-agent/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "packages/user-agent/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -15874,8 +17604,9 @@ }, "packages/user-agent/node_modules/eslint": { "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15925,25 +17656,11 @@ "url": "https://opencollective.com/eslint" } }, - "packages/user-agent/node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "packages/user-agent/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15953,21 +17670,24 @@ }, "packages/user-agent/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "packages/user-agent/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "packages/user-agent/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15977,8 +17697,9 @@ }, "packages/user-agent/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, diff --git a/packages/api/package.json b/packages/api/package.json index 96b3cc5c6..6d6051f46 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -77,11 +77,11 @@ }, "dependencies": { "@tbd54566975/dwn-sdk-js": "0.2.10", - "@web5/agent": "0.2.5", - "@web5/common": "0.2.2", + "@web5/agent": "0.2.6", + "@web5/common": "0.2.3", "@web5/crypto": "0.2.2", "@web5/dids": "0.2.4", - "@web5/user-agent": "0.2.5", + "@web5/user-agent": "0.2.6", "level": "8.0.0", "ms": "2.1.3", "readable-stream": "4.4.2", From c26d27e06a5a046160c0b0bacae342eecd118414 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 11:54:28 -0500 Subject: [PATCH 34/39] Remove old test-vectors directory Signed-off-by: Frank Hinek --- packages/dids/tests/methods/did-jwk.spec.ts | 2 +- packages/dids/tests/methods/did-web.spec.ts | 2 +- .../dids/tests/resolver/did-resolver.spec.ts | 2 +- test-vectors/README.md | 134 ---- test-vectors/credentials/README.md | 57 -- test-vectors/credentials/create.json | 621 ------------------ test-vectors/credentials/verify.json | 45 -- test-vectors/did_jwk/README.md | 19 - test-vectors/did_jwk/resolve.json | 107 --- test-vectors/did_web/README.md | 24 - test-vectors/did_web/resolve.json | 101 --- test-vectors/index.html | 48 -- test-vectors/presentation_exchange/README.md | 22 - .../create_presentation_from_credentials.json | 45 -- .../select_credentials.json | 59 -- test-vectors/vectors.schema.json | 40 -- 16 files changed, 3 insertions(+), 1325 deletions(-) delete mode 100644 test-vectors/README.md delete mode 100644 test-vectors/credentials/README.md delete mode 100644 test-vectors/credentials/create.json delete mode 100644 test-vectors/credentials/verify.json delete mode 100644 test-vectors/did_jwk/README.md delete mode 100644 test-vectors/did_jwk/resolve.json delete mode 100644 test-vectors/did_web/README.md delete mode 100644 test-vectors/did_web/resolve.json delete mode 100644 test-vectors/index.html delete mode 100644 test-vectors/presentation_exchange/README.md delete mode 100644 test-vectors/presentation_exchange/create_presentation_from_credentials.json delete mode 100644 test-vectors/presentation_exchange/select_credentials.json delete mode 100644 test-vectors/vectors.schema.json diff --git a/packages/dids/tests/methods/did-jwk.spec.ts b/packages/dids/tests/methods/did-jwk.spec.ts index 3cd849328..fc8c78c04 100644 --- a/packages/dids/tests/methods/did-jwk.spec.ts +++ b/packages/dids/tests/methods/did-jwk.spec.ts @@ -10,7 +10,7 @@ import type { PortableDid, PortableDidVerificationMethod } from '../../src/metho import { DidErrorCode } from '../../src/did-error.js'; import { DidJwk } from '../../src/methods/did-jwk.js'; -import DidJwkResolveTestVector from '../../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; +import DidJwkResolveTestVector from '../../../../web5-spec/test-vectors/did_jwk/resolve.json' assert { type: 'json' }; describe('DidJwk', () => { let keyManager: LocalKeyManager; diff --git a/packages/dids/tests/methods/did-web.spec.ts b/packages/dids/tests/methods/did-web.spec.ts index c26ce637a..621191652 100644 --- a/packages/dids/tests/methods/did-web.spec.ts +++ b/packages/dids/tests/methods/did-web.spec.ts @@ -4,7 +4,7 @@ import sinon from 'sinon'; import { expect } from 'chai'; import { DidWeb } from '../../src/methods/did-web.js'; -import DidWebResolveTestVector from '../../../../test-vectors/did_web/resolve.json' assert { type: 'json' }; +import DidWebResolveTestVector from '../../../../web5-spec/test-vectors/did_web/resolve.json' assert { type: 'json' }; // Helper function to create a mocked fetch response that fails and returns a 404 Not Found. const fetchNotFoundResponse = () => ({ diff --git a/packages/dids/tests/resolver/did-resolver.spec.ts b/packages/dids/tests/resolver/did-resolver.spec.ts index 0a706f0b4..c31b8c1d1 100644 --- a/packages/dids/tests/resolver/did-resolver.spec.ts +++ b/packages/dids/tests/resolver/did-resolver.spec.ts @@ -7,7 +7,7 @@ import { DidJwk } from '../../src/methods/did-jwk.js'; import { DidResource } from '../../src/types/did-core.js'; import { isDidVerificationMethod } from '../../src/utils.js'; import { DidResolver } from '../../src/resolver/did-resolver.js'; -import DidJwkResolveTestVector from '../../../../test-vectors/did_jwk/resolve.json' assert { type: 'json' }; +import DidJwkResolveTestVector from '../../../../web5-spec/test-vectors/did_jwk/resolve.json' assert { type: 'json' }; describe('DidResolver', () => { describe('resolve()', () => { diff --git a/test-vectors/README.md b/test-vectors/README.md deleted file mode 100644 index 21df00b48..000000000 --- a/test-vectors/README.md +++ /dev/null @@ -1,134 +0,0 @@ -# Web5 Test Vectors - -## Description - -This directory contains test vectors for all features we intend to support accross several languages. Each feature has its own directory which contains a single vectors file per sub-feature e.g. - -```text -web5-test-vectors -├── README.md -├── did-jwk <--- feature -│   └── resolve.json <--- sub-feature -├── index.html -└── vectors.schema.json -``` - -## Test Vector Files - -Test vector files should adhere to [`vectors.schema.json`]('./vectors.schema.json'). This repo contains a [`test-vector-validation`]('../scripts/test-vector-validation') script that validates all vectors files in this directory. It can be run manually by following the instructions [here](../scripts/test-vector-validation/README.md). - -> [!NOTE] -> Test Vector Validation runs automatically anytime a change is made in this directory or to the script itself. - -Each test vector file is a structured collection of test vector objects, where each vector asserts a specific outcome for a given input. Below is a table that outlines the expected fields in a test vector file: - -| Field | Type | Description | Required | -| ----------------------- | ------- | ---------------------------------------------------------------------------------------------------- | :------: | -| `description` | string | A general description of the test vectors collection. | Yes | -| `vectors` | array | An array of test vector objects. | Yes | -| `vectors[].description` | string | A description of what this test vector is testing. | Yes | -| `vectors[].input` | any | The input for the test vector, which can be of any type. | Yes | -| `vectors[].output` | any | The expected output for the test vector, which can be of any type. | No | -| `vectors[].errors` | boolean | Indicates whether the test vector is expected to produce an error. Defaults to false if not present. | No | - -### Rationale for Test Vector Structure - -The structure of a `vector` object is designed to fulfill two conditions: - -* the function works and returns something that should match `output` -* the function throws an error (in whatever way the consuming language represents errors) - * _optionally_, the error's _output_ should match `output` - -`errors: true` is an instruction to anticipate an error in the implementation language. For example: - -* In languages like Kotlin or Javascript, the presence of `errors: true` would imply that `assertThrows` be used. -* In Go, the expectation would be for the err variable to be non-nil. -* In Rust, the error handling would pivot on matching `Result.Err` rather than `Result.Ok`. - -Should `errors` be set to `true`, the `output` field may optionally be used to include expected error messages. - -## Creating New Test Vector Full Walkthrough - -### Step 1: Create New Test Vector - -1. Navigate to the GitHub repository: sdk-development[https://github.com/TBD54566975/sdk-development/tree/main/web5-test-vectors] - -2. Create a new folder and JSON file with the structure example_feature/hello_world.json. - -3. Populate the JSON file as follows. Note that adherence to the [json schema](./vectors.schema.json) is enforced by CI. - -```json -{ - "description": "vector example", - "vectors": [ - { - "description": "this is an example", - "input": "hello world", - "output": "hello world", - "errors" : false - } - ] -} -``` - -### Step 2: Copy JSON to Local Test-Vectors Directory - -Copy the `hello_world.json` file from `example_feature` directory into your SDK's test-vectors folder. make sure the file -and file name are both identical to that in the sdk-development repo. - -### Step 3: Create Unit Test in web5-kt - -1. In the `web5-kt` project, create a new unit test class. - -1. Name the class following the given pattern: - -* Prefix: `Web5TestVectors` - -* Middle: Convert `example_feature` to `ExampleFeature` (capitalize words and remove underscores) - -* Combined Output: `Web5TestVectorsExampleFeature` - -1. Implement the class and test method as follows: - -```kt -class Web5TestVectorsExampleFeature { - @Test - fun hello_world() { - val testVectors = mapper.readValue(File("../test-vectors/example_feature/hello_world.json"), typeRef) - assertEquals(testVectors.vectors[0].input, testVectors.vectors[0].output) - } -} -``` - -### Step 4: Create Unit Test in web5-js - -1. In the `web5-js` project, create a new unit test class. - -1. Name the class following the given pattern: - -* Prefix: `Web5TestVectors` - -* Middle: Convert `example_feature` to `ExampleFeature` (capitalize words and remove underscores) - -* Combined Output: `Web5TestVectorsExampleFeature` - -1. Implement the class and test method as follows: - -```javascript - import ExampleFeatureHelloWorldSpecJson from '../../../test-vectors/example_feature/hello_world.json' assert { type: 'json' }; - - describe('Web5TestVectorsExampleFeature', () => { - it('hello_world', async () => { - const vectors = ExampleFeatureHelloWorldSpecJson.vectors; - expect(vectors[0].input).to.equal(vectors[0].output) - }); - }); -``` - -### Step 5: Completion - -* Once the above steps are completed, the `sdk-development` repository will automatically detect the new test vectors by consuming artifacts generated by a github action (No action by you required) -* Once the new vector merges into the sdk-development repo, PRs will be automatically opened on all SDKs that don't have it yet. -* The system will indicate whether the test passes or fails with a checkmark or an 'x' on the [test vectors dashboard](https://tbd54566975.github.io/sdk-development/). - -Your new test vector system is now set up and ready for use! diff --git a/test-vectors/credentials/README.md b/test-vectors/credentials/README.md deleted file mode 100644 index 290e54667..000000000 --- a/test-vectors/credentials/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# `credentials` Test Vectors - -This directory contains test vectors for the `credentials` module. It's important to note that the test vectors ensure -that -the implementations are following the [Verifiable Credential 1.1 specification](https://www.w3.org/TR/vc-data-model/). - -## `create` - -Create test vectors are available in the [json file](./create.json), which contains success and failure test cases. - -### Input - -The value of `input` is an object with the following properties. - -| Property | Description | -|--------------------|--------------------------------------------------------------------------------------------------------------------------| -| `signerDidUri` | the did uri that will be used to sign the verifiable credential created. | -| `signerPrivateJwk` | Json Web Key object associated with the `signerDidUri` which will be used for signing `credential`. | -| `credential` | A JSON object that represents a Verifiable Credential 1.1 according to the [spec](https://www.w3.org/TR/vc-data-model/). | - -### Output - -The value of `output` is a Verifiable Credential 1.1 encoded as a JSON Web Token ( -see [here](https://www.w3.org/TR/vc-data-model/#json-web-token) for more details). The signature is created using -the `signerPrivateJwk` private key. - -### Reference implementations - -The reference implementations for: - -* `create_success` can be - found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L244). -* `create_failure` can be - found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L285). - -## `verify` - -Verify test vectors are available in the [json file](./verify.json), which contains success and failure test cases. - -### Input - -The value of `input` is an object with the single property `vcJwt`. The value of `vcJwt` is a Verifiable Credential 1.1 -encoded as a JSON Web Token (see [here](https://www.w3.org/TR/vc-data-model/#json-web-token) for more details). - -### Output - -Output is empty, signalling that no exception nor errors should be thrown for success cases. For failure cases, the -`errors` property is set to `true`, signalling that an exception or an error should be returned or thrown. - -### Reference implementations - -The reference implementations for: - -* `verify_success` can be - found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L261). -* `verify_failure` can be - found [here](https://github.com/TBD54566975/web5-kt/blob/466e8d8ca9771ae3a98767e5a4a79ac7b1e7a5d8/credentials/src/test/kotlin/web5/sdk/credentials/VerifiableCredentialTest.kt#L273). diff --git a/test-vectors/credentials/create.json b/test-vectors/credentials/create.json deleted file mode 100644 index 8ae2a49a5..000000000 --- a/test-vectors/credentials/create.json +++ /dev/null @@ -1,621 +0,0 @@ -{ - "description": "verifiable credential 1.1 signing", - "vectors": [ - { - "description": "bad no credential subject", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/58473", - "type": [ - "VerifiableCredential", - "AlumniCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad missing context", - "input": { - "credential": { - "@context": [ - ], - "id": "http://example.edu/credentials/58473", - "type": [ - "VerifiableCredential", - "AlumniCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "alumniOf": "Example University" - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad first context item", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/examples/v1", - "https://www.w3.org/2018/credentials/v1" - ], - "id": "http://example.edu/credentials/58473", - "type": [ - "VerifiableCredential", - "AlumniCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "alumniOf": "Example University" - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad multiple id values", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": [ - "http://example.edu/credentials/3731", - "http://example.edu/credentials/3732" - ], - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad id must be a uri", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "example", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad type must have at least one value", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad type must have VerifiableCredential as first value", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad issuance date", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "01/01/2010", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad multiple issuers", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": [ - "https://example.edu/issuers/14", - "https://example.edu/issuers/20" - ], - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad issuer must be uri", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "example", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad issuer as object without id", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": {}, - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad issuer as numeric id", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": 12345, - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad missing issuance date", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad missing issuer", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad expiration date with multiple values", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "expirationDate": [ - "2020-01-01T19:23:24Z", - "2021-01-01T19:23:24Z" - ], - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad expiration date value", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "expirationDate": "01/01/2020", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad credential status with missing id", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "credentialStatus": { - "type": "CredentialStatusList2017" - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad credential status with missing type", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "credentialStatus": { - "id": "https://example.edu/status/24" - }, - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "bad credential status as a string", - "input": { - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": [ - "VerifiableCredential", - "UniversityDegreeCredential" - ], - "issuer": "https://example.edu/issuers/14", - "issuanceDate": "2010-01-01T19:23:24Z", - "credentialSubject": { - "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science in Mechanical Engineering" - } - }, - "credentialStatus": "false", - "proof": { - "type": "RsaSignature2018" - } - } - }, - "errors": true - }, - { - "description": "creates a verifiable credential as a jwt with a did:key", - "input": { - "signerDidUri": "did:key:zQ3shNLt1aMWPbWRGa8VoeEbJofJ7xJe4FCPpDKxq1NZygpiy", - "signerPrivateJwk": { - "kty": "EC", - "d": "OeBCt3M8roz9F9Ny192TtZXf_-qPzAkwSM6ep7QdSO4", - "use": "sig", - "crv": "secp256k1", - "kid": "NB_qlUIr06-AikVVMFreq0lc-omQtzc6lwhhcvgO6r4", - "x": "DdtN8W6x_34pB_nkxR0e1tmDkNnsJeusBAEPzKWgf_Y", - "y": "u3W135inodLqtcEb9jNGS3JsM_uFKmkJSb8Trc9luWI", - "alg": "ES256K" - }, - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1" - ], - "type": [ - "VerifiableCredential", - "StreetCred" - ], - "id": "urn:uuid:6c8bbcf4-87af-449a-9bfb-30bf29976227", - "issuer": "did:key:zQ3shNLt1aMWPbWRGa8VoeEbJofJ7xJe4FCPpDKxq1NZygpiy", - "issuanceDate": "2023-11-30T00:03:13Z", - "credentialSubject": { - "id": "did:key:zQ3shkpavjKRewoBk6arPJnhA87ZzhLDEWgVvZKNHK6QqVJDB", - "localRespect": "high", - "legit": true - } - } - }, - "output": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2SyJ9.eyJpc3MiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkiLCJzdWIiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJpYXQiOjE3MDEzMDI1OTMsInZjIjp7Imlzc3VhbmNlRGF0ZSI6IjIwMjMtMTEtMzBUMDA6MDM6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJsb2NhbFJlc3BlY3QiOiJoaWdoIiwibGVnaXQiOnRydWV9LCJpZCI6InVybjp1dWlkOjZjOGJiY2Y0LTg3YWYtNDQ5YS05YmZiLTMwYmYyOTk3NjIyNyIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTdHJlZXRDcmVkIl0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sImlzc3VlciI6ImRpZDprZXk6elEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSJ9fQ.qoqF4-FinFsQ2J-NFSO46xCE8kUTZqZCU5fYr6tS0TQ6VP8y-ZnyR6R3oAqLs_Yo_CqQi23yi38uDjLjksiD2w" - }, - { - "description": "creates a verifiable credential as a jwt with a did:jwk", - "input": { - "signerDidUri": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6Ik5CX3FsVUlyMDYtQWlrVlZNRnJlcTBsYy1vbVF0emM2bHdoaGN2Z082cjQiLCJ4IjoiRGR0TjhXNnhfMzRwQl9ua3hSMGUxdG1Ea05uc0pldXNCQUVQektXZ2ZfWSIsInkiOiJ1M1cxMzVpbm9kTHF0Y0ViOWpOR1MzSnNNX3VGS21rSlNiOFRyYzlsdVdJIiwiYWxnIjoiRVMyNTZLIn0", - "signerPrivateJwk": { - "kty": "EC", - "d": "OeBCt3M8roz9F9Ny192TtZXf_-qPzAkwSM6ep7QdSO4", - "use": "sig", - "crv": "secp256k1", - "kid": "NB_qlUIr06-AikVVMFreq0lc-omQtzc6lwhhcvgO6r4", - "x": "DdtN8W6x_34pB_nkxR0e1tmDkNnsJeusBAEPzKWgf_Y", - "y": "u3W135inodLqtcEb9jNGS3JsM_uFKmkJSb8Trc9luWI", - "alg": "ES256K" - }, - "credential": { - "@context": [ - "https://www.w3.org/2018/credentials/v1" - ], - "type": [ - "VerifiableCredential", - "StreetCred" - ], - "id": "urn:uuid:6c8bbcf4-87af-449a-9bfb-30bf29976227", - "issuer": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6Ik5CX3FsVUlyMDYtQWlrVlZNRnJlcTBsYy1vbVF0emM2bHdoaGN2Z082cjQiLCJ4IjoiRGR0TjhXNnhfMzRwQl9ua3hSMGUxdG1Ea05uc0pldXNCQUVQektXZ2ZfWSIsInkiOiJ1M1cxMzVpbm9kTHF0Y0ViOWpOR1MzSnNNX3VGS21rSlNiOFRyYzlsdVdJIiwiYWxnIjoiRVMyNTZLIn0", - "issuanceDate": "2023-11-30T00:03:13Z", - "credentialSubject": { - "id": "did:key:zQ3shkpavjKRewoBk6arPJnhA87ZzhLDEWgVvZKNHK6QqVJDB", - "localRespect": "high", - "legit": true - } - } - }, - "output": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCMwIiwidHlwIjoiSldUIiwiYWxnIjoiRVMyNTZLIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCIsInN1YiI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImlhdCI6MTcwMTMwMjU5MywidmMiOnsiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMS0zMFQwMDowMzoxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImxvY2FsUmVzcGVjdCI6ImhpZ2giLCJsZWdpdCI6dHJ1ZX0sImlkIjoidXJuOnV1aWQ6NmM4YmJjZjQtODdhZi00NDlhLTliZmItMzBiZjI5OTc2MjI3IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaXNzdWVyIjoiZGlkOmp3azpleUpyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0ltTnlkaUk2SW5ObFkzQXlOVFpyTVNJc0ltdHBaQ0k2SWs1Q1gzRnNWVWx5TURZdFFXbHJWbFpOUm5KbGNUQnNZeTF2YlZGMGVtTTJiSGRvYUdOMlowODJjalFpTENKNElqb2lSR1IwVGpoWE5uaGZNelJ3UWw5dWEzaFNNR1V4ZEcxRWEwNXVjMHBsZFhOQ1FVVlFla3RYWjJaZldTSXNJbmtpT2lKMU0xY3hNelZwYm05a1RIRjBZMFZpT1dwT1IxTXpTbk5OWDNWR1MyMXJTbE5pT0ZSeVl6bHNkVmRKSWl3aVlXeG5Jam9pUlZNeU5UWkxJbjAifX0.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g" - } - ] -} \ No newline at end of file diff --git a/test-vectors/credentials/verify.json b/test-vectors/credentials/verify.json deleted file mode 100644 index 841f938ef..000000000 --- a/test-vectors/credentials/verify.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "description": "verifiable credential 1.1 verification", - "vectors": [ - { - "description": "bad vcJwt structure", - "input": { - "vcJwt": "foo.bar" - }, - "errors": true - }, - { - "description": "bad missing alg", - "input": { - "vcJwt": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.cbK62TrzOfbVDy06OWQUxkz--hKGGuG_Ch5on_SkiuU" - }, - "errors": true - }, - { - "description": "bad missing kid", - "input": { - "vcJwt": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.cbK62TrzOfbVDy06OWQUxkz--hKGGuG_Ch5on_SkiuU" - }, - "errors": true - }, - { - "description": "bad signature", - "input": { - "vcJwt": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCJ9.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g" - }, - "errors": true - }, - { - "description": "verify a jwt verifiable credential signed with a did:key", - "input": { - "vcJwt": "eyJraWQiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkjelEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSIsInR5cCI6IkpXVCIsImFsZyI6IkVTMjU2SyJ9.eyJpc3MiOiJkaWQ6a2V5OnpRM3NoTkx0MWFNV1BiV1JHYThWb2VFYkpvZko3eEplNEZDUHBES3hxMU5aeWdwaXkiLCJzdWIiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJpYXQiOjE3MDEzMDI1OTMsInZjIjp7Imlzc3VhbmNlRGF0ZSI6IjIwMjMtMTEtMzBUMDA6MDM6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5OnpRM3Noa3BhdmpLUmV3b0JrNmFyUEpuaEE4N1p6aExERVdnVnZaS05ISzZRcVZKREIiLCJsb2NhbFJlc3BlY3QiOiJoaWdoIiwibGVnaXQiOnRydWV9LCJpZCI6InVybjp1dWlkOjZjOGJiY2Y0LTg3YWYtNDQ5YS05YmZiLTMwYmYyOTk3NjIyNyIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJTdHJlZXRDcmVkIl0sIkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sImlzc3VlciI6ImRpZDprZXk6elEzc2hOTHQxYU1XUGJXUkdhOFZvZUViSm9mSjd4SmU0RkNQcERLeHExTlp5Z3BpeSJ9fQ.qoqF4-FinFsQ2J-NFSO46xCE8kUTZqZCU5fYr6tS0TQ6VP8y-ZnyR6R3oAqLs_Yo_CqQi23yi38uDjLjksiD2w" - } - }, - { - "description": "verify a jwt verifiable credential signed with a did:jwk", - "input": { - "vcJwt": "eyJraWQiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCMwIiwidHlwIjoiSldUIiwiYWxnIjoiRVMyNTZLIn0.eyJpc3MiOiJkaWQ6andrOmV5SnJkSGtpT2lKRlF5SXNJblZ6WlNJNkluTnBaeUlzSW1OeWRpSTZJbk5sWTNBeU5UWnJNU0lzSW10cFpDSTZJazVDWDNGc1ZVbHlNRFl0UVdsclZsWk5SbkpsY1RCc1l5MXZiVkYwZW1NMmJIZG9hR04yWjA4MmNqUWlMQ0o0SWpvaVJHUjBUamhYTm5oZk16UndRbDl1YTNoU01HVXhkRzFFYTA1dWMwcGxkWE5DUVVWUWVrdFhaMlpmV1NJc0lua2lPaUoxTTFjeE16VnBibTlrVEhGMFkwVmlPV3BPUjFNelNuTk5YM1ZHUzIxclNsTmlPRlJ5WXpsc2RWZEpJaXdpWVd4bklqb2lSVk15TlRaTEluMCIsInN1YiI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImlhdCI6MTcwMTMwMjU5MywidmMiOnsiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMS0zMFQwMDowMzoxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6elEzc2hrcGF2aktSZXdvQms2YXJQSm5oQTg3WnpoTERFV2dWdlpLTkhLNlFxVkpEQiIsImxvY2FsUmVzcGVjdCI6ImhpZ2giLCJsZWdpdCI6dHJ1ZX0sImlkIjoidXJuOnV1aWQ6NmM4YmJjZjQtODdhZi00NDlhLTliZmItMzBiZjI5OTc2MjI3IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwiaXNzdWVyIjoiZGlkOmp3azpleUpyZEhraU9pSkZReUlzSW5WelpTSTZJbk5wWnlJc0ltTnlkaUk2SW5ObFkzQXlOVFpyTVNJc0ltdHBaQ0k2SWs1Q1gzRnNWVWx5TURZdFFXbHJWbFpOUm5KbGNUQnNZeTF2YlZGMGVtTTJiSGRvYUdOMlowODJjalFpTENKNElqb2lSR1IwVGpoWE5uaGZNelJ3UWw5dWEzaFNNR1V4ZEcxRWEwNXVjMHBsZFhOQ1FVVlFla3RYWjJaZldTSXNJbmtpT2lKMU0xY3hNelZwYm05a1RIRjBZMFZpT1dwT1IxTXpTbk5OWDNWR1MyMXJTbE5pT0ZSeVl6bHNkVmRKSWl3aVlXeG5Jam9pUlZNeU5UWkxJbjAifX0.8AehkiboIK6SZy6LHC9ugy_OcT2VsjluzH4qzsgjfTtq9fEsGyY-cOW_xekNUa2RE2VzlP6FXk0gDn4xf6_r4g" - } - } - ] -} \ No newline at end of file diff --git a/test-vectors/did_jwk/README.md b/test-vectors/did_jwk/README.md deleted file mode 100644 index 6b0edf823..000000000 --- a/test-vectors/did_jwk/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# `did:jwk` Test Vectors - -## Resolve - -Resolution test vectors are available [here](./resolve.json) - -### Input - -the value of `input` is a string that is to be treated as a DID URI - -### Output - -the value of `output` is an object that contains the following properties - -| Property | Description | -| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `didDocument` | the expected [didDocument](https://www.w3.org/TR/did-core/#dfn-diddocument) when `input` is resolved. Note that `didDocument` is set to `null` if resolution is unsuccessful | -| `didDocumentMetadata` | the expected [didDocumentMetadata](https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata) when `input` is resolved. Note for `did:jwk` this is _always_ an empty object | -| `didResolutionMetadata` | the expected [didResolutionMetadata](https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata) when `input` is resolved. Note for `did:jwk`, on success, this is _always_ an empty object | diff --git a/test-vectors/did_jwk/resolve.json b/test-vectors/did_jwk/resolve.json deleted file mode 100644 index b1aec6bcb..000000000 --- a/test-vectors/did_jwk/resolve.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "description": "did:jwk resolution test vectors", - "vectors": [ - { - "description": "resolves did:jwk 1", - "input": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", - "output": { - "@context": "https://w3id.org/did-resolution/v1", - "didDocument": { - "@context": [ - "https://www.w3.org/ns/did/v1", - "https://w3id.org/security/suites/jws-2020/v1" - ], - "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", - "verificationMethod": [ - { - "type": "JsonWebKey2020", - "id": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0", - "controller": "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0", - "publicKeyJwk": { - "kty": "EC", - "use": "sig", - "crv": "secp256k1", - "kid": "i3SPRBtJKovHFsBaqM92ti6xQCJLX3E7YCewiHV2CSg", - "x": "vdrbz2EOzvbLDV_-kL4eJt7VI-8TFZNmA9YgWzvhh7U", - "y": "VLFqQMZP_AspucXoWX2-bGXpAO1fQ5Ln19V5RAxrgvU", - "alg": "ES256K" - } - } - ], - "authentication": [ - "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" - ], - "assertionMethod": [ - "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" - ], - "capabilityInvocation": [ - "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" - ], - "capabilityDelegation": [ - "did:jwk:eyJrdHkiOiJFQyIsInVzZSI6InNpZyIsImNydiI6InNlY3AyNTZrMSIsImtpZCI6ImkzU1BSQnRKS292SEZzQmFxTTkydGk2eFFDSkxYM0U3WUNld2lIVjJDU2ciLCJ4IjoidmRyYnoyRU96dmJMRFZfLWtMNGVKdDdWSS04VEZaTm1BOVlnV3p2aGg3VSIsInkiOiJWTEZxUU1aUF9Bc3B1Y1hvV1gyLWJHWHBBTzFmUTVMbjE5VjVSQXhyZ3ZVIiwiYWxnIjoiRVMyNTZLIn0#0" - ] - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": {} - }, - "errors": false - }, - { - "description": "resolves did:jwk 2", - "input": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ", - "output": { - "@context": "https://w3id.org/did-resolution/v1", - "didDocument": { - "@context": [ - "https://www.w3.org/ns/did/v1", - "https://w3id.org/security/suites/jws-2020/v1" - ], - "id": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ", - "verificationMethod": [ - { - "type": "JsonWebKey2020", - "id": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0", - "controller": "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ", - "publicKeyJwk": { - "kty": "OKP", - "use": "sig", - "crv": "Ed25519", - "kid": "VtSHXPlKDw1EEoOj5XN3XWhjSPYVNvX-e4vjRO0yYJA", - "x": "iz70svSLxNZhsDxeJQ_jnOVbX3KFNkcBcMjWjZmXEsA", - "alg": "EdDSA" - } - } - ], - "authentication": [ - "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" - ], - "assertionMethod": [ - "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" - ], - "capabilityInvocation": [ - "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" - ], - "capabilityDelegation": [ - "did:jwk:eyJrdHkiOiJPS1AiLCJ1c2UiOiJzaWciLCJjcnYiOiJFZDI1NTE5Iiwia2lkIjoiVnRTSFhQbEtEdzFFRW9PajVYTjNYV2hqU1BZVk52WC1lNHZqUk8weVlKQSIsIngiOiJpejcwc3ZTTHhOWmhzRHhlSlFfam5PVmJYM0tGTmtjQmNNaldqWm1YRXNBIiwiYWxnIjoiRWREU0EifQ#0" - ] - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": {} - }, - "errors": false - }, - { - "description": "resolution for invalid did", - "input": "did:jwk:hehe", - "output": { - "@context": "https://w3id.org/did-resolution/v1", - "didDocument": null, - "didResolutionMetadata": { - "error": "invalidDid" - }, - "didDocumentMetadata": {} - }, - "errors": true - } - ] -} diff --git a/test-vectors/did_web/README.md b/test-vectors/did_web/README.md deleted file mode 100644 index 4f2e13b63..000000000 --- a/test-vectors/did_web/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# `did:web` Test Vectors - -## Resolve - -Resolution test vectors are available [here](./resolve.json) - -### Input - -The value of `input` is an object that contains the following properties: - -| Property | Description | -|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `didUri` | The DID URI to be resolved. | -| `mockServer` | Optional. Object used to describe mocking behavior. Every key in the object is a URL, and the value is the JSON object that should be sent back as the response to a HTTP GET request. | - -### Output - -The value of `output` is an object that contains the following properties. - -| Property | Description | -|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `didDocument` | the expected [didDocument](https://www.w3.org/TR/did-core/#dfn-diddocument) when `input.didUri` is resolved. Note that `didDocument` is set to `{}` if resolution is unsuccessful | -| `didDocumentMetadata` | the expected [didDocumentMetadata](https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata) when `input.didUri` is resolved. Note for `did:web` this is _always_ an empty object | -| `didResolutionMetadata` | the expected [didResolutionMetadata](https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata) when `input.didUri` is resolved. Note for `did:web`, on success, this is _always_ an empty object | diff --git a/test-vectors/did_web/resolve.json b/test-vectors/did_web/resolve.json deleted file mode 100644 index a4b6633ea..000000000 --- a/test-vectors/did_web/resolve.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "description": "did:web resolution", - "vectors": [ - { - "description": "resolves to a well known URL", - "input": { - "didUri": "did:web:example.com", - "mockServer": { - "https://example.com/.well-known/did.json": { - "id": "did:web:example.com" - } - } - }, - "output": { - "didDocument": { - "id": "did:web:example.com" - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": {} - } - }, - { - "description": "resolves to a URL with a path", - "input": { - "didUri": "did:web:w3c-ccg.github.io:user:alice", - "mockServer": { - "https://w3c-ccg.github.io/user/alice/did.json": { - "id": "did:web:w3c-ccg.github.io:user:alice" - } - } - }, - "output": { - "didDocument": { - "id": "did:web:w3c-ccg.github.io:user:alice" - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": {} - } - }, - { - "description": "resolves to a URL with a path and a port", - "input": { - "didUri": "did:web:example.com%3A3000:user:alice", - "mockServer": { - "https://example.com:3000/user/alice/did.json": { - "id": "did:web:example.com%3A3000:user:alice" - } - } - }, - "output": { - "didDocument": { - "id": "did:web:example.com%3A3000:user:alice" - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": {} - } - }, - { - "description": "methodNotSupported error returned when did method is not web", - "input": { - "didUri": "did:dht:gb46emk73wkenrut43ii67a3o5qctojcaucebth7r83pst6yeh8o" - }, - "output": { - "didDocument": null, - "didDocumentMetadata": {}, - "didResolutionMetadata": { - "error": "methodNotSupported" - } - }, - "errors": true - }, - { - "description": "notFound error returned when domain does not exist", - "input": { - "didUri": "did:web:doesnotexist.com" - }, - "output": { - "didDocument": null, - "didDocumentMetadata": {}, - "didResolutionMetadata": { - "error": "notFound" - } - }, - "errors": true - }, - { - "description": "invalidDid error returned for domain name with invalid character", - "input": { - "didUri": "did:web:invalidcharø.com" - }, - "output": { - "didDocument": null, - "didDocumentMetadata": {}, - "didResolutionMetadata": { - "error": "invalidDid" - } - }, - "errors": true - } - ] -} \ No newline at end of file diff --git a/test-vectors/index.html b/test-vectors/index.html deleted file mode 100644 index 358a26d2f..000000000 --- a/test-vectors/index.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - Web5 Test Vectors - - - -
-
-

Standard Vector Structure

- -
- -
-

Test Vectors

-
-
-

Crypto

-
- -
-

DIDs

- -
- -
-

VCs

-
- -
- - - \ No newline at end of file diff --git a/test-vectors/presentation_exchange/README.md b/test-vectors/presentation_exchange/README.md deleted file mode 100644 index 401382373..000000000 --- a/test-vectors/presentation_exchange/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Presentation Exchange Test Vectors - -## CreatePresentationFromCredentials - -Input and output for a full presentation exchange test vectors are available [here](./wa-license.json) The reference implementation can be found [here](https://github.com/TBD54566975/web5-js/blob/main/packages/credentials/src/presentation-exchange.ts#L80) - -### Input - -the value of `input` is a an object with `presentationDefinition` and the corresponding `credentialJwt` - -| Property | Description | -| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `presentationDefinition` | the input [presentationDefinition](https://identity.foundation/presentation-exchange/#presentation-definition) showing the requirements used for this getting an example WA license | -| `credentialJwt` | the input [verifiable credential secured as a JWT](https://www.w3.org/TR/vc-data-model/#json-web-token) that corresponds to the presentationDefinition to fulfill it and do a full presentation exchange - -### Output - -the value of `output` is an object that contains the following properties - -| Property | Description | -| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `presentationSubmission` | the expected [presentationSubmission](https://identity.foundation/presentation-exchange/#presentation-submission) when the `inputs` are processed by `createPresentationFromCredentials`. | diff --git a/test-vectors/presentation_exchange/create_presentation_from_credentials.json b/test-vectors/presentation_exchange/create_presentation_from_credentials.json deleted file mode 100644 index e026bb70f..000000000 --- a/test-vectors/presentation_exchange/create_presentation_from_credentials.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "description":"Create Presentation From Credentials", - "vectors":[ - { - "description":"presentation exchange for wa drivers license", - "input":{ - "presentationDefinition":{ - "id":"32f54163-7166-48f1-93d8-ff217bdb0653", - "input_descriptors":[ - { - "id":"wa_driver_license", - "name":"Washington State Business License", - "purpose":"We can only allow licensed Washington State business representatives into the WA Business Conference", - "constraints":{ - "fields":[ - { - "path":[ - "$.credentialSubject.dateOfBirth", - "$.credentialSubject.licenseNumber", - "$.credentialSubject.licenseState" - ] - } - ] - } - } - ] - }, - "credentialJwt":"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImRpZDprZXk6ejZNa25qSkVXZ0xzaDNSeDM3ZXpUQjJKaE1RY1kxYzN4dnRYS3cxaEF6ZmVlSnpKI3o2TWtuakpFV2dMc2gzUngzN2V6VEIySmhNUWNZMWMzeHZ0WEt3MWhBemZlZUp6SiJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtuakpFV2dMc2gzUngzN2V6VEIySmhNUWNZMWMzeHZ0WEt3MWhBemZlZUp6SiIsInN1YiI6ImRpZDprZXk6ejZNa25qSkVXZ0xzaDNSeDM3ZXpUQjJKaE1RY1kxYzN4dnRYS3cxaEF6ZmVlSnpKIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIldhRHJpdmVMaWNlbnNlIl0sImlkIjoidXJuOnV1aWQ6OGYzYmU5NjktOTEyYS00MWNjLWFjYjUtZjMzOGQ2MmQ1OGNlIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rbmpKRVdnTHNoM1J4MzdlelRCMkpoTVFjWTFjM3h2dFhLdzFoQXpmZWVKekoiLCJpc3N1YW5jZURhdGUiOiIyMDIzLTExLTI5VDIxOjQ5OjIxWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rbmpKRVdnTHNoM1J4MzdlelRCMkpoTVFjWTFjM3h2dFhLdzFoQXpmZWVKekoiLCJkYXRlT2ZCaXJ0aCI6IjExLTExLTIwMTEiLCJsaWNlbnNlTnVtYmVyIjoiMTIzNCIsImxpY2Vuc2VTdGF0ZSI6IldBIn19fQ.oGaIuZI9vRcauGI2Zi469mx8KZR1zpNV_HbmFtvWoap6CaPtn-uaG4oxswAfB4ITUs5fePKIgUvdGbBKyWx1CQ" - }, - "output":{ - "presentationSubmission":{ - "id":"VPaHaqzslzOqisx02jMS0", - "definition_id":"32f54163-7166-48f1-93d8-ff217bdb0653", - "descriptor_map":[ - { - "id":"wa_driver_license", - "format":"jwt_vc", - "path":"$.verifiableCredential[0]" - } - ] - } - } - } - ] - } \ No newline at end of file diff --git a/test-vectors/presentation_exchange/select_credentials.json b/test-vectors/presentation_exchange/select_credentials.json deleted file mode 100644 index 14e2adced..000000000 --- a/test-vectors/presentation_exchange/select_credentials.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "description":"Select Credentials", - "vectors":[ - { - "description":"select credentials for presentation", - "input":{ - "presentationDefinition":{ - "id":"test-pd-id", - "name":"simple PD", - "purpose":"pd for testing", - "input_descriptors":[ - { - "id":"whatever", - "purpose":"id for testing", - "constraints":{ - "fields":[ - { - "path":[ - "$.vc.credentialSubject.btcAddress", - "$.credentialSubject.btcAddress", - "$.btcAddress" - ] - } - ] - } - }, - { - "id":"whatever2", - "purpose":"id for testing2", - "constraints":{ - "fields":[ - { - "path":[ - "$.vc.credentialSubject.dogeAddress", - "$.credentialSubject.dogeAddress", - "$.dogeAddress" - ] - } - ] - } - } - ] - }, - "credentialJwts":[ - "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiaWQiOiJ1cm46dXVpZDoxM2Q1YTg3YS1kY2Y1LTRmYjktOWUyOS0wZTYyZTI0YzQ0ODYiLCJpc3N1ZXIiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsImlzc3VhbmNlRGF0ZSI6IjIwMjMtMTItMDdUMTc6MTk6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsIm90aGVydGhpbmciOiJvdGhlcnN0dWZmIn19fQ.FVvL3z8LHJXm7lGX2bGFvH_U-bTyoheRbLzE7zIk_P1BKwRYeW4sbYNzsovFX59twXrnpF-hHkqVVsejSljxDw", - "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5Eb2dlQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjViZTkwNzQ0LWE3MjQtNGJlNy1hN2EzLTlmMjYwZWMwNDhkMSIsImlzc3VlciI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0wN1QxNzoxOToxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiYnRjQWRkcmVzcyI6ImJ0Y0FkZHJlc3MxMjMiLCJkb2dlQWRkcmVzcyI6ImRvZ2VBZGRyZXNzMTIzIn19fQ.gTfgbVTj_IQS_rM-mOAURGan6Ojk7MSSgFHeog6cqo6DWpDq0pwSRxceAqZhZbSKsW2MFpbBpTko1BgNNMIrDQ", - "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ", - "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ" - ] - }, - "output":{ - "selectedCredentials":[ - "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5Eb2dlQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjViZTkwNzQ0LWE3MjQtNGJlNy1hN2EzLTlmMjYwZWMwNDhkMSIsImlzc3VlciI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0wN1QxNzoxOToxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiYnRjQWRkcmVzcyI6ImJ0Y0FkZHJlc3MxMjMiLCJkb2dlQWRkcmVzcyI6ImRvZ2VBZGRyZXNzMTIzIn19fQ.gTfgbVTj_IQS_rM-mOAURGan6Ojk7MSSgFHeog6cqo6DWpDq0pwSRxceAqZhZbSKsW2MFpbBpTko1BgNNMIrDQ", - "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ" - ] - } - } - ] - } \ No newline at end of file diff --git a/test-vectors/vectors.schema.json b/test-vectors/vectors.schema.json deleted file mode 100644 index 9ff336e40..000000000 --- a/test-vectors/vectors.schema.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Schema for representing test vectors for various features.", - "type": "object", - "required": ["description", "vectors"], - "properties": { - "description": { - "type": "string", - "description": "A general description of the test vectors collection." - }, - "vectors": { - "type": "array", - "description": "An array of test vectors for testing different features.", - "items": { - "type": "object", - "description": "A single test vector, which includes a description and input, and may optionally include an expected output and an errors indicator.", - "required": ["description", "input"], - "properties": { - "description": { - "type": "string", - "description": "A description of what this test vector is validating." - }, - "input": { - "description": "The input for the test vector, which can be of any type." - }, - "output": { - "description": "The expected output for the test vector, which can be of any type." - }, - "errors": { - "type": "boolean", - "default": false, - "description": "Indicates whether the test vector is expected to produce an error. Defaults to false if not present." - } - }, - "additionalProperties": false - } - } - } - } - \ No newline at end of file From 38ba056ca3bfc9486f8e1045d245f66f98f31fc0 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 13:19:11 -0500 Subject: [PATCH 35/39] Remove references to tags in the XChaCha20Poly1305 comments Signed-off-by: Frank Hinek --- packages/crypto/src/primitives/xchacha20-poly1305.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/crypto/src/primitives/xchacha20-poly1305.ts b/packages/crypto/src/primitives/xchacha20-poly1305.ts index 6d13ad081..4eea6d177 100644 --- a/packages/crypto/src/primitives/xchacha20-poly1305.ts +++ b/packages/crypto/src/primitives/xchacha20-poly1305.ts @@ -119,13 +119,11 @@ export class XChaCha20Poly1305 { * ```ts * const encryptedData = new Uint8Array([...]); // Encrypted data * const nonce = new Uint8Array(24); // 24-byte nonce - * const tag = new Uint8Array([...]); // Authentication tag * const additionalData = new Uint8Array([...]); // Optional AAD * const key = { ... }; // A Jwk object representing the XChaCha20-Poly1305 key * const decryptedData = await XChaCha20Poly1305.decrypt({ * data: encryptedData, * nonce, - * tag, * additionalData, * key * }); @@ -171,7 +169,7 @@ export class XChaCha20Poly1305 { * const nonce = utils.randomBytes(24); // 24-byte nonce * const additionalData = new TextEncoder().encode('Associated data'); // Optional AAD * const key = { ... }; // A Jwk object representing an XChaCha20-Poly1305 key - * const { ciphertext, tag } = await XChaCha20Poly1305.encrypt({ + * const encryptedData = await XChaCha20Poly1305.encrypt({ * data, * nonce, * additionalData, @@ -185,8 +183,8 @@ export class XChaCha20Poly1305 { * @param params.nonce - A 24-byte nonce for the encryption process. * @param params.additionalData - Optional additional authenticated data. * - * @returns A Promise that resolves to an object containing the encrypted data (`ciphertext`) and - * the authentication tag (`tag`). + * @returns A Promise that resolves to a byte array containing the encrypted data and the + * authentication tag. */ public static async encrypt({ data, key, nonce, additionalData}: { additionalData?: Uint8Array; @@ -194,7 +192,6 @@ export class XChaCha20Poly1305 { key: Jwk; nonce: Uint8Array; }): Promise { - // }): Promise<{ ciphertext: Uint8Array, tag: Uint8Array }> { // Convert the private key from JWK format to bytes. const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey: key }); From 258446ca57a0cb789bf7ddcc8b306412823f5b08 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 16:01:38 -0500 Subject: [PATCH 36/39] Remove duplication from DidDhtUtils.identifierToIdentityKey() Signed-off-by: Frank Hinek --- packages/dids/src/methods/did-dht.ts | 68 ++++++++++------------------ 1 file changed, 25 insertions(+), 43 deletions(-) diff --git a/packages/dids/src/methods/did-dht.ts b/packages/dids/src/methods/did-dht.ts index 816aaab46..151b68205 100644 --- a/packages/dids/src/methods/did-dht.ts +++ b/packages/dids/src/methods/did-dht.ts @@ -1397,6 +1397,25 @@ class DidDhtUtils { public static async identifierToIdentityKey({ didUri }: { didUri: string }): Promise { + // Decode the method-specific identifier from z-base-32 to a byte array. + let identityKeyBytes = DidDhtUtils.identifierToIdentityKeyBytes({ didUri }); + + // Convert the byte array to a JWK. + const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); + + return identityKey; + } + + /** + * Converts a DID URI to the byte array representation of the Identity Key. + * + * @param params - The parameters to use for the conversion. + * @param params.didUri - The DID URI containing the Identity Key. + * @returns A byte array representation of the Identity Key. + */ + public static identifierToIdentityKeyBytes({ didUri }: { + didUri: string + }): Uint8Array { // Parse the DID URI. const parsedDid = DidUri.parse(didUri); @@ -1414,17 +1433,15 @@ class DidDhtUtils { let identityKeyBytes: Uint8Array | undefined; try { identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); - } catch { /* Capture error */ } - - // Verify that the method-specific identifier was decoded successfully. - if (!identityKeyBytes || identityKeyBytes.length !== 32) { - throw new DidError(DidErrorCode.InvalidDid, `Failed to decode method-specific identifier`); + } catch { + throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`); } - // Convert the byte array to a JWK. - const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes }); + if (identityKeyBytes.length !== 32) { + throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`); + } - return identityKey; + return identityKeyBytes; } /** @@ -1449,41 +1466,6 @@ class DidDhtUtils { return `did:${DidDht.methodName}:${identifier}`; } - /** - * Converts a DID URI to the byte array representation of the Identity Key. - * - * @param params - The parameters to use for the conversion. - * @param params.didUri - The DID URI containing the Identity Key. - * @returns A byte array representation of the Identity Key. - */ - public static identifierToIdentityKeyBytes({ didUri }: { - didUri: string - }): Uint8Array { - // Parse the DID URI. - const parsedDid = DidUri.parse(didUri); - - // Verify that the DID URI is valid. - if (!(parsedDid && parsedDid.method === DidDht.methodName)) { - throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`); - } - - // Decode the method-specific identifier from z-base-32 to a byte array. - let identityKeyBytes: Uint8Array | undefined; - try { - identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array(); - } catch { /* Capture error */ } - - if (!identityKeyBytes) { - throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`); - } - - if (identityKeyBytes.length !== 32) { - throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`); - } - - return identityKeyBytes; - } - /** * Returns the appropriate key converter for the specified cryptographic curve. * From 53b671272820a6ce7888374f41f8d394ed41b4fb Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Wed, 31 Jan 2024 16:02:22 -0500 Subject: [PATCH 37/39] Correct typo in comments Co-authored-by: nitro-neal <5314059+nitro-neal@users.noreply.github.com> --- packages/dids/src/did-error.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dids/src/did-error.ts b/packages/dids/src/did-error.ts index 541240830..efc0b93d5 100644 --- a/packages/dids/src/did-error.ts +++ b/packages/dids/src/did-error.ts @@ -16,8 +16,8 @@ export class DidError extends Error { // and that V8 stack traces (like Chrome, Edge, and Node.js) are more readable and relevant. Object.setPrototypeOf(this, new.target.prototype); - // Captures the stack trace in V8 engines (like Chrome, Edge, and Node.js). // In non-V8 - // environments, the stack trace will still be captured. + // Captures the stack trace in V8 engines (like Chrome, Edge, and Node.js). + // In non-V8 environments, the stack trace will still be captured. if (Error.captureStackTrace) { Error.captureStackTrace(this, DidError); } From 0a97f05d04583c6f3a4784cde489e3a8fc3a484e Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 1 Feb 2024 09:32:29 -0500 Subject: [PATCH 38/39] Update crypto README Signed-off-by: Frank Hinek --- packages/crypto-aws-kms/README.md | 26 +++++++++++++------------- packages/crypto/README.md | 26 +++++++++++++------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/crypto-aws-kms/README.md b/packages/crypto-aws-kms/README.md index b6c45613e..603678439 100644 --- a/packages/crypto-aws-kms/README.md +++ b/packages/crypto-aws-kms/README.md @@ -67,13 +67,13 @@ npm install @web5/crypto-aws-kms Example ESM import: ```js -import { AwsKmsCrypto } from "@web5/crypto-aws-kms"; +import { AwsKeyManager } from "@web5/crypto-aws-kms"; ``` Example CJS require: ```js -const { AwsKmsCrypto } = require("@web5/crypto-aws-kms"); +const { AwsKeyManager } = require("@web5/crypto-aws-kms"); ``` ### Configure the AWS SDK @@ -157,9 +157,9 @@ private keys. Start by instantiating an AWS KMS implementation of the `CryptoApi` interface: ```ts -import { AwsKmsCrypto } from "@web5/crypto-aws-kms"; +import { AwsKeyManager } from "@web5/crypto-aws-kms"; -const crypto = new AwsKmsCrypto(); +const kms = new AwsKeyManager(); ``` If not provided, a default instance of @@ -172,7 +172,7 @@ client signs and encrypts all communication with the AWS KMS API. See Generate a random private key: ```ts -const privateKeyUri = await cypto.generateKey({ algorithm: "ES256K" }); +const privateKeyUri = await kms.generateKey({ algorithm: "ES256K" }); console.log(privateKeyUri); // Output: urn:jwk:U01_M3_A9vMLOWixG-rlfC-_f3LLdurttn7c7d3_upU ``` @@ -181,7 +181,7 @@ Create an ECDSA signature over arbitrary data using the private key: ```ts const data = new TextEncoder().encode("Message"); -const signature = await crypto.sign({ +const signature = await kms.sign({ keyUri: privateKeyUri, data, }); @@ -200,7 +200,7 @@ console.log(signature); Get the public key in JWK format: ```ts -const publicKey = await crypto.getPublicKey({ keyUri: privateKeyUri }); +const publicKey = await kms.getPublicKey({ keyUri: privateKeyUri }); console.log(publicKey); // Output: // { @@ -216,7 +216,7 @@ console.log(publicKey); Verify the signature using the public key: ```ts -const isValid = await crypto.verify({ +const isValid = await kms.verify({ key: publicKey, signature, data, @@ -229,7 +229,7 @@ Compute the hash digest of arbitrary data: ```ts const data = new TextEncoder().encode("Message"); -const hash = await crypto.digest({ algorithm: "SHA-256", data }); +const hash = await kms.digest({ algorithm: "SHA-256", data }); console.log(hash); // Output: // Uint8Array(32) [ @@ -244,20 +244,20 @@ console.log(hash); ### Configure the AWS SDK `KMSClient` -By default, `AwsKmsCrypto` creates an instance of +By default, `AwsKeyManager` creates an instance of [`KMSClient`](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/kms/) which uses the credential and configuration information supplied in shared AWS `config` and `credentials` files or environment variables. To set the region, credentials, and other options used by `KMSClient` at -runtime, a custom instance can be passed to the `AwsKmsCrypto` constructor. +runtime, a custom instance can be passed to the `AwsKeyManager` constructor. For example, to set the AWS region to which the client will send requests: ```typescript import { KMSClient } from "@aws-sdk/client-kms"; -import { AwsKmsCrypto } from "@web5/crypto-aws-kms"; +import { AwsKeyManager } from "@web5/crypto-aws-kms"; const kmsClient = new KMSClient({ region: "us-east-1" }); -const crypto = new AwsKmsCrypto({ kmsClient }); +const kms = new AwsKeyManager({ kmsClient }); ``` Additional configuration fields of the `KMSClient` class constructor are described in the diff --git a/packages/crypto/README.md b/packages/crypto/README.md index a7e76d740..fa5048881 100644 --- a/packages/crypto/README.md +++ b/packages/crypto/README.md @@ -184,9 +184,9 @@ cloud-based services (e.g., AWS KMS). Extensions that support external KMS servi Start by instantiating a local KMS implementation of the `CryptoApi` interface: ```ts -import { LocalKmsCrypto } from "@web5/crypto"; +import { LocalKeyManager } from "@web5/crypto"; -const crypto = new LocalKmsCrypto(); +const kms = new LocalKeyManager(); ``` An ephemeral, in-memory key store is used by default but any persistent store that implements the @@ -197,7 +197,7 @@ for an example. Generate a random private key: ```ts -const privateKeyUri = await cypto.generateKey({ algorithm: "Ed25519" }); +const privateKeyUri = await kms.generateKey({ algorithm: "Ed25519" }); console.log(privateKeyUri); // Output: urn:jwk:8DaTzHZcvQXUVvl8ezQKgGQHza1hiOZlPkdrB55Vt6Q ``` @@ -206,7 +206,7 @@ Create an EdDSA signature over arbitrary data using the private key: ```ts const data = new TextEncoder().encode("Message"); -const signature = await crypto.sign({ +const signature = await kms.sign({ keyUri: privateKeyUri, data, }); @@ -225,7 +225,7 @@ console.log(signature); Get the public key in JWK format: ```ts -const publicKey = await crypto.getPublicKey({ keyUri: privateKeyUri }); +const publicKey = await kms.getPublicKey({ keyUri: privateKeyUri }); console.log(publicKey); // Output: // { @@ -240,7 +240,7 @@ console.log(publicKey); Verify the signature using the public key: ```ts -const isValid = await crypto.verify({ +const isValid = await kms.verify({ key: publicKey, signature, data, @@ -252,7 +252,7 @@ console.log(isValid); Export the private key: ```ts -const privateKey = await crypto.exportKey({ keyUri }); +const privateKey = await kms.exportKey({ keyUri }); console.log(privateKey); // Output: // { @@ -277,14 +277,14 @@ const privateKey: Jwk = { d: "0xLuQyXFaWjrqp2o0orhwvwhtYhp2Z7KeRcioIs78CY", }; -const keyUri = await crypto.importKey({ key: privateKey }); +const keyUri = await kms.importKey({ key: privateKey }); ``` Compute the hash digest of arbitrary data: ```ts const data = new TextEncoder().encode("Message"); -const hash = await crypto.digest({ algorithm: "SHA-256", data }); +const hash = await kms.digest({ algorithm: "SHA-256", data }); console.log(hash); // Output: // Uint8Array(32) [ @@ -396,7 +396,7 @@ const uuid = randomUuid(); ### Persistent Local KMS Key Store -By default, `LocalKmsCrypto` uses an in-memory key store to simplify prototyping and testing. +By default, `LocalKeyManager` uses an in-memory key store to simplify prototyping and testing. To persist keys that are generated or imported, an implementation of the [`KeyValueStore`](https://github.com/TBD54566975/web5-js/blob/5f364bc0d859e28f1388524ebe8ef152a71727c4/packages/common/src/types.ts#L4-L43) interface can be passed. @@ -412,14 +412,14 @@ const db = new Level("db_location", { valueEncoding: "json", }); const keyStore = new LevelStore({ db }); -const crypto = new LocalKmsCrypto({ keyStore }); +const kms = new LocalKeyManager({ keyStore }); ``` ## Cryptographic Primitives This library encourages using its capabilities through concrete implementations of the `CryptoApi` -interface (e.g., [`LocalKmsCrypto`](#using-a-local-kms) or -[`AwsKmsCrypto`][crypto-aws-kms-repo-link]). These implementations provides high-level, +interface (e.g., [`LocalKeyManager`](#using-a-local-kms) or +[`AwsKeyManager`][crypto-aws-kms-repo-link]). These implementations provides high-level, user-friendly access to a range of cryptographic functions. However, for developers requiring lower-level control or specific customizations, the library also exposes its cryptographic primitives directly. These primitives include a variety of cipher, hash, signature, key derivation, From a3e4448d945491b80f375be6d8e11a06846a1235 Mon Sep 17 00:00:00 2001 From: Frank Hinek Date: Thu, 1 Feb 2024 17:21:54 -0500 Subject: [PATCH 39/39] Correct typo, add DHT test, and remove unused file Signed-off-by: Frank Hinek --- .../test-vectors/did-resolver/resolve.json | 0 packages/dids/tests/methods/did-dht.spec.ts | 14 ++++++++++++++ packages/dids/tests/methods/did-web.spec.ts | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) delete mode 100644 packages/dids/tests/fixtures/test-vectors/did-resolver/resolve.json diff --git a/packages/dids/tests/fixtures/test-vectors/did-resolver/resolve.json b/packages/dids/tests/fixtures/test-vectors/did-resolver/resolve.json deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/dids/tests/methods/did-dht.spec.ts b/packages/dids/tests/methods/did-dht.spec.ts index 8a5de82c4..5e4088a28 100644 --- a/packages/dids/tests/methods/did-dht.spec.ts +++ b/packages/dids/tests/methods/did-dht.spec.ts @@ -330,6 +330,20 @@ describe('DidDht', () => { expect(isValid).to.be.true; }); + it('throws an error if publishing fails', async () => { + // Simulate a network error when attempting to publish the DID. + fetchStub.rejects(new Error('Network error')); + + try { + await DidDht.create(); + + expect.fail('Expected an error to be thrown.'); + } catch (error: any) { + expect(error.code).to.equal(DidErrorCode.InternalError); + expect(error.message).to.include('Failed to put Pkarr record'); + } + }); + it('throws an error if a verification method algorithm is not supported', async () => { try { await DidDht.create({ diff --git a/packages/dids/tests/methods/did-web.spec.ts b/packages/dids/tests/methods/did-web.spec.ts index 621191652..24f1681f2 100644 --- a/packages/dids/tests/methods/did-web.spec.ts +++ b/packages/dids/tests/methods/did-web.spec.ts @@ -37,7 +37,7 @@ describe('DidWeb', () => { }); }); - describe('Web5TestVectorsDidJwk', () => { + describe('Web5TestVectorsDidWeb', () => { let fetchStub: sinon.SinonStub; beforeEach(() => {