diff --git a/speakeasy/.eslintrc.yml b/speakeasy/.eslintrc.yml
new file mode 100755
index 0000000..565e624
--- /dev/null
+++ b/speakeasy/.eslintrc.yml
@@ -0,0 +1,17 @@
+env:
+ browser: true
+ es2021: true
+ node: true
+extends:
+ - eslint:recommended
+ - plugin:@typescript-eslint/recommended
+overrides: []
+parser: "@typescript-eslint/parser"
+parserOptions:
+ ecmaVersion: latest
+ sourceType: module
+plugins:
+ - "@typescript-eslint"
+rules:
+ "@typescript-eslint/no-explicit-any": "off"
+ "no-prototype-builtins": "off"
diff --git a/speakeasy/.gitattributes b/speakeasy/.gitattributes
new file mode 100755
index 0000000..113eead
--- /dev/null
+++ b/speakeasy/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.ts linguist-generated=false
\ No newline at end of file
diff --git a/speakeasy/.gitignore b/speakeasy/.gitignore
new file mode 100755
index 0000000..1eae0cf
--- /dev/null
+++ b/speakeasy/.gitignore
@@ -0,0 +1,2 @@
+dist/
+node_modules/
diff --git a/speakeasy/README.md b/speakeasy/README.md
new file mode 100755
index 0000000..76e8a56
--- /dev/null
+++ b/speakeasy/README.md
@@ -0,0 +1,138 @@
+# openapi
+
+
+
+
+
+
+
+
+# SDK Installation
+
+## NPM
+
+```bash
+npm add openapi
+```
+
+## Yarn
+
+```bash
+yarn add openapi
+```
+
+
+## SDK Example Usage
+
+
+
+```typescript
+import { SDK } from "openapi";
+
+(async () => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.getApis({
+ metadata: {
+ South: ["Southwest"],
+ },
+ op: {
+ and: false,
+ },
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+
+```
+
+
+
+# Available Resources and Operations
+
+## [SDK](docs/sdks/sdk/README.md)
+
+* [validateApiKey](docs/sdks/sdk/README.md#validateapikey) - Validate the current api key.
+
+## [apiEndpoints](docs/sdks/apiendpoints/README.md)
+
+* [deleteApiEndpoint](docs/sdks/apiendpoints/README.md#deleteapiendpoint) - Delete an ApiEndpoint.
+* [findApiEndpoint](docs/sdks/apiendpoints/README.md#findapiendpoint) - Find an ApiEndpoint via its displayName.
+* [generateOpenApiSpecForApiEndpoint](docs/sdks/apiendpoints/README.md#generateopenapispecforapiendpoint) - Generate an OpenAPI specification for a particular ApiEndpoint.
+* [generatePostmanCollectionForApiEndpoint](docs/sdks/apiendpoints/README.md#generatepostmancollectionforapiendpoint) - Generate a Postman collection for a particular ApiEndpoint.
+* [getAllApiEndpoints](docs/sdks/apiendpoints/README.md#getallapiendpoints) - Get all Api endpoints for a particular apiID.
+* [getAllForVersionApiEndpoints](docs/sdks/apiendpoints/README.md#getallforversionapiendpoints) - Get all ApiEndpoints for a particular apiID and versionID.
+* [getApiEndpoint](docs/sdks/apiendpoints/README.md#getapiendpoint) - Get an ApiEndpoint.
+* [upsertApiEndpoint](docs/sdks/apiendpoints/README.md#upsertapiendpoint) - Upsert an ApiEndpoint.
+
+## [apis](docs/sdks/apis/README.md)
+
+* [deleteApi](docs/sdks/apis/README.md#deleteapi) - Delete an Api.
+* [generateOpenApiSpec](docs/sdks/apis/README.md#generateopenapispec) - Generate an OpenAPI specification for a particular Api.
+* [generatePostmanCollection](docs/sdks/apis/README.md#generatepostmancollection) - Generate a Postman collection for a particular Api.
+* [getAllApiVersions](docs/sdks/apis/README.md#getallapiversions) - Get all Api versions for a particular ApiEndpoint.
+* [getApis](docs/sdks/apis/README.md#getapis) - Get a list of Apis for a given workspace
+* [upsertApi](docs/sdks/apis/README.md#upsertapi) - Upsert an Api
+
+## [embeds](docs/sdks/embeds/README.md)
+
+* [getEmbedAccessToken](docs/sdks/embeds/README.md#getembedaccesstoken) - Get an embed access token for the current workspace.
+* [getValidEmbedAccessTokens](docs/sdks/embeds/README.md#getvalidembedaccesstokens) - Get all valid embed access tokens for the current workspace.
+* [revokeEmbedAccessToken](docs/sdks/embeds/README.md#revokeembedaccesstoken) - Revoke an embed access EmbedToken.
+
+## [metadata](docs/sdks/metadata/README.md)
+
+* [deleteVersionMetadata](docs/sdks/metadata/README.md#deleteversionmetadata) - Delete metadata for a particular apiID and versionID.
+* [getVersionMetadata](docs/sdks/metadata/README.md#getversionmetadata) - Get all metadata for a particular apiID and versionID.
+* [insertVersionMetadata](docs/sdks/metadata/README.md#insertversionmetadata) - Insert metadata for a particular apiID and versionID.
+
+## [plugins](docs/sdks/plugins/README.md)
+
+* [getPlugins](docs/sdks/plugins/README.md#getplugins) - Get all plugins for the current workspace.
+* [runPlugin](docs/sdks/plugins/README.md#runplugin) - Run a plugin
+* [upsertPlugin](docs/sdks/plugins/README.md#upsertplugin) - Upsert a plugin
+
+## [requests](docs/sdks/requests/README.md)
+
+* [generateRequestPostmanCollection](docs/sdks/requests/README.md#generaterequestpostmancollection) - Generate a Postman collection for a particular request.
+* [getRequestFromEventLog](docs/sdks/requests/README.md#getrequestfromeventlog) - Get information about a particular request.
+* [queryEventLog](docs/sdks/requests/README.md#queryeventlog) - Query the event log to retrieve a list of requests.
+
+## [schemas](docs/sdks/schemas/README.md)
+
+* [deleteSchema](docs/sdks/schemas/README.md#deleteschema) - Delete a particular schema revision for an Api.
+* [downloadSchema](docs/sdks/schemas/README.md#downloadschema) - Download the latest schema for a particular apiID.
+* [downloadSchemaRevision](docs/sdks/schemas/README.md#downloadschemarevision) - Download a particular schema revision for an Api.
+* [getSchema](docs/sdks/schemas/README.md#getschema) - Get information about the latest schema.
+* [getSchemaDiff](docs/sdks/schemas/README.md#getschemadiff) - Get a diff of two schema revisions for an Api.
+* [getSchemaRevision](docs/sdks/schemas/README.md#getschemarevision) - Get information about a particular schema revision for an Api.
+* [getSchemas](docs/sdks/schemas/README.md#getschemas) - Get information about all schemas associated with a particular apiID.
+* [registerSchema](docs/sdks/schemas/README.md#registerschema) - Register a schema.
+
+
+
+
+
+
+
+
+
+
+# Development
+
+## Maturity
+
+This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage
+to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally
+looking for the latest version.
+
+## Contributions
+
+While we value open-source contributions to this SDK, this library is generated programmatically.
+Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release!
+
+### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
diff --git a/speakeasy/RELEASES.md b/speakeasy/RELEASES.md
new file mode 100644
index 0000000..9d9a6f3
--- /dev/null
+++ b/speakeasy/RELEASES.md
@@ -0,0 +1,11 @@
+
+
+## 2023-10-18 08:22:40
+### Changes
+Based on:
+- OpenAPI Doc 0.3.0 https://docs.speakeasyapi.dev/openapi.yaml
+- Speakeasy CLI 1.101.0 (2.161.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [typescript v0.1.0] speakeasy
+### Releases
+- [NPM v0.1.0] https://www.npmjs.com/package/openapi/v/0.1.0 - speakeasy
\ No newline at end of file
diff --git a/speakeasy/USAGE.md b/speakeasy/USAGE.md
new file mode 100755
index 0000000..fc7e82f
--- /dev/null
+++ b/speakeasy/USAGE.md
@@ -0,0 +1,27 @@
+
+
+
+```typescript
+import { SDK } from "openapi";
+
+(async () => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.getApis({
+ metadata: {
+ South: ["Southwest"],
+ },
+ op: {
+ and: false,
+ },
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+
+```
+
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteapiendpointrequest.md b/speakeasy/docs/models/operations/deleteapiendpointrequest.md
new file mode 100755
index 0000000..1aab85e
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteapiendpointrequest.md
@@ -0,0 +1,10 @@
+# DeleteApiEndpointRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to delete. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteapiendpointresponse.md b/speakeasy/docs/models/operations/deleteapiendpointresponse.md
new file mode 100755
index 0000000..510836e
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteapiendpointresponse.md
@@ -0,0 +1,11 @@
+# DeleteApiEndpointResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteapirequest.md b/speakeasy/docs/models/operations/deleteapirequest.md
new file mode 100755
index 0000000..5556d24
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteapirequest.md
@@ -0,0 +1,9 @@
+# DeleteApiRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to delete. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteapiresponse.md b/speakeasy/docs/models/operations/deleteapiresponse.md
new file mode 100755
index 0000000..5347b8f
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteapiresponse.md
@@ -0,0 +1,11 @@
+# DeleteApiResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteschemarequest.md b/speakeasy/docs/models/operations/deleteschemarequest.md
new file mode 100755
index 0000000..3c928c6
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteschemarequest.md
@@ -0,0 +1,10 @@
+# DeleteSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to delete schemas for. |
+| `revisionID` | *string* | :heavy_check_mark: | The revision ID of the schema to delete. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteschemaresponse.md b/speakeasy/docs/models/operations/deleteschemaresponse.md
new file mode 100755
index 0000000..785e598
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteschemaresponse.md
@@ -0,0 +1,11 @@
+# DeleteSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteversionmetadatarequest.md b/speakeasy/docs/models/operations/deleteversionmetadatarequest.md
new file mode 100755
index 0000000..4821fc5
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteversionmetadatarequest.md
@@ -0,0 +1,11 @@
+# DeleteVersionMetadataRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to delete metadata for. |
+| `metaKey` | *string* | :heavy_check_mark: | The key of the metadata to delete. |
+| `metaValue` | *string* | :heavy_check_mark: | The value of the metadata to delete. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/deleteversionmetadataresponse.md b/speakeasy/docs/models/operations/deleteversionmetadataresponse.md
new file mode 100755
index 0000000..fec8e5c
--- /dev/null
+++ b/speakeasy/docs/models/operations/deleteversionmetadataresponse.md
@@ -0,0 +1,11 @@
+# DeleteVersionMetadataResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/downloadschemarequest.md b/speakeasy/docs/models/operations/downloadschemarequest.md
new file mode 100755
index 0000000..9151719
--- /dev/null
+++ b/speakeasy/docs/models/operations/downloadschemarequest.md
@@ -0,0 +1,9 @@
+# DownloadSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to download the schema for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/downloadschemaresponse.md b/speakeasy/docs/models/operations/downloadschemaresponse.md
new file mode 100755
index 0000000..d6a084f
--- /dev/null
+++ b/speakeasy/docs/models/operations/downloadschemaresponse.md
@@ -0,0 +1,12 @@
+# DownloadSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `schema` | *Uint8Array* | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/downloadschemarevisionrequest.md b/speakeasy/docs/models/operations/downloadschemarevisionrequest.md
new file mode 100755
index 0000000..1ace8bb
--- /dev/null
+++ b/speakeasy/docs/models/operations/downloadschemarevisionrequest.md
@@ -0,0 +1,10 @@
+# DownloadSchemaRevisionRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. |
+| `revisionID` | *string* | :heavy_check_mark: | The revision ID of the schema to retrieve. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/downloadschemarevisionresponse.md b/speakeasy/docs/models/operations/downloadschemarevisionresponse.md
new file mode 100755
index 0000000..dbe5888
--- /dev/null
+++ b/speakeasy/docs/models/operations/downloadschemarevisionresponse.md
@@ -0,0 +1,12 @@
+# DownloadSchemaRevisionResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `schema` | *Uint8Array* | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/findapiendpointrequest.md b/speakeasy/docs/models/operations/findapiendpointrequest.md
new file mode 100755
index 0000000..38ca90c
--- /dev/null
+++ b/speakeasy/docs/models/operations/findapiendpointrequest.md
@@ -0,0 +1,10 @@
+# FindApiEndpointRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. |
+| `displayName` | *string* | :heavy_check_mark: | The displayName of the ApiEndpoint to find (set by operationId from OpenAPI schema). |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/findapiendpointresponse.md b/speakeasy/docs/models/operations/findapiendpointresponse.md
new file mode 100755
index 0000000..30448d6
--- /dev/null
+++ b/speakeasy/docs/models/operations/findapiendpointresponse.md
@@ -0,0 +1,12 @@
+# FindApiEndpointResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `apiEndpoint` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md) | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generateopenapispecforapiendpointrequest.md b/speakeasy/docs/models/operations/generateopenapispecforapiendpointrequest.md
new file mode 100755
index 0000000..b93ca88
--- /dev/null
+++ b/speakeasy/docs/models/operations/generateopenapispecforapiendpointrequest.md
@@ -0,0 +1,10 @@
+# GenerateOpenApiSpecForApiEndpointRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to generate an OpenAPI specification for. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate an OpenAPI specification for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate an OpenAPI specification for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generateopenapispecforapiendpointresponse.md b/speakeasy/docs/models/operations/generateopenapispecforapiendpointresponse.md
new file mode 100755
index 0000000..2a8ab95
--- /dev/null
+++ b/speakeasy/docs/models/operations/generateopenapispecforapiendpointresponse.md
@@ -0,0 +1,12 @@
+# GenerateOpenApiSpecForApiEndpointResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `generateOpenApiSpecDiff` | [shared.GenerateOpenApiSpecDiff](../../models/shared/generateopenapispecdiff.md) | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generateopenapispecrequest.md b/speakeasy/docs/models/operations/generateopenapispecrequest.md
new file mode 100755
index 0000000..a5c7083
--- /dev/null
+++ b/speakeasy/docs/models/operations/generateopenapispecrequest.md
@@ -0,0 +1,9 @@
+# GenerateOpenApiSpecRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate an OpenAPI specification for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate an OpenAPI specification for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generateopenapispecresponse.md b/speakeasy/docs/models/operations/generateopenapispecresponse.md
new file mode 100755
index 0000000..cd4de3b
--- /dev/null
+++ b/speakeasy/docs/models/operations/generateopenapispecresponse.md
@@ -0,0 +1,12 @@
+# GenerateOpenApiSpecResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `generateOpenApiSpecDiff` | [shared.GenerateOpenApiSpecDiff](../../models/shared/generateopenapispecdiff.md) | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointrequest.md b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointrequest.md
new file mode 100755
index 0000000..6740ce7
--- /dev/null
+++ b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointrequest.md
@@ -0,0 +1,10 @@
+# GeneratePostmanCollectionForApiEndpointRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to generate a Postman collection for. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate a Postman collection for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate a Postman collection for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointresponse.md b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointresponse.md
new file mode 100755
index 0000000..ac11c86
--- /dev/null
+++ b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointresponse.md
@@ -0,0 +1,12 @@
+# GeneratePostmanCollectionForApiEndpointResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `postmanCollection` | *Uint8Array* | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generatepostmancollectionrequest.md b/speakeasy/docs/models/operations/generatepostmancollectionrequest.md
new file mode 100755
index 0000000..6b158e6
--- /dev/null
+++ b/speakeasy/docs/models/operations/generatepostmancollectionrequest.md
@@ -0,0 +1,9 @@
+# GeneratePostmanCollectionRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate a Postman collection for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate a Postman collection for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generatepostmancollectionresponse.md b/speakeasy/docs/models/operations/generatepostmancollectionresponse.md
new file mode 100755
index 0000000..038dbf3
--- /dev/null
+++ b/speakeasy/docs/models/operations/generatepostmancollectionresponse.md
@@ -0,0 +1,12 @@
+# GeneratePostmanCollectionResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `postmanCollection` | *Uint8Array* | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generaterequestpostmancollectionrequest.md b/speakeasy/docs/models/operations/generaterequestpostmancollectionrequest.md
new file mode 100755
index 0000000..5b0eecc
--- /dev/null
+++ b/speakeasy/docs/models/operations/generaterequestpostmancollectionrequest.md
@@ -0,0 +1,8 @@
+# GenerateRequestPostmanCollectionRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| `requestID` | *string* | :heavy_check_mark: | The ID of the request to retrieve. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/generaterequestpostmancollectionresponse.md b/speakeasy/docs/models/operations/generaterequestpostmancollectionresponse.md
new file mode 100755
index 0000000..c3e879e
--- /dev/null
+++ b/speakeasy/docs/models/operations/generaterequestpostmancollectionresponse.md
@@ -0,0 +1,12 @@
+# GenerateRequestPostmanCollectionResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `postmanCollection` | *Uint8Array* | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallapiendpointsrequest.md b/speakeasy/docs/models/operations/getallapiendpointsrequest.md
new file mode 100755
index 0000000..68d6193
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallapiendpointsrequest.md
@@ -0,0 +1,8 @@
+# GetAllApiEndpointsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve ApiEndpoints for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallapiendpointsresponse.md b/speakeasy/docs/models/operations/getallapiendpointsresponse.md
new file mode 100755
index 0000000..39fea2b
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallapiendpointsresponse.md
@@ -0,0 +1,12 @@
+# GetAllApiEndpointsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `apiEndpoints` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md)[] | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallapiversionsop.md b/speakeasy/docs/models/operations/getallapiversionsop.md
new file mode 100755
index 0000000..6649bfa
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallapiversionsop.md
@@ -0,0 +1,10 @@
+# GetAllApiVersionsOp
+
+Configuration for filter operations
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `and` | *boolean* | :heavy_check_mark: | Whether to AND or OR the filters |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallapiversionsrequest.md b/speakeasy/docs/models/operations/getallapiversionsrequest.md
new file mode 100755
index 0000000..f94c256
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallapiversionsrequest.md
@@ -0,0 +1,10 @@
+# GetAllApiVersionsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve. |
+| `metadata` | Record | :heavy_minus_sign: | Metadata to filter Apis on |
+| `op` | [GetAllApiVersionsOp](../../models/operations/getallapiversionsop.md) | :heavy_minus_sign: | Configuration for filter operations |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallapiversionsresponse.md b/speakeasy/docs/models/operations/getallapiversionsresponse.md
new file mode 100755
index 0000000..7c17be3
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallapiversionsresponse.md
@@ -0,0 +1,12 @@
+# GetAllApiVersionsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `apis` | [shared.Api](../../models/shared/api.md)[] | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallforversionapiendpointsrequest.md b/speakeasy/docs/models/operations/getallforversionapiendpointsrequest.md
new file mode 100755
index 0000000..aa0763a
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallforversionapiendpointsrequest.md
@@ -0,0 +1,9 @@
+# GetAllForVersionApiEndpointsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve ApiEndpoints for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to retrieve ApiEndpoints for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getallforversionapiendpointsresponse.md b/speakeasy/docs/models/operations/getallforversionapiendpointsresponse.md
new file mode 100755
index 0000000..87d0be9
--- /dev/null
+++ b/speakeasy/docs/models/operations/getallforversionapiendpointsresponse.md
@@ -0,0 +1,12 @@
+# GetAllForVersionApiEndpointsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `apiEndpoints` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md)[] | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getapiendpointrequest.md b/speakeasy/docs/models/operations/getapiendpointrequest.md
new file mode 100755
index 0000000..1768fd4
--- /dev/null
+++ b/speakeasy/docs/models/operations/getapiendpointrequest.md
@@ -0,0 +1,10 @@
+# GetApiEndpointRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to retrieve. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getapiendpointresponse.md b/speakeasy/docs/models/operations/getapiendpointresponse.md
new file mode 100755
index 0000000..2187ba8
--- /dev/null
+++ b/speakeasy/docs/models/operations/getapiendpointresponse.md
@@ -0,0 +1,12 @@
+# GetApiEndpointResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `apiEndpoint` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md) | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getapisop.md b/speakeasy/docs/models/operations/getapisop.md
new file mode 100755
index 0000000..a90a1b3
--- /dev/null
+++ b/speakeasy/docs/models/operations/getapisop.md
@@ -0,0 +1,10 @@
+# GetApisOp
+
+Configuration for filter operations
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `and` | *boolean* | :heavy_check_mark: | Whether to AND or OR the filters |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getapisrequest.md b/speakeasy/docs/models/operations/getapisrequest.md
new file mode 100755
index 0000000..e53766b
--- /dev/null
+++ b/speakeasy/docs/models/operations/getapisrequest.md
@@ -0,0 +1,9 @@
+# GetApisRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `metadata` | Record | :heavy_minus_sign: | Metadata to filter Apis on |
+| `op` | [GetApisOp](../../models/operations/getapisop.md) | :heavy_minus_sign: | Configuration for filter operations |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getapisresponse.md b/speakeasy/docs/models/operations/getapisresponse.md
new file mode 100755
index 0000000..e0204b3
--- /dev/null
+++ b/speakeasy/docs/models/operations/getapisresponse.md
@@ -0,0 +1,12 @@
+# GetApisResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `apis` | [shared.Api](../../models/shared/api.md)[] | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getembedaccesstokenrequest.md b/speakeasy/docs/models/operations/getembedaccesstokenrequest.md
new file mode 100755
index 0000000..bf62ce0
--- /dev/null
+++ b/speakeasy/docs/models/operations/getembedaccesstokenrequest.md
@@ -0,0 +1,10 @@
+# GetEmbedAccessTokenRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `description` | *string* | :heavy_minus_sign: | The description of the embed access token. |
+| `duration` | *number* | :heavy_minus_sign: | The duration (in minutes) of the embed access token. |
+| `filters` | [shared.Filters](../../models/shared/filters.md) | :heavy_minus_sign: | The filter to apply to the query. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getembedaccesstokenresponse.md b/speakeasy/docs/models/operations/getembedaccesstokenresponse.md
new file mode 100755
index 0000000..dbae08f
--- /dev/null
+++ b/speakeasy/docs/models/operations/getembedaccesstokenresponse.md
@@ -0,0 +1,12 @@
+# GetEmbedAccessTokenResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `embedAccessTokenResponse` | [shared.EmbedAccessTokenResponse](../../models/shared/embedaccesstokenresponse.md) | :heavy_minus_sign: | OK |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getpluginsresponse.md b/speakeasy/docs/models/operations/getpluginsresponse.md
new file mode 100755
index 0000000..af3bac5
--- /dev/null
+++ b/speakeasy/docs/models/operations/getpluginsresponse.md
@@ -0,0 +1,12 @@
+# GetPluginsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `plugins` | [shared.Plugin](../../models/shared/plugin.md)[] | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getrequestfromeventlogrequest.md b/speakeasy/docs/models/operations/getrequestfromeventlogrequest.md
new file mode 100755
index 0000000..272d0cc
--- /dev/null
+++ b/speakeasy/docs/models/operations/getrequestfromeventlogrequest.md
@@ -0,0 +1,8 @@
+# GetRequestFromEventLogRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| `requestID` | *string* | :heavy_check_mark: | The ID of the request to retrieve. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getrequestfromeventlogresponse.md b/speakeasy/docs/models/operations/getrequestfromeventlogresponse.md
new file mode 100755
index 0000000..9c032e5
--- /dev/null
+++ b/speakeasy/docs/models/operations/getrequestfromeventlogresponse.md
@@ -0,0 +1,12 @@
+# GetRequestFromEventLogResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `unboundedRequest` | [shared.UnboundedRequest](../../models/shared/unboundedrequest.md) | :heavy_minus_sign: | OK |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemadiffrequest.md b/speakeasy/docs/models/operations/getschemadiffrequest.md
new file mode 100755
index 0000000..0d8c0da
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemadiffrequest.md
@@ -0,0 +1,11 @@
+# GetSchemaDiffRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. |
+| `baseRevisionID` | *string* | :heavy_check_mark: | The base revision ID of the schema to retrieve. |
+| `targetRevisionID` | *string* | :heavy_check_mark: | The target revision ID of the schema to retrieve. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemadiffresponse.md b/speakeasy/docs/models/operations/getschemadiffresponse.md
new file mode 100755
index 0000000..6f3c8f6
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemadiffresponse.md
@@ -0,0 +1,12 @@
+# GetSchemaDiffResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `schemaDiff` | [shared.SchemaDiff](../../models/shared/schemadiff.md) | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemarequest.md b/speakeasy/docs/models/operations/getschemarequest.md
new file mode 100755
index 0000000..c33a815
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemarequest.md
@@ -0,0 +1,9 @@
+# GetSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to get the schema for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemaresponse.md b/speakeasy/docs/models/operations/getschemaresponse.md
new file mode 100755
index 0000000..9f73e36
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemaresponse.md
@@ -0,0 +1,12 @@
+# GetSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `schema` | [shared.Schema](../../models/shared/schema.md) | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemarevisionrequest.md b/speakeasy/docs/models/operations/getschemarevisionrequest.md
new file mode 100755
index 0000000..d3599b5
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemarevisionrequest.md
@@ -0,0 +1,10 @@
+# GetSchemaRevisionRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. |
+| `revisionID` | *string* | :heavy_check_mark: | The revision ID of the schema to retrieve. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemarevisionresponse.md b/speakeasy/docs/models/operations/getschemarevisionresponse.md
new file mode 100755
index 0000000..8122fda
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemarevisionresponse.md
@@ -0,0 +1,12 @@
+# GetSchemaRevisionResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `schema` | [shared.Schema](../../models/shared/schema.md) | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemasrequest.md b/speakeasy/docs/models/operations/getschemasrequest.md
new file mode 100755
index 0000000..ded921c
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemasrequest.md
@@ -0,0 +1,9 @@
+# GetSchemasRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getschemasresponse.md b/speakeasy/docs/models/operations/getschemasresponse.md
new file mode 100755
index 0000000..ad2aacf
--- /dev/null
+++ b/speakeasy/docs/models/operations/getschemasresponse.md
@@ -0,0 +1,12 @@
+# GetSchemasResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `schemata` | [shared.Schema](../../models/shared/schema.md)[] | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getvalidembedaccesstokensresponse.md b/speakeasy/docs/models/operations/getvalidembedaccesstokensresponse.md
new file mode 100755
index 0000000..4bc8851
--- /dev/null
+++ b/speakeasy/docs/models/operations/getvalidembedaccesstokensresponse.md
@@ -0,0 +1,12 @@
+# GetValidEmbedAccessTokensResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `embedTokens` | [shared.EmbedToken](../../models/shared/embedtoken.md)[] | :heavy_minus_sign: | OK |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getversionmetadatarequest.md b/speakeasy/docs/models/operations/getversionmetadatarequest.md
new file mode 100755
index 0000000..d61d54e
--- /dev/null
+++ b/speakeasy/docs/models/operations/getversionmetadatarequest.md
@@ -0,0 +1,9 @@
+# GetVersionMetadataRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve metadata for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to retrieve metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/getversionmetadataresponse.md b/speakeasy/docs/models/operations/getversionmetadataresponse.md
new file mode 100755
index 0000000..42bc973
--- /dev/null
+++ b/speakeasy/docs/models/operations/getversionmetadataresponse.md
@@ -0,0 +1,12 @@
+# GetVersionMetadataResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `versionMetadata` | [shared.VersionMetadata](../../models/shared/versionmetadata.md)[] | :heavy_minus_sign: | OK |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/insertversionmetadatarequest.md b/speakeasy/docs/models/operations/insertversionmetadatarequest.md
new file mode 100755
index 0000000..02e8a87
--- /dev/null
+++ b/speakeasy/docs/models/operations/insertversionmetadatarequest.md
@@ -0,0 +1,10 @@
+# InsertVersionMetadataRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `versionMetadataInput` | [shared.VersionMetadataInput](../../models/shared/versionmetadatainput.md) | :heavy_check_mark: | A JSON representation of the metadata to insert. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to insert metadata for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to insert metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/insertversionmetadataresponse.md b/speakeasy/docs/models/operations/insertversionmetadataresponse.md
new file mode 100755
index 0000000..7e1fa16
--- /dev/null
+++ b/speakeasy/docs/models/operations/insertversionmetadataresponse.md
@@ -0,0 +1,12 @@
+# InsertVersionMetadataResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `versionMetadata` | [shared.VersionMetadata](../../models/shared/versionmetadata.md) | :heavy_minus_sign: | OK |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/queryeventlogrequest.md b/speakeasy/docs/models/operations/queryeventlogrequest.md
new file mode 100755
index 0000000..2bf8295
--- /dev/null
+++ b/speakeasy/docs/models/operations/queryeventlogrequest.md
@@ -0,0 +1,8 @@
+# QueryEventLogRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `filters` | [shared.Filters](../../models/shared/filters.md) | :heavy_minus_sign: | The filter to apply to the query. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/queryeventlogresponse.md b/speakeasy/docs/models/operations/queryeventlogresponse.md
new file mode 100755
index 0000000..c2b22a5
--- /dev/null
+++ b/speakeasy/docs/models/operations/queryeventlogresponse.md
@@ -0,0 +1,12 @@
+# QueryEventLogResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `boundedRequests` | [shared.BoundedRequest](../../models/shared/boundedrequest.md)[] | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/registerschemarequest.md b/speakeasy/docs/models/operations/registerschemarequest.md
new file mode 100755
index 0000000..bb89263
--- /dev/null
+++ b/speakeasy/docs/models/operations/registerschemarequest.md
@@ -0,0 +1,10 @@
+# RegisterSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
+| `requestBody` | [RegisterSchemaRequestBody](../../models/operations/registerschemarequestbody.md) | :heavy_check_mark: | The schema file to upload provided as a multipart/form-data file segment. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to get the schema for. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/registerschemarequestbody.md b/speakeasy/docs/models/operations/registerschemarequestbody.md
new file mode 100755
index 0000000..6bac149
--- /dev/null
+++ b/speakeasy/docs/models/operations/registerschemarequestbody.md
@@ -0,0 +1,10 @@
+# RegisterSchemaRequestBody
+
+The schema file to upload provided as a multipart/form-data file segment.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
+| `file` | [RegisterSchemaRequestBodyFile](../../models/operations/registerschemarequestbodyfile.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/registerschemarequestbodyfile.md b/speakeasy/docs/models/operations/registerschemarequestbodyfile.md
new file mode 100755
index 0000000..cf78080
--- /dev/null
+++ b/speakeasy/docs/models/operations/registerschemarequestbodyfile.md
@@ -0,0 +1,9 @@
+# RegisterSchemaRequestBodyFile
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `content` | *Uint8Array* | :heavy_check_mark: | N/A |
+| `file` | *string* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/registerschemaresponse.md b/speakeasy/docs/models/operations/registerschemaresponse.md
new file mode 100755
index 0000000..2e65b8d
--- /dev/null
+++ b/speakeasy/docs/models/operations/registerschemaresponse.md
@@ -0,0 +1,11 @@
+# RegisterSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/revokeembedaccesstokenrequest.md b/speakeasy/docs/models/operations/revokeembedaccesstokenrequest.md
new file mode 100755
index 0000000..8a6c1f7
--- /dev/null
+++ b/speakeasy/docs/models/operations/revokeembedaccesstokenrequest.md
@@ -0,0 +1,8 @@
+# RevokeEmbedAccessTokenRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `tokenID` | *string* | :heavy_check_mark: | The ID of the EmbedToken to revoke. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/revokeembedaccesstokenresponse.md b/speakeasy/docs/models/operations/revokeembedaccesstokenresponse.md
new file mode 100755
index 0000000..85f4ef5
--- /dev/null
+++ b/speakeasy/docs/models/operations/revokeembedaccesstokenresponse.md
@@ -0,0 +1,11 @@
+# RevokeEmbedAccessTokenResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/runpluginrequest.md b/speakeasy/docs/models/operations/runpluginrequest.md
new file mode 100755
index 0000000..fc49da4
--- /dev/null
+++ b/speakeasy/docs/models/operations/runpluginrequest.md
@@ -0,0 +1,9 @@
+# RunPluginRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `filters` | [shared.Filters](../../models/shared/filters.md) | :heavy_minus_sign: | The filter to apply to the query. |
+| `pluginID` | *string* | :heavy_check_mark: | The ID of the plugin to run. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/runpluginresponse.md b/speakeasy/docs/models/operations/runpluginresponse.md
new file mode 100755
index 0000000..9093d59
--- /dev/null
+++ b/speakeasy/docs/models/operations/runpluginresponse.md
@@ -0,0 +1,12 @@
+# RunPluginResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `boundedRequests` | [shared.BoundedRequest](../../models/shared/boundedrequest.md)[] | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/upsertapiendpointrequest.md b/speakeasy/docs/models/operations/upsertapiendpointrequest.md
new file mode 100755
index 0000000..56265b9
--- /dev/null
+++ b/speakeasy/docs/models/operations/upsertapiendpointrequest.md
@@ -0,0 +1,11 @@
+# UpsertApiEndpointRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `apiEndpointInput` | [shared.ApiEndpointInput](../../models/shared/apiendpointinput.md) | :heavy_check_mark: | A JSON representation of the ApiEndpoint to upsert. |
+| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to upsert. |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. |
+| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/upsertapiendpointresponse.md b/speakeasy/docs/models/operations/upsertapiendpointresponse.md
new file mode 100755
index 0000000..559dab4
--- /dev/null
+++ b/speakeasy/docs/models/operations/upsertapiendpointresponse.md
@@ -0,0 +1,12 @@
+# UpsertApiEndpointResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `apiEndpoint` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md) | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/upsertapirequest.md b/speakeasy/docs/models/operations/upsertapirequest.md
new file mode 100755
index 0000000..dfcc7f4
--- /dev/null
+++ b/speakeasy/docs/models/operations/upsertapirequest.md
@@ -0,0 +1,9 @@
+# UpsertApiRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `apiInput` | [shared.ApiInput](../../models/shared/apiinput.md) | :heavy_check_mark: | A JSON representation of the Api to upsert |
+| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to upsert. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/upsertapiresponse.md b/speakeasy/docs/models/operations/upsertapiresponse.md
new file mode 100755
index 0000000..6c3fcb3
--- /dev/null
+++ b/speakeasy/docs/models/operations/upsertapiresponse.md
@@ -0,0 +1,12 @@
+# UpsertApiResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `api` | [shared.Api](../../models/shared/api.md) | :heavy_minus_sign: | OK |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/upsertpluginresponse.md b/speakeasy/docs/models/operations/upsertpluginresponse.md
new file mode 100755
index 0000000..f9efa5f
--- /dev/null
+++ b/speakeasy/docs/models/operations/upsertpluginresponse.md
@@ -0,0 +1,12 @@
+# UpsertPluginResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `plugin` | [shared.Plugin](../../models/shared/plugin.md) | :heavy_minus_sign: | OK |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/operations/validateapikeyresponse.md b/speakeasy/docs/models/operations/validateapikeyresponse.md
new file mode 100755
index 0000000..9b9efad
--- /dev/null
+++ b/speakeasy/docs/models/operations/validateapikeyresponse.md
@@ -0,0 +1,11 @@
+# ValidateApiKeyResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
+| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response |
+| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation |
+| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/api.md b/speakeasy/docs/models/shared/api.md
new file mode 100755
index 0000000..915561a
--- /dev/null
+++ b/speakeasy/docs/models/shared/api.md
@@ -0,0 +1,17 @@
+# Api
+
+An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `apiId` | *string* | :heavy_check_mark: | The ID of this Api. This is a human-readable name (subject to change). |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `description` | *string* | :heavy_check_mark: | A detailed description of the Api. |
+| `matched` | *boolean* | :heavy_minus_sign: | Determines if all the endpoints within the Api are found in the OpenAPI spec associated with the Api. |
+| `metaData` | Record | :heavy_minus_sign: | A set of values associated with a meta_data key. This field is only set on get requests. |
+| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Last update timestamp. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of this Api. This is semantic version identifier. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this Api belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/apiendpoint.md b/speakeasy/docs/models/shared/apiendpoint.md
new file mode 100755
index 0000000..8b53d75
--- /dev/null
+++ b/speakeasy/docs/models/shared/apiendpoint.md
@@ -0,0 +1,20 @@
+# ApiEndpoint
+
+An ApiEndpoint is a description of an Endpoint for an API.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `apiEndpointId` | *string* | :heavy_check_mark: | The ID of this ApiEndpoint. This is a hash of the method and path. |
+| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this ApiEndpoint belongs to. |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `description` | *string* | :heavy_check_mark: | A detailed description of the ApiEndpoint. |
+| `displayName` | *string* | :heavy_check_mark: | A human-readable name for the ApiEndpoint. |
+| `matched` | *boolean* | :heavy_minus_sign: | Determines if the endpoint was found in the OpenAPI spec associated with the parent Api. |
+| `method` | *string* | :heavy_check_mark: | HTTP verb. |
+| `path` | *string* | :heavy_check_mark: | Path that handles this Api. |
+| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Last update timestamp. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this ApiEndpoint belongs to. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this ApiEndpoint belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/apiendpointinput.md b/speakeasy/docs/models/shared/apiendpointinput.md
new file mode 100755
index 0000000..7846dbc
--- /dev/null
+++ b/speakeasy/docs/models/shared/apiendpointinput.md
@@ -0,0 +1,15 @@
+# ApiEndpointInput
+
+An ApiEndpoint is a description of an Endpoint for an API.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `apiEndpointId` | *string* | :heavy_check_mark: | The ID of this ApiEndpoint. This is a hash of the method and path. |
+| `description` | *string* | :heavy_check_mark: | A detailed description of the ApiEndpoint. |
+| `displayName` | *string* | :heavy_check_mark: | A human-readable name for the ApiEndpoint. |
+| `method` | *string* | :heavy_check_mark: | HTTP verb. |
+| `path` | *string* | :heavy_check_mark: | Path that handles this Api. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this ApiEndpoint belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/apiinput.md b/speakeasy/docs/models/shared/apiinput.md
new file mode 100755
index 0000000..2890930
--- /dev/null
+++ b/speakeasy/docs/models/shared/apiinput.md
@@ -0,0 +1,13 @@
+# ApiInput
+
+An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `apiId` | *string* | :heavy_check_mark: | The ID of this Api. This is a human-readable name (subject to change). |
+| `description` | *string* | :heavy_check_mark: | A detailed description of the Api. |
+| `metaData` | Record | :heavy_minus_sign: | A set of values associated with a meta_data key. This field is only set on get requests. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of this Api. This is semantic version identifier. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/boundedrequest.md b/speakeasy/docs/models/shared/boundedrequest.md
new file mode 100755
index 0000000..d0269d8
--- /dev/null
+++ b/speakeasy/docs/models/shared/boundedrequest.md
@@ -0,0 +1,23 @@
+# BoundedRequest
+
+A BoundedRequest is a request that has been logged by the Speakeasy without the contents of the request.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `apiEndpointId` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint this request was made to. |
+| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this request was made to. |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `customerId` | *string* | :heavy_check_mark: | The ID of the customer that made this request. |
+| `latency` | *number* | :heavy_check_mark: | The latency of the request. |
+| `metadata` | [RequestMetadata](../../models/shared/requestmetadata.md)[] | :heavy_minus_sign: | Metadata associated with this request |
+| `method` | *string* | :heavy_check_mark: | HTTP verb. |
+| `path` | *string* | :heavy_check_mark: | The path of the request. |
+| `requestFinishTime` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | The time the request finished. |
+| `requestId` | *string* | :heavy_check_mark: | The ID of this request. |
+| `requestStartTime` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | The time the request was made. |
+| `status` | *number* | :heavy_check_mark: | The status code of the request. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this request was made to. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this request was made to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/embedaccesstokenresponse.md b/speakeasy/docs/models/shared/embedaccesstokenresponse.md
new file mode 100755
index 0000000..bbb9bd5
--- /dev/null
+++ b/speakeasy/docs/models/shared/embedaccesstokenresponse.md
@@ -0,0 +1,10 @@
+# EmbedAccessTokenResponse
+
+An EmbedAccessTokenResponse contains a token that can be used to embed a Speakeasy dashboard.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `accessToken` | *string* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/embedtoken.md b/speakeasy/docs/models/shared/embedtoken.md
new file mode 100755
index 0000000..654671e
--- /dev/null
+++ b/speakeasy/docs/models/shared/embedtoken.md
@@ -0,0 +1,19 @@
+# EmbedToken
+
+A representation of an embed token granted for working with Speakeasy components.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `createdBy` | *string* | :heavy_check_mark: | The ID of the user that created this token. |
+| `description` | *string* | :heavy_check_mark: | A detailed description of the EmbedToken. |
+| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | The time this token expires. |
+| `filters` | *string* | :heavy_check_mark: | The filters applied to this token. |
+| `id` | *string* | :heavy_check_mark: | The ID of this EmbedToken. |
+| `lastUsed` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | The last time this token was used. |
+| `revokedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | The time this token was revoked. |
+| `revokedBy` | *string* | :heavy_minus_sign: | The ID of the user that revoked this token. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this token belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/errort.md b/speakeasy/docs/models/shared/errort.md
new file mode 100755
index 0000000..4a34a22
--- /dev/null
+++ b/speakeasy/docs/models/shared/errort.md
@@ -0,0 +1,11 @@
+# ErrorT
+
+The `Status` type defines a logical error model
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `message` | *string* | :heavy_check_mark: | A developer-facing error message. |
+| `statusCode` | *number* | :heavy_check_mark: | The HTTP status code |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/filter.md b/speakeasy/docs/models/shared/filter.md
new file mode 100755
index 0000000..7fbba85
--- /dev/null
+++ b/speakeasy/docs/models/shared/filter.md
@@ -0,0 +1,12 @@
+# Filter
+
+A filter is a key-value pair that can be used to filter a list of requests.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------- | --------------------------- | --------------------------- | --------------------------- |
+| `key` | *string* | :heavy_check_mark: | The key of the filter. |
+| `operator` | *string* | :heavy_check_mark: | The operator of the filter. |
+| `value` | *string* | :heavy_check_mark: | The value of the filter. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/filters.md b/speakeasy/docs/models/shared/filters.md
new file mode 100755
index 0000000..f73f696
--- /dev/null
+++ b/speakeasy/docs/models/shared/filters.md
@@ -0,0 +1,13 @@
+# Filters
+
+Filters are used to query requests.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
+| `filters` | [Filter](../../models/shared/filter.md)[] | :heavy_check_mark: | A list of filters to apply to the query. |
+| `limit` | *number* | :heavy_check_mark: | The maximum number of results to return. |
+| `offset` | *number* | :heavy_check_mark: | The offset to start the query from. |
+| `operator` | *string* | :heavy_check_mark: | The operator to use when combining filters. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/generateopenapispecdiff.md b/speakeasy/docs/models/shared/generateopenapispecdiff.md
new file mode 100755
index 0000000..60baeed
--- /dev/null
+++ b/speakeasy/docs/models/shared/generateopenapispecdiff.md
@@ -0,0 +1,9 @@
+# GenerateOpenApiSpecDiff
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `currentSchema` | *string* | :heavy_check_mark: | N/A |
+| `newSchema` | *string* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/plugin.md b/speakeasy/docs/models/shared/plugin.md
new file mode 100755
index 0000000..936fe5c
--- /dev/null
+++ b/speakeasy/docs/models/shared/plugin.md
@@ -0,0 +1,16 @@
+# Plugin
+
+A plugin is a short script that is run against ingested requests
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `code` | *string* | :heavy_check_mark: | N/A |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | N/A |
+| `evalHash` | *string* | :heavy_minus_sign: | N/A |
+| `pluginId` | *string* | :heavy_check_mark: | N/A |
+| `title` | *string* | :heavy_check_mark: | N/A |
+| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | N/A |
+| `workspaceId` | *string* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/requestmetadata.md b/speakeasy/docs/models/shared/requestmetadata.md
new file mode 100755
index 0000000..57fe5c1
--- /dev/null
+++ b/speakeasy/docs/models/shared/requestmetadata.md
@@ -0,0 +1,11 @@
+# RequestMetadata
+
+Key-Value pairs associated with a request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `key` | *string* | :heavy_minus_sign: | N/A |
+| `value` | *string* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/schema.md b/speakeasy/docs/models/shared/schema.md
new file mode 100755
index 0000000..8f93b09
--- /dev/null
+++ b/speakeasy/docs/models/shared/schema.md
@@ -0,0 +1,15 @@
+# Schema
+
+A Schema represents an API schema for a particular Api and Version.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this Schema belongs to. |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `description` | *string* | :heavy_check_mark: | A detailed description of the Schema. |
+| `revisionId` | *string* | :heavy_check_mark: | An ID referencing this particular revision of the Schema. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this Schema belongs to. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this Schema belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/schemadiff.md b/speakeasy/docs/models/shared/schemadiff.md
new file mode 100755
index 0000000..e9f0531
--- /dev/null
+++ b/speakeasy/docs/models/shared/schemadiff.md
@@ -0,0 +1,12 @@
+# SchemaDiff
+
+A SchemaDiff represents a diff of two Schemas.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `additions` | *string*[] | :heavy_check_mark: | Holds every addition change in the diff. |
+| `deletions` | *string*[] | :heavy_check_mark: | Holds every deletion change in the diff. |
+| `modifications` | Record | :heavy_check_mark: | Holds every modification change in the diff. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/schemadiffvaluechange.md b/speakeasy/docs/models/shared/schemadiffvaluechange.md
new file mode 100755
index 0000000..6d1ef6b
--- /dev/null
+++ b/speakeasy/docs/models/shared/schemadiffvaluechange.md
@@ -0,0 +1,9 @@
+# SchemaDiffValueChange
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
+| `from` | *string* | :heavy_check_mark: | Represents the previous value of the element. |
+| `to` | *string* | :heavy_check_mark: | Represents the current value of the element. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/security.md b/speakeasy/docs/models/shared/security.md
new file mode 100755
index 0000000..726a39d
--- /dev/null
+++ b/speakeasy/docs/models/shared/security.md
@@ -0,0 +1,8 @@
+# Security
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `apiKey` | *string* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/unboundedrequest.md b/speakeasy/docs/models/shared/unboundedrequest.md
new file mode 100755
index 0000000..cea0835
--- /dev/null
+++ b/speakeasy/docs/models/shared/unboundedrequest.md
@@ -0,0 +1,14 @@
+# UnboundedRequest
+
+An UnboundedRequest represents the HAR content capture by Speakeasy when logging a request.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `har` | *string* | :heavy_check_mark: | The HAR content of the request. |
+| `harSizeBytes` | *number* | :heavy_check_mark: | The size of the HAR content in bytes. |
+| `requestId` | *string* | :heavy_check_mark: | The ID of this request. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this request was made to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/versionmetadata.md b/speakeasy/docs/models/shared/versionmetadata.md
new file mode 100755
index 0000000..7348c88
--- /dev/null
+++ b/speakeasy/docs/models/shared/versionmetadata.md
@@ -0,0 +1,15 @@
+# VersionMetadata
+
+A set of keys and associated values, attached to a particular version of an Api.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this Metadata belongs to. |
+| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. |
+| `metaKey` | *string* | :heavy_check_mark: | The key for this metadata. |
+| `metaValue` | *string* | :heavy_check_mark: | One of the values for this metadata. |
+| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this Metadata belongs to. |
+| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this Metadata belongs to. |
\ No newline at end of file
diff --git a/speakeasy/docs/models/shared/versionmetadatainput.md b/speakeasy/docs/models/shared/versionmetadatainput.md
new file mode 100755
index 0000000..b556498
--- /dev/null
+++ b/speakeasy/docs/models/shared/versionmetadatainput.md
@@ -0,0 +1,11 @@
+# VersionMetadataInput
+
+A set of keys and associated values, attached to a particular version of an Api.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `metaKey` | *string* | :heavy_check_mark: | The key for this metadata. |
+| `metaValue` | *string* | :heavy_check_mark: | One of the values for this metadata. |
\ No newline at end of file
diff --git a/speakeasy/docs/sdks/apiendpoints/README.md b/speakeasy/docs/sdks/apiendpoints/README.md
new file mode 100755
index 0000000..afe436c
--- /dev/null
+++ b/speakeasy/docs/sdks/apiendpoints/README.md
@@ -0,0 +1,336 @@
+# ApiEndpoints
+(*apiEndpoints*)
+
+## Overview
+
+REST APIs for managing ApiEndpoint entities
+
+### Available Operations
+
+* [deleteApiEndpoint](#deleteapiendpoint) - Delete an ApiEndpoint.
+* [findApiEndpoint](#findapiendpoint) - Find an ApiEndpoint via its displayName.
+* [generateOpenApiSpecForApiEndpoint](#generateopenapispecforapiendpoint) - Generate an OpenAPI specification for a particular ApiEndpoint.
+* [generatePostmanCollectionForApiEndpoint](#generatepostmancollectionforapiendpoint) - Generate a Postman collection for a particular ApiEndpoint.
+* [getAllApiEndpoints](#getallapiendpoints) - Get all Api endpoints for a particular apiID.
+* [getAllForVersionApiEndpoints](#getallforversionapiendpoints) - Get all ApiEndpoints for a particular apiID and versionID.
+* [getApiEndpoint](#getapiendpoint) - Get an ApiEndpoint.
+* [upsertApiEndpoint](#upsertapiendpoint) - Upsert an ApiEndpoint.
+
+## deleteApiEndpoint
+
+Delete an ApiEndpoint. This will also delete all associated Request Logs (if using a Postgres datastore).
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.deleteApiEndpoint({
+ apiEndpointID: "blue",
+ apiID: "Gasoline",
+ versionID: "Southwest",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.DeleteApiEndpointRequest](../../models/operations/deleteapiendpointrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.DeleteApiEndpointResponse](../../models/operations/deleteapiendpointresponse.md)>**
+
+
+## findApiEndpoint
+
+Find an ApiEndpoint via its displayName (set by operationId from a registered OpenAPI schema).
+This is useful for finding the ID of an ApiEndpoint to use in the /v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID} endpoints.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.findApiEndpoint({
+ apiID: "Cotton",
+ displayName: "Chief",
+ versionID: "Wooden",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.FindApiEndpointRequest](../../models/operations/findapiendpointrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.FindApiEndpointResponse](../../models/operations/findapiendpointresponse.md)>**
+
+
+## generateOpenApiSpecForApiEndpoint
+
+This endpoint will generate a new operation in any registered OpenAPI document if the operation does not already exist in the document.
+Returns the original document and the newly generated document allowing a diff to be performed to see what has changed.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.generateOpenApiSpecForApiEndpoint({
+ apiEndpointID: "Mazda",
+ apiID: "web",
+ versionID: "explicabo",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GenerateOpenApiSpecForApiEndpointRequest](../../models/operations/generateopenapispecforapiendpointrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GenerateOpenApiSpecForApiEndpointResponse](../../models/operations/generateopenapispecforapiendpointresponse.md)>**
+
+
+## generatePostmanCollectionForApiEndpoint
+
+Generates a postman collection that allows the endpoint to be called from postman variables produced for any path/query/header parameters included in the OpenAPI document.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.generatePostmanCollectionForApiEndpoint({
+ apiEndpointID: "indigo",
+ apiID: "barring",
+ versionID: "Senior",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GeneratePostmanCollectionForApiEndpointRequest](../../models/operations/generatepostmancollectionforapiendpointrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GeneratePostmanCollectionForApiEndpointResponse](../../models/operations/generatepostmancollectionforapiendpointresponse.md)>**
+
+
+## getAllApiEndpoints
+
+Get all Api endpoints for a particular apiID.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.getAllApiEndpoints({
+ apiID: "unless",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetAllApiEndpointsRequest](../../models/operations/getallapiendpointsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetAllApiEndpointsResponse](../../models/operations/getallapiendpointsresponse.md)>**
+
+
+## getAllForVersionApiEndpoints
+
+Get all ApiEndpoints for a particular apiID and versionID.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.getAllForVersionApiEndpoints({
+ apiID: "now",
+ versionID: "Diesel",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetAllForVersionApiEndpointsRequest](../../models/operations/getallforversionapiendpointsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetAllForVersionApiEndpointsResponse](../../models/operations/getallforversionapiendpointsresponse.md)>**
+
+
+## getApiEndpoint
+
+Get an ApiEndpoint.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.getApiEndpoint({
+ apiEndpointID: "flog",
+ apiID: "synthesize",
+ versionID: "Barium",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.GetApiEndpointRequest](../../models/operations/getapiendpointrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetApiEndpointResponse](../../models/operations/getapiendpointresponse.md)>**
+
+
+## upsertApiEndpoint
+
+Upsert an ApiEndpoint. If the ApiEndpoint does not exist it will be created, otherwise it will be updated.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apiEndpoints.upsertApiEndpoint({
+ apiEndpointInput: {
+ apiEndpointId: "Facilitator",
+ description: "Cross-group bottom-line productivity",
+ displayName: "nor",
+ method: "Northwest",
+ path: "/private",
+ versionId: "what",
+ },
+ apiEndpointID: "Trans",
+ apiID: "Kia",
+ versionID: "Electronic",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.UpsertApiEndpointRequest](../../models/operations/upsertapiendpointrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.UpsertApiEndpointResponse](../../models/operations/upsertapiendpointresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/apis/README.md b/speakeasy/docs/sdks/apis/README.md
new file mode 100755
index 0000000..d55b792
--- /dev/null
+++ b/speakeasy/docs/sdks/apis/README.md
@@ -0,0 +1,269 @@
+# Apis
+(*apis*)
+
+## Overview
+
+REST APIs for managing Api entities
+
+### Available Operations
+
+* [deleteApi](#deleteapi) - Delete an Api.
+* [generateOpenApiSpec](#generateopenapispec) - Generate an OpenAPI specification for a particular Api.
+* [generatePostmanCollection](#generatepostmancollection) - Generate a Postman collection for a particular Api.
+* [getAllApiVersions](#getallapiversions) - Get all Api versions for a particular ApiEndpoint.
+* [getApis](#getapis) - Get a list of Apis for a given workspace
+* [upsertApi](#upsertapi) - Upsert an Api
+
+## deleteApi
+
+Delete a particular version of an Api. The will also delete all associated ApiEndpoints, Metadata, Schemas & Request Logs (if using a Postgres datastore).
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.deleteApi({
+ apiID: "plaintive",
+ versionID: "THX",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.DeleteApiRequest](../../models/operations/deleteapirequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.DeleteApiResponse](../../models/operations/deleteapiresponse.md)>**
+
+
+## generateOpenApiSpec
+
+This endpoint will generate any missing operations in any registered OpenAPI document if the operation does not already exist in the document.
+Returns the original document and the newly generated document allowing a diff to be performed to see what has changed.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.generateOpenApiSpec({
+ apiID: "fixed",
+ versionID: "bandwidth",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `request` | [operations.GenerateOpenApiSpecRequest](../../models/operations/generateopenapispecrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GenerateOpenApiSpecResponse](../../models/operations/generateopenapispecresponse.md)>**
+
+
+## generatePostmanCollection
+
+Generates a postman collection containing all endpoints for a particular API. Includes variables produced for any path/query/header parameters included in the OpenAPI document.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.generatePostmanCollection({
+ apiID: "Paradigm",
+ versionID: "olive",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GeneratePostmanCollectionRequest](../../models/operations/generatepostmancollectionrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GeneratePostmanCollectionResponse](../../models/operations/generatepostmancollectionresponse.md)>**
+
+
+## getAllApiVersions
+
+Get all Api versions for a particular ApiEndpoint.
+Supports filtering the versions based on metadata attributes.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.getAllApiVersions({
+ apiID: "azure",
+ metadata: {
+ "enhance": [
+ "Garrison",
+ ],
+ },
+ op: {
+ and: false,
+ },
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetAllApiVersionsRequest](../../models/operations/getallapiversionsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetAllApiVersionsResponse](../../models/operations/getallapiversionsresponse.md)>**
+
+
+## getApis
+
+Get a list of all Apis and their versions for a given workspace.
+Supports filtering the APIs based on metadata attributes.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.getApis({
+ metadata: {
+ "South": [
+ "Southwest",
+ ],
+ },
+ op: {
+ and: false,
+ },
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `request` | [operations.GetApisRequest](../../models/operations/getapisrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetApisResponse](../../models/operations/getapisresponse.md)>**
+
+
+## upsertApi
+
+Upsert an Api. If the Api does not exist, it will be created.
+If the Api exists, it will be updated.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.apis.upsertApi({
+ apiInput: {
+ apiId: "Van",
+ description: "Front-line zero defect algorithm",
+ metaData: {
+ "Balanced": [
+ "West",
+ ],
+ },
+ versionId: "pixel",
+ },
+ apiID: "Buckinghamshire",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.UpsertApiRequest](../../models/operations/upsertapirequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.UpsertApiResponse](../../models/operations/upsertapiresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/embeds/README.md b/speakeasy/docs/sdks/embeds/README.md
new file mode 100755
index 0000000..078bffe
--- /dev/null
+++ b/speakeasy/docs/sdks/embeds/README.md
@@ -0,0 +1,132 @@
+# Embeds
+(*embeds*)
+
+## Overview
+
+REST APIs for managing embeds
+
+### Available Operations
+
+* [getEmbedAccessToken](#getembedaccesstoken) - Get an embed access token for the current workspace.
+* [getValidEmbedAccessTokens](#getvalidembedaccesstokens) - Get all valid embed access tokens for the current workspace.
+* [revokeEmbedAccessToken](#revokeembedaccesstoken) - Revoke an embed access EmbedToken.
+
+## getEmbedAccessToken
+
+Returns an embed access token for the current workspace. This can be used to authenticate access to externally embedded content.
+Filters can be applied allowing views to be filtered to things like particular customerIds.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.embeds.getEmbedAccessToken({
+ filters: {
+ filters: [
+ {
+ key: "",
+ operator: "along",
+ value: "quos",
+ },
+ ],
+ limit: 263313,
+ offset: 411277,
+ operator: "male",
+ },
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetEmbedAccessTokenRequest](../../models/operations/getembedaccesstokenrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetEmbedAccessTokenResponse](../../models/operations/getembedaccesstokenresponse.md)>**
+
+
+## getValidEmbedAccessTokens
+
+Get all valid embed access tokens for the current workspace.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.embeds.getValidEmbedAccessTokens();
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetValidEmbedAccessTokensResponse](../../models/operations/getvalidembedaccesstokensresponse.md)>**
+
+
+## revokeEmbedAccessToken
+
+Revoke an embed access EmbedToken.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.embeds.revokeEmbedAccessToken({
+ tokenID: "Ball",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `request` | [operations.RevokeEmbedAccessTokenRequest](../../models/operations/revokeembedaccesstokenrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.RevokeEmbedAccessTokenResponse](../../models/operations/revokeembedaccesstokenresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/metadata/README.md b/speakeasy/docs/sdks/metadata/README.md
new file mode 100755
index 0000000..1471a85
--- /dev/null
+++ b/speakeasy/docs/sdks/metadata/README.md
@@ -0,0 +1,132 @@
+# Metadata
+(*metadata*)
+
+## Overview
+
+REST APIs for managing Version Metadata entities
+
+### Available Operations
+
+* [deleteVersionMetadata](#deleteversionmetadata) - Delete metadata for a particular apiID and versionID.
+* [getVersionMetadata](#getversionmetadata) - Get all metadata for a particular apiID and versionID.
+* [insertVersionMetadata](#insertversionmetadata) - Insert metadata for a particular apiID and versionID.
+
+## deleteVersionMetadata
+
+Delete metadata for a particular apiID and versionID.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.metadata.deleteVersionMetadata({
+ apiID: "Hydrogen",
+ metaKey: "Cargo",
+ metaValue: "Minnetonka",
+ versionID: "communities",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.DeleteVersionMetadataRequest](../../models/operations/deleteversionmetadatarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.DeleteVersionMetadataResponse](../../models/operations/deleteversionmetadataresponse.md)>**
+
+
+## getVersionMetadata
+
+Get all metadata for a particular apiID and versionID.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.metadata.getVersionMetadata({
+ apiID: "Bronze",
+ versionID: "Buckinghamshire",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetVersionMetadataRequest](../../models/operations/getversionmetadatarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetVersionMetadataResponse](../../models/operations/getversionmetadataresponse.md)>**
+
+
+## insertVersionMetadata
+
+Insert metadata for a particular apiID and versionID.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.metadata.insertVersionMetadata({
+ versionMetadataInput: {
+ metaKey: "Borders",
+ metaValue: "Potassium",
+ },
+ apiID: "Bedfordshire",
+ versionID: "Dram",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.InsertVersionMetadataRequest](../../models/operations/insertversionmetadatarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.InsertVersionMetadataResponse](../../models/operations/insertversionmetadataresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/plugins/README.md b/speakeasy/docs/sdks/plugins/README.md
new file mode 100755
index 0000000..93fcb71
--- /dev/null
+++ b/speakeasy/docs/sdks/plugins/README.md
@@ -0,0 +1,135 @@
+# Plugins
+(*plugins*)
+
+## Overview
+
+REST APIs for managing and running plugins
+
+### Available Operations
+
+* [getPlugins](#getplugins) - Get all plugins for the current workspace.
+* [runPlugin](#runplugin) - Run a plugin
+* [upsertPlugin](#upsertplugin) - Upsert a plugin
+
+## getPlugins
+
+Get all plugins for the current workspace.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.plugins.getPlugins();
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetPluginsResponse](../../models/operations/getpluginsresponse.md)>**
+
+
+## runPlugin
+
+Run a plugin
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.plugins.runPlugin({
+ filters: {
+ filters: [
+ {
+ key: "",
+ operator: "Designer",
+ value: "Pickup",
+ },
+ ],
+ limit: 455139,
+ offset: 173644,
+ operator: "Indiana",
+ },
+ pluginID: "Chrysler",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.RunPluginRequest](../../models/operations/runpluginrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.RunPluginResponse](../../models/operations/runpluginresponse.md)>**
+
+
+## upsertPlugin
+
+Upsert a plugin
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.plugins.upsertPlugin({
+ code: "Fish",
+ pluginId: "Rock",
+ title: "North",
+ workspaceId: "exuding",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `request` | [shared.Plugin](../../models/shared/plugin.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.UpsertPluginResponse](../../models/operations/upsertpluginresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/requests/README.md b/speakeasy/docs/sdks/requests/README.md
new file mode 100755
index 0000000..eb2db55
--- /dev/null
+++ b/speakeasy/docs/sdks/requests/README.md
@@ -0,0 +1,136 @@
+# Requests
+(*requests*)
+
+## Overview
+
+REST APIs for retrieving request information
+
+### Available Operations
+
+* [generateRequestPostmanCollection](#generaterequestpostmancollection) - Generate a Postman collection for a particular request.
+* [getRequestFromEventLog](#getrequestfromeventlog) - Get information about a particular request.
+* [queryEventLog](#queryeventlog) - Query the event log to retrieve a list of requests.
+
+## generateRequestPostmanCollection
+
+Generates a Postman collection for a particular request.
+Allowing it to be replayed with the same inputs that were captured by the SDK.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.requests.generateRequestPostmanCollection({
+ requestID: "Architect",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.GenerateRequestPostmanCollectionRequest](../../models/operations/generaterequestpostmancollectionrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GenerateRequestPostmanCollectionResponse](../../models/operations/generaterequestpostmancollectionresponse.md)>**
+
+
+## getRequestFromEventLog
+
+Get information about a particular request.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.requests.getRequestFromEventLog({
+ requestID: "Chevrolet",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetRequestFromEventLogRequest](../../models/operations/getrequestfromeventlogrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetRequestFromEventLogResponse](../../models/operations/getrequestfromeventlogresponse.md)>**
+
+
+## queryEventLog
+
+Supports retrieving a list of request captured by the SDK for this workspace.
+Allows the filtering of requests on a number of criteria such as ApiID, VersionID, Path, Method, etc.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.requests.queryEventLog({
+ filters: {
+ filters: [
+ {
+ key: "",
+ operator: "Cotton",
+ value: "Interactions",
+ },
+ ],
+ limit: 6323,
+ offset: 788512,
+ operator: "Practical",
+ },
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `request` | [operations.QueryEventLogRequest](../../models/operations/queryeventlogrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.QueryEventLogResponse](../../models/operations/queryeventlogresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/schemas/README.md b/speakeasy/docs/sdks/schemas/README.md
new file mode 100755
index 0000000..621865e
--- /dev/null
+++ b/speakeasy/docs/sdks/schemas/README.md
@@ -0,0 +1,336 @@
+# Schemas
+(*schemas*)
+
+## Overview
+
+REST APIs for managing Schema entities
+
+### Available Operations
+
+* [deleteSchema](#deleteschema) - Delete a particular schema revision for an Api.
+* [downloadSchema](#downloadschema) - Download the latest schema for a particular apiID.
+* [downloadSchemaRevision](#downloadschemarevision) - Download a particular schema revision for an Api.
+* [getSchema](#getschema) - Get information about the latest schema.
+* [getSchemaDiff](#getschemadiff) - Get a diff of two schema revisions for an Api.
+* [getSchemaRevision](#getschemarevision) - Get information about a particular schema revision for an Api.
+* [getSchemas](#getschemas) - Get information about all schemas associated with a particular apiID.
+* [registerSchema](#registerschema) - Register a schema.
+
+## deleteSchema
+
+Delete a particular schema revision for an Api.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.deleteSchema({
+ apiID: "West",
+ revisionID: "Tricycle",
+ versionID: "Funk",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.DeleteSchemaRequest](../../models/operations/deleteschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.DeleteSchemaResponse](../../models/operations/deleteschemaresponse.md)>**
+
+
+## downloadSchema
+
+Download the latest schema for a particular apiID.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.downloadSchema({
+ apiID: "SMTP",
+ versionID: "North",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.DownloadSchemaRequest](../../models/operations/downloadschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.DownloadSchemaResponse](../../models/operations/downloadschemaresponse.md)>**
+
+
+## downloadSchemaRevision
+
+Download a particular schema revision for an Api.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.downloadSchemaRevision({
+ apiID: "Cargo",
+ revisionID: "hacking",
+ versionID: "firewall",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `request` | [operations.DownloadSchemaRevisionRequest](../../models/operations/downloadschemarevisionrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.DownloadSchemaRevisionResponse](../../models/operations/downloadschemarevisionresponse.md)>**
+
+
+## getSchema
+
+Returns information about the last uploaded schema for a particular API version.
+This won't include the schema itself, that can be retrieved via the downloadSchema operation.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.getSchema({
+ apiID: "Handcrafted",
+ versionID: "Hybrid",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.GetSchemaRequest](../../models/operations/getschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetSchemaResponse](../../models/operations/getschemaresponse.md)>**
+
+
+## getSchemaDiff
+
+Get a diff of two schema revisions for an Api.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.getSchemaDiff({
+ apiID: "North",
+ baseRevisionID: "Central",
+ targetRevisionID: "South",
+ versionID: "Van",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `request` | [operations.GetSchemaDiffRequest](../../models/operations/getschemadiffrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetSchemaDiffResponse](../../models/operations/getschemadiffresponse.md)>**
+
+
+## getSchemaRevision
+
+Returns information about the last uploaded schema for a particular schema revision.
+This won't include the schema itself, that can be retrieved via the downloadSchema operation.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.getSchemaRevision({
+ apiID: "City",
+ revisionID: "web",
+ versionID: "sternly",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetSchemaRevisionRequest](../../models/operations/getschemarevisionrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetSchemaRevisionResponse](../../models/operations/getschemarevisionresponse.md)>**
+
+
+## getSchemas
+
+Returns information the schemas associated with a particular apiID.
+This won't include the schemas themselves, they can be retrieved via the downloadSchema operation.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.getSchemas({
+ apiID: "indigo",
+ versionID: "Fantastic",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `request` | [operations.GetSchemasRequest](../../models/operations/getschemasrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.GetSchemasResponse](../../models/operations/getschemasresponse.md)>**
+
+
+## registerSchema
+
+Allows uploading a schema for a particular API version.
+This will be used to populate ApiEndpoints and used as a base for any schema generation if present.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.schemas.registerSchema({
+ requestBody: {
+ file: {
+ content: "mg|mf\".]!\" as bytes <<<>>>,
+ file: "Avon",
+ },
+ },
+ apiID: "Pants",
+ versionID: "Table",
+ });
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.RegisterSchemaRequest](../../models/operations/registerschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.RegisterSchemaResponse](../../models/operations/registerschemaresponse.md)>**
+
diff --git a/speakeasy/docs/sdks/sdk/README.md b/speakeasy/docs/sdks/sdk/README.md
new file mode 100755
index 0000000..da6aad7
--- /dev/null
+++ b/speakeasy/docs/sdks/sdk/README.md
@@ -0,0 +1,46 @@
+# SDK
+
+
+## Overview
+
+Speakeasy API: The Speakeasy API allows teams to manage common operations with their APIs
+
+The Speakeasy Platform Documentation
+
+### Available Operations
+
+* [validateApiKey](#validateapikey) - Validate the current api key.
+
+## validateApiKey
+
+Validate the current api key.
+
+### Example Usage
+
+```typescript
+import { SDK } from "openapi";
+
+(async() => {
+ const sdk = new SDK({
+ apiKey: "",
+ });
+
+ const res = await sdk.sdk.validateApiKey();
+
+ if (res.statusCode == 200) {
+ // handle response
+ }
+})();
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. |
+
+
+### Response
+
+**Promise<[operations.ValidateApiKeyResponse](../../models/operations/validateapikeyresponse.md)>**
+
diff --git a/speakeasy/files.gen b/speakeasy/files.gen
new file mode 100755
index 0000000..1ece346
--- /dev/null
+++ b/speakeasy/files.gen
@@ -0,0 +1,181 @@
+src/sdk/apiendpoints.ts
+src/sdk/apis.ts
+src/sdk/embeds.ts
+src/sdk/metadata.ts
+src/sdk/plugins.ts
+src/sdk/requests.ts
+src/sdk/schemas.ts
+src/sdk/sdk.ts
+.eslintrc.yml
+jest.config.js
+package-lock.json
+package.json
+src/index.ts
+src/internal/utils/contenttype.ts
+src/internal/utils/headers.ts
+src/internal/utils/index.ts
+src/internal/utils/pathparams.ts
+src/internal/utils/queryparams.ts
+src/internal/utils/requestbody.ts
+src/internal/utils/retries.ts
+src/internal/utils/security.ts
+src/internal/utils/utils.ts
+src/sdk/index.ts
+src/sdk/models/errors/sdkerror.ts
+src/sdk/types/index.ts
+src/sdk/types/rfcdate.ts
+tsconfig.json
+src/sdk/models/operations/deleteapiendpoint.ts
+src/sdk/models/operations/findapiendpoint.ts
+src/sdk/models/operations/generateopenapispecforapiendpoint.ts
+src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts
+src/sdk/models/operations/getallapiendpoints.ts
+src/sdk/models/operations/getallforversionapiendpoints.ts
+src/sdk/models/operations/getapiendpoint.ts
+src/sdk/models/operations/upsertapiendpoint.ts
+src/sdk/models/operations/deleteapi.ts
+src/sdk/models/operations/generateopenapispec.ts
+src/sdk/models/operations/generatepostmancollection.ts
+src/sdk/models/operations/getallapiversions.ts
+src/sdk/models/operations/getapis.ts
+src/sdk/models/operations/upsertapi.ts
+src/sdk/models/operations/getembedaccesstoken.ts
+src/sdk/models/operations/getvalidembedaccesstokens.ts
+src/sdk/models/operations/revokeembedaccesstoken.ts
+src/sdk/models/operations/deleteversionmetadata.ts
+src/sdk/models/operations/getversionmetadata.ts
+src/sdk/models/operations/insertversionmetadata.ts
+src/sdk/models/operations/getplugins.ts
+src/sdk/models/operations/runplugin.ts
+src/sdk/models/operations/upsertplugin.ts
+src/sdk/models/operations/generaterequestpostmancollection.ts
+src/sdk/models/operations/getrequestfromeventlog.ts
+src/sdk/models/operations/queryeventlog.ts
+src/sdk/models/operations/deleteschema.ts
+src/sdk/models/operations/downloadschema.ts
+src/sdk/models/operations/downloadschemarevision.ts
+src/sdk/models/operations/getschema.ts
+src/sdk/models/operations/getschemadiff.ts
+src/sdk/models/operations/getschemarevision.ts
+src/sdk/models/operations/getschemas.ts
+src/sdk/models/operations/registerschema.ts
+src/sdk/models/operations/validateapikey.ts
+src/sdk/models/operations/index.ts
+src/sdk/models/shared/error.ts
+src/sdk/models/shared/apiendpoint.ts
+src/sdk/models/shared/generateopenapispecdiff.ts
+src/sdk/models/shared/api.ts
+src/sdk/models/shared/embedaccesstokenresponse.ts
+src/sdk/models/shared/filters.ts
+src/sdk/models/shared/filter.ts
+src/sdk/models/shared/embedtoken.ts
+src/sdk/models/shared/versionmetadata.ts
+src/sdk/models/shared/plugin.ts
+src/sdk/models/shared/boundedrequest.ts
+src/sdk/models/shared/requestmetadata.ts
+src/sdk/models/shared/unboundedrequest.ts
+src/sdk/models/shared/schema.ts
+src/sdk/models/shared/schemadiff.ts
+src/sdk/models/shared/security.ts
+src/sdk/models/shared/index.ts
+src/sdk/models/errors/index.ts
+USAGE.md
+docs/models/operations/deleteapiendpointrequest.md
+docs/models/operations/deleteapiendpointresponse.md
+docs/models/operations/findapiendpointrequest.md
+docs/models/operations/findapiendpointresponse.md
+docs/models/operations/generateopenapispecforapiendpointrequest.md
+docs/models/operations/generateopenapispecforapiendpointresponse.md
+docs/models/operations/generatepostmancollectionforapiendpointrequest.md
+docs/models/operations/generatepostmancollectionforapiendpointresponse.md
+docs/models/operations/getallapiendpointsrequest.md
+docs/models/operations/getallapiendpointsresponse.md
+docs/models/operations/getallforversionapiendpointsrequest.md
+docs/models/operations/getallforversionapiendpointsresponse.md
+docs/models/operations/getapiendpointrequest.md
+docs/models/operations/getapiendpointresponse.md
+docs/models/operations/upsertapiendpointrequest.md
+docs/models/operations/upsertapiendpointresponse.md
+docs/models/operations/deleteapirequest.md
+docs/models/operations/deleteapiresponse.md
+docs/models/operations/generateopenapispecrequest.md
+docs/models/operations/generateopenapispecresponse.md
+docs/models/operations/generatepostmancollectionrequest.md
+docs/models/operations/generatepostmancollectionresponse.md
+docs/models/operations/getallapiversionsop.md
+docs/models/operations/getallapiversionsrequest.md
+docs/models/operations/getallapiversionsresponse.md
+docs/models/operations/getapisop.md
+docs/models/operations/getapisrequest.md
+docs/models/operations/getapisresponse.md
+docs/models/operations/upsertapirequest.md
+docs/models/operations/upsertapiresponse.md
+docs/models/operations/getembedaccesstokenrequest.md
+docs/models/operations/getembedaccesstokenresponse.md
+docs/models/operations/getvalidembedaccesstokensresponse.md
+docs/models/operations/revokeembedaccesstokenrequest.md
+docs/models/operations/revokeembedaccesstokenresponse.md
+docs/models/operations/deleteversionmetadatarequest.md
+docs/models/operations/deleteversionmetadataresponse.md
+docs/models/operations/getversionmetadatarequest.md
+docs/models/operations/getversionmetadataresponse.md
+docs/models/operations/insertversionmetadatarequest.md
+docs/models/operations/insertversionmetadataresponse.md
+docs/models/operations/getpluginsresponse.md
+docs/models/operations/runpluginrequest.md
+docs/models/operations/runpluginresponse.md
+docs/models/operations/upsertpluginresponse.md
+docs/models/operations/generaterequestpostmancollectionrequest.md
+docs/models/operations/generaterequestpostmancollectionresponse.md
+docs/models/operations/getrequestfromeventlogrequest.md
+docs/models/operations/getrequestfromeventlogresponse.md
+docs/models/operations/queryeventlogrequest.md
+docs/models/operations/queryeventlogresponse.md
+docs/models/operations/deleteschemarequest.md
+docs/models/operations/deleteschemaresponse.md
+docs/models/operations/downloadschemarequest.md
+docs/models/operations/downloadschemaresponse.md
+docs/models/operations/downloadschemarevisionrequest.md
+docs/models/operations/downloadschemarevisionresponse.md
+docs/models/operations/getschemarequest.md
+docs/models/operations/getschemaresponse.md
+docs/models/operations/getschemadiffrequest.md
+docs/models/operations/getschemadiffresponse.md
+docs/models/operations/getschemarevisionrequest.md
+docs/models/operations/getschemarevisionresponse.md
+docs/models/operations/getschemasrequest.md
+docs/models/operations/getschemasresponse.md
+docs/models/operations/registerschemarequestbodyfile.md
+docs/models/operations/registerschemarequestbody.md
+docs/models/operations/registerschemarequest.md
+docs/models/operations/registerschemaresponse.md
+docs/models/operations/validateapikeyresponse.md
+docs/models/shared/errort.md
+docs/models/shared/apiendpointinput.md
+docs/models/shared/apiendpoint.md
+docs/models/shared/generateopenapispecdiff.md
+docs/models/shared/apiinput.md
+docs/models/shared/api.md
+docs/models/shared/embedaccesstokenresponse.md
+docs/models/shared/filters.md
+docs/models/shared/filter.md
+docs/models/shared/embedtoken.md
+docs/models/shared/versionmetadatainput.md
+docs/models/shared/versionmetadata.md
+docs/models/shared/plugin.md
+docs/models/shared/boundedrequest.md
+docs/models/shared/requestmetadata.md
+docs/models/shared/unboundedrequest.md
+docs/models/shared/schema.md
+docs/models/shared/schemadiffvaluechange.md
+docs/models/shared/schemadiff.md
+docs/models/shared/security.md
+docs/sdks/sdk/README.md
+docs/sdks/apiendpoints/README.md
+docs/sdks/apis/README.md
+docs/sdks/embeds/README.md
+docs/sdks/metadata/README.md
+docs/sdks/plugins/README.md
+docs/sdks/requests/README.md
+docs/sdks/schemas/README.md
+.gitattributes
\ No newline at end of file
diff --git a/speakeasy/gen.yaml b/speakeasy/gen.yaml
new file mode 100755
index 0000000..ae71986
--- /dev/null
+++ b/speakeasy/gen.yaml
@@ -0,0 +1,24 @@
+configVersion: 1.0.0
+management:
+ docChecksum: ba638b2ad28966c596e28321a2003686
+ docVersion: 0.3.0
+ speakeasyVersion: 1.101.0
+ generationVersion: 2.161.0
+generation:
+ sdkClassName: SDK
+ singleTagPerOp: false
+features:
+ typescript:
+ acceptHeaders: 2.81.1
+ core: 2.90.4
+ examples: 2.81.3
+ globalSecurity: 2.82.0
+ globalServerURLs: 2.82.0
+ inputOutputModels: 2.81.1
+ serverIDs: 2.81.1
+typescript:
+ version: 0.1.0
+ author: Speakeasy
+ flattenGlobalSecurity: true
+ maxMethodParams: 0
+ packageName: openapi
diff --git a/speakeasy/jest.config.js b/speakeasy/jest.config.js
new file mode 100755
index 0000000..e3f8611
--- /dev/null
+++ b/speakeasy/jest.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ preset: "ts-jest",
+ testEnvironment: "node",
+ testPathIgnorePatterns: ["/__tests__/helpers.ts", "/__tests__/common_helpers.ts"],
+};
diff --git a/speakeasy/package-lock.json b/speakeasy/package-lock.json
new file mode 100755
index 0000000..5c8cc3f
--- /dev/null
+++ b/speakeasy/package-lock.json
@@ -0,0 +1,8809 @@
+{
+ "name": "openapi",
+ "version": "0.1.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "openapi",
+ "version": "0.1.0",
+ "dependencies": {
+ "axios": "^1.1.3",
+ "class-transformer": "^0.5.1",
+ "form-data": "^4.0.0",
+ "reflect-metadata": "^0.1.13"
+ },
+ "devDependencies": {
+ "@types/node": "^18.11.5",
+ "@types/jsonpath": "^0.2.0",
+ "@typescript-eslint/eslint-plugin": "^5.56.0",
+ "@typescript-eslint/parser": "^5.56.0",
+ "eslint": "^8.36.0",
+ "typescript": "^4.8.4"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
+ "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz",
+ "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz",
+ "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.22.0",
+ "@babel/helper-compilation-targets": "^7.22.1",
+ "@babel/helper-module-transforms": "^7.22.1",
+ "@babel/helpers": "^7.22.0",
+ "@babel/parser": "^7.22.0",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz",
+ "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.3",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz",
+ "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.0",
+ "@babel/helper-validator-option": "^7.21.0",
+ "browserslist": "^4.21.3",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz",
+ "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
+ "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.20.7",
+ "@babel/types": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
+ "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.21.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz",
+ "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-module-imports": "^7.21.4",
+ "@babel/helper-simple-access": "^7.21.5",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz",
+ "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz",
+ "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.21.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
+ "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
+ "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz",
+ "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz",
+ "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz",
+ "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz",
+ "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.21.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz",
+ "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.21.4",
+ "@babel/parser": "^7.21.9",
+ "@babel/types": "^7.21.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz",
+ "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.22.3",
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-function-name": "^7.21.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.22.4",
+ "@babel/types": "^7.22.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz",
+ "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.21.5",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "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,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz",
+ "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
+ "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.36.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
+ "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
+ "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
+ "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.5.0",
+ "@jest/reporters": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.5.0",
+ "jest-config": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-resolve-dependencies": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
+ "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-mock": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "dev": true,
+ "dependencies": {
+ "expect": "^29.5.0",
+ "jest-snapshot": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^29.4.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
+ "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
+ "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "jest-mock": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/reporters": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
+ "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "dev": true,
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
+ "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.25.16"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/source-map": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
+ "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-result": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
+ "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
+ "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
+ "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
+ "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true,
+ "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,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "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
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "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,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "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,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.25.24",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
+ "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
+ "dev": true
+ },
+ "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,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz",
+ "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
+ "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
+ "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz",
+ "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
+ "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "node_modules/@types/jsonpath": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz",
+ "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.11.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+ "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
+ "dev": true
+ },
+ "node_modules/@types/prettier": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
+ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+ "dev": true
+ },
+ "node_modules/@types/semver": {
+ "version": "7.3.13",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
+ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
+ "dev": true
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "dev": true
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz",
+ "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.56.0",
+ "@typescript-eslint/type-utils": "5.56.0",
+ "@typescript-eslint/utils": "5.56.0",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz",
+ "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.56.0",
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/typescript-estree": "5.56.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz",
+ "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/visitor-keys": "5.56.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz",
+ "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.56.0",
+ "@typescript-eslint/utils": "5.56.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz",
+ "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz",
+ "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/visitor-keys": "5.56.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz",
+ "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.56.0",
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/typescript-estree": "5.56.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz",
+ "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.56.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/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"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz",
+ "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
+ "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "dev": true,
+ "dependencies": {
+ "@jest/transform": "^29.5.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
+ "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
+ "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "dev": true,
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz",
+ "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001489",
+ "electron-to-chromium": "^1.4.411",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+ "dev": true,
+ "dependencies": {
+ "fast-json-stable-stringify": "2.x"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001492",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz",
+ "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+ "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "dev": true
+ },
+ "node_modules/class-transformer": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
+ "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
+ },
+ "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,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
+ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "dev": true
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "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
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+ "dev": true
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "node_modules/deepmerge": {
+ "version": "4.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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
+ "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=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,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.414",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz",
+ "integrity": "sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==",
+ "dev": true
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "1.14.3",
+ "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",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/escodegen/node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/escodegen/node_modules/levn": {
+ "version": "0.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/optionator": {
+ "version": "0.8.3",
+ "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",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/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/escodegen/node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.36.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
+ "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.1",
+ "@eslint/js": "8.36.0",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.5.0",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "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,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
+ "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz",
+ "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/expect-utils": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "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,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/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/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,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "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,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
+ "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.5.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
+ "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
+ "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^0.7.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.5.0",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.5.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
+ "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "prompts": "^2.0.1",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.4.3",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
+ "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "dev": true,
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
+ "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
+ "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
+ "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
+ "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
+ "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
+ "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.5.0",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
+ "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-util": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
+ "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
+ "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
+ "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "dev": true,
+ "dependencies": {
+ "jest-regex-util": "^29.4.3",
+ "jest-snapshot": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
+ "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.5.0",
+ "@jest/environment": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.4.3",
+ "jest-environment-node": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-leak-detector": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-resolve": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
+ "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/globals": "^29.5.0",
+ "@jest/source-map": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/traverse": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/babel__traverse": "^7.0.6",
+ "@types/prettier": "^2.1.5",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.5.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
+ "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
+ "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
+ "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.5.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
+ "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.5.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-sdsl": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
+ "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "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
+ },
+ "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
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonpath": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz",
+ "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==",
+ "dependencies": {
+ "esprima": "1.2.2",
+ "static-eval": "2.0.2",
+ "underscore": "1.12.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true
+ },
+ "node_modules/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
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
+ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
+ "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ]
+ },
+ "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==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/reflect-metadata": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
+ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "escodegen": "^1.8.1"
+ }
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-jest": {
+ "version": "29.1.0",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz",
+ "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==",
+ "dev": true,
+ "dependencies": {
+ "bs-logger": "0.x",
+ "fast-json-stable-stringify": "2.x",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "4.x",
+ "make-error": "1.x",
+ "semver": "7.x",
+ "yargs-parser": "^21.0.1"
+ },
+ "bin": {
+ "ts-jest": "cli.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.0.0-beta.0 <8",
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.3 <6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "@jest/types": {
+ "optional": true
+ },
+ "babel-jest": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dev": true,
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "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,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
+ "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/underscore": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz",
+ "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw=="
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
+ "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
+ "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.18.6"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz",
+ "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz",
+ "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.22.0",
+ "@babel/helper-compilation-targets": "^7.22.1",
+ "@babel/helper-module-transforms": "^7.22.1",
+ "@babel/helpers": "^7.22.0",
+ "@babel/parser": "^7.22.0",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz",
+ "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.3",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz",
+ "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.0",
+ "@babel/helper-validator-option": "^7.21.0",
+ "browserslist": "^4.21.3",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz",
+ "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==",
+ "dev": true
+ },
+ "@babel/helper-function-name": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
+ "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.20.7",
+ "@babel/types": "^7.21.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
+ "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.21.4"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.22.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz",
+ "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-module-imports": "^7.21.4",
+ "@babel/helper-simple-access": "^7.21.5",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz",
+ "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==",
+ "dev": true
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz",
+ "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.21.5"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.21.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
+ "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==",
+ "dev": true
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
+ "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.22.3",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz",
+ "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.21.9",
+ "@babel/traverse": "^7.22.1",
+ "@babel/types": "^7.22.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz",
+ "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==",
+ "dev": true
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz",
+ "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz",
+ "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ }
+ },
+ "@babel/template": {
+ "version": "7.21.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz",
+ "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.21.4",
+ "@babel/parser": "^7.21.9",
+ "@babel/types": "^7.21.5"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz",
+ "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.22.3",
+ "@babel/helper-environment-visitor": "^7.22.1",
+ "@babel/helper-function-name": "^7.21.0",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.22.4",
+ "@babel/types": "^7.22.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.22.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz",
+ "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.21.5",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "dependencies": {
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ }
+ }
+ },
+ "@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,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz",
+ "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz",
+ "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@eslint/js": {
+ "version": "8.36.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz",
+ "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==",
+ "dev": true
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@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
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ }
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true
+ },
+ "@jest/console": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
+ "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "@jest/core": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
+ "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^29.5.0",
+ "@jest/reporters": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.5.0",
+ "jest-config": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-resolve-dependencies": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "@jest/environment": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
+ "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
+ "dev": true,
+ "requires": {
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-mock": "^29.5.0"
+ }
+ },
+ "@jest/expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "dev": true,
+ "requires": {
+ "expect": "^29.5.0",
+ "jest-snapshot": "^29.5.0"
+ }
+ },
+ "@jest/expect-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "dev": true,
+ "requires": {
+ "jest-get-type": "^29.4.3"
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
+ "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
+ }
+ },
+ "@jest/globals": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
+ "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "jest-mock": "^29.5.0"
+ }
+ },
+ "@jest/reporters": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
+ "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "dev": true,
+ "requires": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ }
+ },
+ "@jest/schemas": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
+ "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
+ "dev": true,
+ "requires": {
+ "@sinclair/typebox": "^0.25.16"
+ }
+ },
+ "@jest/source-map": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
+ "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ }
+ },
+ "@jest/test-result": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
+ "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ }
+ },
+ "@jest/test-sequencer": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
+ "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "@jest/transform": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
+ "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ }
+ },
+ "@jest/types": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
+ "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ }
+ },
+ "@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,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true
+ },
+ "@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
+ },
+ "@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
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ },
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ }
+ }
+ },
+ "@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,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@sinclair/typebox": {
+ "version": "0.25.24",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
+ "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
+ "dev": true
+ },
+ "@sinonjs/commons": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz",
+ "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "@tsconfig/node10": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+ "dev": true
+ },
+ "@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true
+ },
+ "@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true
+ },
+ "@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true
+ },
+ "@types/babel__core": {
+ "version": "7.20.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
+ "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
+ "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz",
+ "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "@types/graceful-fs": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
+ "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "@types/jsonpath": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz",
+ "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "18.11.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+ "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
+ "dev": true
+ },
+ "@types/prettier": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
+ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+ "dev": true
+ },
+ "@types/semver": {
+ "version": "7.3.13",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
+ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
+ "dev": true
+ },
+ "@types/stack-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "dev": true
+ },
+ "@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz",
+ "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.56.0",
+ "@typescript-eslint/type-utils": "5.56.0",
+ "@typescript-eslint/utils": "5.56.0",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz",
+ "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.56.0",
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/typescript-estree": "5.56.0",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz",
+ "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/visitor-keys": "5.56.0"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz",
+ "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "5.56.0",
+ "@typescript-eslint/utils": "5.56.0",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz",
+ "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz",
+ "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/visitor-keys": "5.56.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz",
+ "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.56.0",
+ "@typescript-eslint/types": "5.56.0",
+ "@typescript-eslint/typescript-estree": "5.56.0",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz",
+ "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.56.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true
+ },
+ "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,
+ "requires": {}
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
+ "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
+ },
+ "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
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "axios": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz",
+ "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "babel-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
+ "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "dev": true,
+ "requires": {
+ "@jest/transform": "^29.5.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
+ "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ }
+ },
+ "babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ }
+ },
+ "babel-preset-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
+ "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz",
+ "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001489",
+ "electron-to-chromium": "^1.4.411",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ }
+ },
+ "bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+ "dev": true,
+ "requires": {
+ "fast-json-stable-stringify": "2.x"
+ }
+ },
+ "bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001492",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz",
+ "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+ "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+ "dev": true
+ },
+ "cjs-module-lexer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "dev": true
+ },
+ "class-transformer": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
+ "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
+ },
+ "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,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true
+ },
+ "collect-v8-coverage": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
+ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "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
+ },
+ "create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "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
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "diff-sequences": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
+ "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.414",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz",
+ "integrity": "sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==",
+ "dev": true
+ },
+ "emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+ "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w=="
+ },
+ "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==",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ }
+ }
+ },
+ "eslint": {
+ "version": "8.36.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
+ "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.1",
+ "@eslint/js": "8.36.0",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.5.0",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz",
+ "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esprima": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz",
+ "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A=="
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "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,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true
+ },
+ "expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "dev": true,
+ "requires": {
+ "@jest/expect-utils": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "requires": {
+ "bser": "2.1.1"
+ }
+ },
+ "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,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "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
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ },
+ "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,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "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
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "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
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
+ },
+ "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,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "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,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
+ "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.5.0"
+ }
+ },
+ "jest-changed-files": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
+ "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "dev": true,
+ "requires": {
+ "execa": "^5.0.0",
+ "p-limit": "^3.1.0"
+ }
+ },
+ "jest-circus": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
+ "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^0.7.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.5.0",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.5.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ }
+ },
+ "jest-cli": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
+ "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "prompts": "^2.0.1",
+ "yargs": "^17.3.1"
+ }
+ },
+ "jest-config": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "jest-diff": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.4.3",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ }
+ },
+ "jest-docblock": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
+ "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^3.0.0"
+ }
+ },
+ "jest-each": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
+ "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "pretty-format": "^29.5.0"
+ }
+ },
+ "jest-environment-node": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
+ "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
+ }
+ },
+ "jest-get-type": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
+ "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
+ "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^2.3.2",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
+ "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "dev": true,
+ "requires": {
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ }
+ },
+ "jest-message-util": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
+ "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.5.0",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ }
+ },
+ "jest-mock": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
+ "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-util": "^29.5.0"
+ }
+ },
+ "jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "requires": {}
+ },
+ "jest-regex-util": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
+ "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
+ "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
+ "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "^29.4.3",
+ "jest-snapshot": "^29.5.0"
+ }
+ },
+ "jest-runner": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
+ "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^29.5.0",
+ "@jest/environment": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.4.3",
+ "jest-environment-node": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-leak-detector": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-resolve": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ }
+ },
+ "jest-runtime": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
+ "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/globals": "^29.5.0",
+ "@jest/source-map": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "jest-snapshot": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/traverse": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/babel__traverse": "^7.0.6",
+ "@types/prettier": "^2.1.5",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.5.0",
+ "semver": "^7.3.5"
+ }
+ },
+ "jest-util": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
+ "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "jest-validate": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
+ "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.5.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
+ }
+ }
+ },
+ "jest-watcher": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
+ "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.5.0",
+ "string-length": "^4.0.1"
+ }
+ },
+ "jest-worker": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
+ "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "jest-util": "^29.5.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "js-sdsl": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
+ "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==",
+ "dev": true
+ },
+ "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
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "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
+ },
+ "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
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "jsonpath": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz",
+ "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==",
+ "requires": {
+ "esprima": "1.2.2",
+ "static-eval": "2.0.2",
+ "underscore": "1.12.1"
+ }
+ },
+ "kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true
+ },
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true
+ },
+ "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
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true
+ },
+ "makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
+ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
+ "dev": true
+ },
+ "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
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "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,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "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,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "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
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pirates": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "requires": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ }
+ },
+ "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=="
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true
+ },
+ "pure-rand": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
+ "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "reflect-metadata": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
+ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
+ },
+ "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
+ },
+ "resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ }
+ }
+ },
+ "resolve-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
+ },
+ "resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "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,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "devOptional": true
+ },
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "escodegen": "^1.8.1"
+ }
+ },
+ "string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "requires": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "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
+ },
+ "tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "ts-jest": {
+ "version": "29.1.0",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz",
+ "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==",
+ "dev": true,
+ "requires": {
+ "bs-logger": "0.x",
+ "fast-json-stable-stringify": "2.x",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "4.x",
+ "make-error": "1.x",
+ "semver": "7.x",
+ "yargs-parser": "^21.0.1"
+ }
+ },
+ "ts-node": {
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+ "dev": true,
+ "requires": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "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,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.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
+ },
+ "typescript": {
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
+ "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz",
+ "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw=="
+ },
+ "update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true
+ },
+ "v8-to-istanbul": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
+ "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ }
+ }
+ },
+ "walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true
+ },
+ "yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/speakeasy/package.json b/speakeasy/package.json
new file mode 100755
index 0000000..cc526d0
--- /dev/null
+++ b/speakeasy/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "openapi",
+ "version": "0.1.0",
+ "author": "Speakeasy",
+ "scripts": {
+ "prepare": "tsc --build",
+ "check:tsc": "tsc --noEmit --skipLibCheck",
+ "check:eslint": "eslint --max-warnings=0 src",
+ "check": "npm run check:tsc && npm run check:eslint"
+ },
+ "dependencies": {
+ "axios": "^1.1.3",
+ "jsonpath": "^1.1.1",
+ "class-transformer": "^0.5.1",
+ "form-data": "^4.0.0",
+ "reflect-metadata": "^0.1.13"
+ },
+ "devDependencies": {
+ "@types/jsonpath": "^0.2.0",
+ "@types/node": "^18.11.5",
+ "typescript": "^4.8.4",
+ "@typescript-eslint/eslint-plugin": "^5.56.0",
+ "@typescript-eslint/parser": "^5.56.0",
+ "eslint": "^8.36.0"
+ },
+ "main": "dist/index.js",
+ "files": [
+ "dist",
+ "docs",
+ "README.md"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/TristanSpeakEasy/sdk-mono-repo-test.git",
+ "directory": "speakeasy"
+ }
+}
diff --git a/speakeasy/src/index.ts b/speakeasy/src/index.ts
new file mode 100755
index 0000000..3130314
--- /dev/null
+++ b/speakeasy/src/index.ts
@@ -0,0 +1,5 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./sdk";
diff --git a/speakeasy/src/internal/utils/contenttype.ts b/speakeasy/src/internal/utils/contenttype.ts
new file mode 100755
index 0000000..9aaafa9
--- /dev/null
+++ b/speakeasy/src/internal/utils/contenttype.ts
@@ -0,0 +1,33 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export function matchContentType(
+ contentType: string,
+ pattern: string
+): boolean {
+ let res = false;
+ contentType
+ .split(";")
+ .map((ctPart: string) => {
+ return ctPart.trim();
+ })
+ .forEach((ctPart: string) => {
+ if (ctPart === pattern || pattern === "*" || pattern === "*/*") {
+ res = true;
+ return;
+ }
+ if (ctPart === pattern) {
+ res = true;
+ return;
+ }
+ const parts: string[] = ctPart.split("/");
+ if (parts.length === 2) {
+ if (`${parts[0]}/*` === pattern || `*/${parts[1]}` === pattern) {
+ res = true;
+ return;
+ }
+ }
+ });
+ return res;
+}
diff --git a/speakeasy/src/internal/utils/headers.ts b/speakeasy/src/internal/utils/headers.ts
new file mode 100755
index 0000000..d570fda
--- /dev/null
+++ b/speakeasy/src/internal/utils/headers.ts
@@ -0,0 +1,138 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { AxiosResponseHeaders, RawAxiosResponseHeaders } from "axios";
+import {
+ ParamDecorator,
+ isBooleanRecord,
+ isEmpty,
+ isNumberRecord,
+ isStringRecord,
+ parseParamDecorator,
+ valToString,
+} from "./utils";
+
+import { requestMetadataKey } from "./requestbody";
+
+export const headerMetadataKey = "header";
+
+export function getHeadersFromRequest(headerParams: any): any {
+ if (headerParams == null) return;
+
+ const headers: any = {};
+
+ const fieldNames: string[] = Object.getOwnPropertyNames(headerParams);
+ fieldNames.forEach((fname) => {
+ const requestBodyAnn: string = Reflect.getMetadata(
+ requestMetadataKey,
+ headerParams,
+ fname
+ );
+
+ if (requestBodyAnn) return;
+
+ const headerAnn: string = Reflect.getMetadata(
+ headerMetadataKey,
+ headerParams,
+ fname
+ );
+
+ if (headerAnn == null) return;
+
+ const headerDecorator: ParamDecorator = parseParamDecorator(
+ headerAnn,
+ fname,
+ "simple",
+ false
+ );
+
+ if (headerDecorator == null) return;
+
+ const value: string = serializeHeader(
+ headerParams[fname],
+ headerDecorator.Explode
+ );
+
+ if (value != "") headers[headerDecorator.ParamName] = value;
+ });
+
+ return headers;
+}
+
+export function getHeadersFromResponse(
+ headers: RawAxiosResponseHeaders | AxiosResponseHeaders
+): Record {
+ const reponseHeaders: Record = {};
+
+ Object.keys(headers).forEach((key) => {
+ const value = headers[key];
+
+ if (!value) return;
+
+ if (Array.isArray(value)) {
+ const h: string[] = [];
+
+ value.forEach((val: any) => {
+ if (val) {
+ h.push(String(val));
+ }
+ });
+
+ reponseHeaders[key] = h;
+ } else {
+ reponseHeaders[key] = [value];
+ }
+ });
+
+ return reponseHeaders;
+}
+
+function serializeHeader(header: any, explode: boolean): string {
+ const headerVals: string[] = [];
+
+ if (Array.isArray(header)) {
+ header.forEach((val: any) => {
+ headerVals.push(valToString(val));
+ });
+ } else if (
+ isStringRecord(header) ||
+ isNumberRecord(header) ||
+ isBooleanRecord(header)
+ ) {
+ Object.getOwnPropertyNames(header).forEach((headerKey: string) => {
+ if (explode)
+ headerVals.push(`${headerKey}=${valToString(header[headerKey])}`);
+ else headerVals.push(`${headerKey},${valToString(header[headerKey])}`);
+ });
+ } else if (header instanceof Object) {
+ Object.getOwnPropertyNames(header).forEach((headerKey: string) => {
+ const headerAnn: string = Reflect.getMetadata(
+ headerMetadataKey,
+ header,
+ headerKey
+ );
+
+ if (headerAnn == null) return;
+
+ const headerDecorator: ParamDecorator = parseParamDecorator(
+ headerAnn,
+ headerKey,
+ "simple",
+ explode
+ );
+
+ if (headerDecorator == null) return;
+
+ const headerFieldValue = valToString(header[headerKey]);
+
+ if (isEmpty(headerFieldValue)) return;
+ else if (explode)
+ headerVals.push(`${headerDecorator.ParamName}=${headerFieldValue}`);
+ else headerVals.push(`${headerDecorator.ParamName},${headerFieldValue}`);
+ });
+ } else {
+ return String(header);
+ }
+ return headerVals.join(",");
+}
diff --git a/speakeasy/src/internal/utils/index.ts b/speakeasy/src/internal/utils/index.ts
new file mode 100755
index 0000000..db8bb23
--- /dev/null
+++ b/speakeasy/src/internal/utils/index.ts
@@ -0,0 +1,12 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./contenttype";
+export * from "./headers";
+export * from "./pathparams";
+export * from "./queryparams";
+export * from "./requestbody";
+export * from "./retries";
+export * from "./security";
+export * from "./utils";
diff --git a/speakeasy/src/internal/utils/pathparams.ts b/speakeasy/src/internal/utils/pathparams.ts
new file mode 100755
index 0000000..cdc9d8c
--- /dev/null
+++ b/speakeasy/src/internal/utils/pathparams.ts
@@ -0,0 +1,79 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import {
+ ParamDecorator,
+ isBooleanRecord,
+ isEmpty,
+ isNumberRecord,
+ isStringRecord,
+ parseParamDecorator,
+ valToString,
+} from "./utils";
+
+export const ppMetadataKey = "pathParam";
+
+export function getSimplePathParams(
+ paramName: string,
+ paramValue: any,
+ explode: boolean
+): Map {
+ const pathParams: Map = new Map();
+ const ppVals: string[] = [];
+
+ if (Array.isArray(paramValue)) {
+ paramValue.forEach((param) => {
+ ppVals.push(encodeURIComponent(valToString(param)));
+ });
+ pathParams.set(paramName, ppVals.join(","));
+ } else if (
+ isStringRecord(paramValue) ||
+ isNumberRecord(paramValue) ||
+ isBooleanRecord(paramValue)
+ ) {
+ Object.getOwnPropertyNames(paramValue).forEach((paramKey: string) => {
+ const paramFieldValue = encodeURIComponent(
+ valToString(paramValue[paramKey])
+ );
+
+ if (explode) ppVals.push(`${paramKey}=${paramFieldValue}`);
+ else ppVals.push(`${paramKey},${paramFieldValue}`);
+ });
+
+ pathParams.set(paramName, ppVals.join(","));
+ } else if (paramValue instanceof Object) {
+ Object.getOwnPropertyNames(paramValue).forEach((paramKey: string) => {
+ const ppAnn: string = Reflect.getMetadata(
+ ppMetadataKey,
+ paramValue,
+ paramKey
+ );
+
+ if (ppAnn == null) return;
+
+ const ppDecorator: ParamDecorator = parseParamDecorator(
+ ppAnn,
+ paramKey,
+ "simple",
+ explode
+ );
+
+ if (ppDecorator == null) return;
+
+ const paramFieldValue = encodeURIComponent(
+ valToString(paramValue[paramKey])
+ );
+
+ if (isEmpty(paramFieldValue)) return;
+ else if (explode)
+ ppVals.push(`${ppDecorator.ParamName}=${paramFieldValue}`);
+ else ppVals.push(`${ppDecorator.ParamName},${paramFieldValue}`);
+ });
+
+ pathParams.set(paramName, ppVals.join(","));
+ } else {
+ pathParams.set(paramName, encodeURIComponent(valToString(paramValue)));
+ }
+ return pathParams;
+}
diff --git a/speakeasy/src/internal/utils/queryparams.ts b/speakeasy/src/internal/utils/queryparams.ts
new file mode 100755
index 0000000..90f5653
--- /dev/null
+++ b/speakeasy/src/internal/utils/queryparams.ts
@@ -0,0 +1,244 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import {
+ ParamDecorator,
+ parseParamDecorator,
+ populateFromGlobals,
+ shouldQueryParamSerialize,
+ valToString
+} from "./utils";
+
+import {requestMetadataKey} from "./requestbody";
+
+export const qpMetadataKey = "queryParam";
+const queryStringPrefix = "?";
+
+const filterAndJoin = (strings: string[]):string => strings.filter(s => !!s).join("&")
+
+export function serializeQueryParams(queryParams: any, globals?: any): string {
+ const queryStringParts: string[] = [];
+ if (!queryParams) return filterAndJoin(queryStringParts);
+
+ const fieldNames: string[] =
+ "__props__" in queryParams
+ ? queryParams["__props__"].map((prop: any) => prop.key)
+ : Object.getOwnPropertyNames(queryParams);
+
+ fieldNames.forEach((fname) => {
+ const requestBodyAnn: string = Reflect.getMetadata(
+ requestMetadataKey,
+ queryParams,
+ fname
+ );
+
+ if (requestBodyAnn) return;
+
+ const qpAnn: string = Reflect.getMetadata(
+ qpMetadataKey,
+ queryParams,
+ fname
+ );
+
+ if (!qpAnn) return {serialize: () => ""};
+
+ const qpDecorator: ParamDecorator = parseParamDecorator(
+ qpAnn,
+ fname,
+ "form",
+ true
+ );
+
+ if (!qpDecorator) return;
+
+ let value = queryParams[fname];
+ value = populateFromGlobals(value, fname, "queryParam", globals);
+
+ if (qpDecorator.Serialization === "json")
+ queryStringParts.push(jsonSerializer({[qpDecorator.ParamName]: value}));
+ else {
+ switch (qpDecorator.Style) {
+ case "deepObject":
+ queryStringParts.push(
+ deepObjectSerializer({[qpDecorator.ParamName]: value})
+ );
+ return;
+ case "form":
+ if (!qpDecorator.Explode)
+ queryStringParts.push(
+ noExplodeSerializer({[qpDecorator.ParamName]: value})
+ );
+ else
+ queryStringParts.push(
+ formSerializerExplode({[qpDecorator.ParamName]: value})
+ );
+ return;
+ case "pipeDelimited":
+ if (!qpDecorator.Explode) {
+ queryStringParts.push(
+ noExplodeSerializer({[qpDecorator.ParamName]: value}, "|")
+ );
+ } else {
+ queryStringParts.push(
+ formSerializerExplode({[qpDecorator.ParamName]: value})
+ );
+ }
+ return;
+ default:
+ queryStringParts.push(
+ formSerializerExplode({[qpDecorator.ParamName]: value})
+ );
+ }
+ }
+ });
+ return queryStringPrefix + filterAndJoin(queryStringParts);
+}
+
+// TODO: Add support for disabling percent encoding for reserved characters
+function jsonSerializer(params: Record): string {
+ const query: string[] = [];
+
+ Object.entries(Object.assign({}, params)).forEach(([key, value]) => {
+ query.push(`${key}=${encodeURIComponent(JSON.stringify(value))}`);
+ });
+ return filterAndJoin(query);
+}
+
+// TODO: Add support for disabling percent encoding for reserved characters
+function noExplodeSerializer(params: Record, delimiter = ","): string {
+ const query: string[] = [];
+
+ Object.entries(Object.assign({}, params)).forEach(([key, value]) => {
+ if (!shouldQueryParamSerialize(value)) return;
+ if (value !== Object(value))
+ query.push(`${key}=${encodeURIComponent(valToString(value))}`);
+ else if (Array.isArray(value)) {
+ const values: string = value.map((aValue) => aValue).join(delimiter);
+
+ query.push(`${key}=${encodeURIComponent(values)}`);
+ } else {
+ const values: string = Object.getOwnPropertyNames(value)
+ .map((paramKey: string) => {
+ const qpAnn: string = Reflect.getMetadata(
+ qpMetadataKey,
+ value,
+ paramKey
+ );
+
+ const qpDecorator: ParamDecorator = parseParamDecorator(
+ qpAnn,
+ paramKey,
+ "form",
+ true
+ );
+
+ if (qpDecorator == null) return;
+
+ return `${paramKey}${delimiter}${valToString(value[paramKey])}`;
+ })
+ .join(delimiter);
+ query.push(`${key}=${encodeURIComponent(values)}`);
+ }
+ });
+ return filterAndJoin(query);
+}
+
+// TODO: Add support for disabling percent encoding for reserved characters
+function formSerializerExplode(params: Record): string {
+ const query: string[] = [];
+
+ Object.entries(Object.assign({}, params)).forEach(([key, value]) => {
+ if (!shouldQueryParamSerialize(value)) return;
+ if (value !== Object(value))
+ query.push(`${key}=${encodeURIComponent(value)}`);
+ else if (Array.isArray(value)) {
+ query.push(
+ value
+ .map((aValue) => `${key}=${encodeURIComponent(valToString(aValue))}`)
+ .join("&")
+ );
+ } else
+ query.push(
+ Object.getOwnPropertyNames(value)
+ .map((paramKey: string) => {
+ const qpAnn: string = Reflect.getMetadata(
+ qpMetadataKey,
+ value,
+ paramKey
+ );
+
+ const qpDecorator: ParamDecorator = parseParamDecorator(
+ qpAnn,
+ paramKey,
+ "form",
+ true
+ );
+
+ if (qpDecorator == null) return;
+
+ return `${paramKey}=${encodeURIComponent(
+ valToString(value[paramKey])
+ )}`;
+ })
+ .join("&")
+ );
+ });
+ return filterAndJoin(query);
+}
+
+// TODO: Add support for disabling percent encoding for reserved characters
+function deepObjectSerializer(params: Record): string {
+ const query: string[] = [];
+
+ Object.entries(Object.assign({}, params)).forEach(([key, value]) => {
+ if (!shouldQueryParamSerialize(value)) return;
+ if (value !== Object(value))
+ query.push(`${key}=${encodeURIComponent(value)}`);
+ else if (Array.isArray(value)) {
+ query.push(
+ value
+ .map(
+ ([objKey, objValue]) =>
+ `${key}[${objKey}]=${encodeURIComponent(valToString(objValue))}`
+ )
+ .join("&")
+ );
+ } else
+ query.push(
+ Object.getOwnPropertyNames(value)
+ .map((paramKey: string) => {
+ const qpAnn: string = Reflect.getMetadata(
+ qpMetadataKey,
+ value,
+ paramKey
+ );
+
+ const qpDecorator: ParamDecorator = parseParamDecorator(
+ qpAnn,
+ paramKey,
+ "form",
+ true
+ );
+
+ if (qpDecorator == null) return;
+
+ // For deep objects, arr is wrapped inside object
+ if (Array.isArray(value[paramKey]))
+ return value[paramKey]
+ .map(
+ (arrValue: any) =>
+ `${key}[${paramKey}]=${encodeURIComponent(
+ valToString(arrValue)
+ )}`
+ )
+ .join("&");
+ return `${key}[${paramKey}]=${encodeURIComponent(
+ valToString(value[paramKey])
+ )}`;
+ })
+ .join("&")
+ );
+ });
+ return filterAndJoin(query);
+}
diff --git a/speakeasy/src/internal/utils/requestbody.ts b/speakeasy/src/internal/utils/requestbody.ts
new file mode 100755
index 0000000..f7a1f55
--- /dev/null
+++ b/speakeasy/src/internal/utils/requestbody.ts
@@ -0,0 +1,383 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import {isBooleanRecord, isNumberRecord, isStringRecord, SerializationMethodToContentType, valToString,} from "./utils";
+
+import FormData from "form-data";
+import {RFCDate} from "../../sdk/types";
+import {classToPlain} from "class-transformer";
+
+export const requestMetadataKey = "request";
+const mpFormMetadataKey = "multipart_form";
+
+export function serializeRequestBody(
+ request: any,
+ requestFieldName: string,
+ serializationMethod: string
+): [Record, any] {
+ if (
+ request !== Object(request) ||
+ !request.hasOwnProperty(requestFieldName)
+ ) {
+ return serializeContentType(
+ SerializationMethodToContentType[serializationMethod],
+ request
+ );
+ }
+
+ const requestBodyAnn: string = Reflect.getMetadata(
+ requestMetadataKey,
+ request,
+ requestFieldName
+ );
+ if (!requestBodyAnn) {
+ throw new Error("invalid request type");
+ }
+
+ const requestDecorator: RequestDecorator =
+ parseRequestDecorator(requestBodyAnn);
+ return serializeContentType(
+ requestDecorator.MediaType,
+ request[requestFieldName]
+ );
+}
+
+const serializeContentType = (
+ contentType: string,
+ reqBody: any
+): [Record, any] => {
+ let [requestHeaders, requestBody]: [Record, any] = [{}, {}];
+
+ switch (contentType) {
+ case "multipart/form-data":
+ requestBody = encodeMultipartFormData(reqBody);
+ break;
+
+ case "multipart/mixed":
+ requestBody = encodeMultipartFormData(reqBody);
+ requestHeaders = (requestBody as FormData).getHeaders();
+ break;
+
+ case "application/x-www-form-urlencoded":
+ [requestHeaders, requestBody] = [
+ {"Content-Type": `${contentType}`},
+ encodeFormUrlEncodeData(reqBody),
+ ];
+ break;
+
+ case "application/json":
+ [requestHeaders, requestBody] = [
+ {"Content-Type": `${contentType}`},
+ classToPlain(reqBody, {exposeUnsetFields: false}),
+ ];
+ break;
+ case "text/json":
+ [requestHeaders, requestBody] = [
+ {"Content-Type": `${contentType}`},
+ reqBody,
+ ];
+ break;
+
+ default: {
+ requestBody = reqBody;
+ const requestBodyType: string = typeof requestBody;
+ if (
+ requestBodyType === "string" ||
+ requestBody instanceof String ||
+ requestBody instanceof Uint8Array
+ )
+ requestHeaders = {"Content-Type": `${contentType}`};
+ else
+ throw new Error(
+ `invalid request body type ${requestBodyType} for mediaType ${contentType}`
+ );
+ }
+ }
+ return [requestHeaders, requestBody];
+};
+
+const encodeFormUrlEncodeData = (data: any): FormData => {
+ const formData: FormData = new FormData();
+ const fieldNames: string[] = Object.getOwnPropertyNames(data);
+
+ if (isNumberRecord(data) || isBooleanRecord(data) || isStringRecord(data)) {
+ fieldNames.forEach((fname) => {
+ formData.append(fname, String(data[fname]));
+ });
+ } else {
+ fieldNames.forEach((fname) => {
+ const formAnn: string = Reflect.getMetadata("form", data, fname);
+ if (formAnn === null) {
+ return;
+ }
+ const formDecorator: FormDecorator = parseFormDecorator(formAnn);
+
+ if (formDecorator.JSON) {
+ formData.append(
+ formDecorator.Name ?? fname,
+ JSON.stringify(data[fname])
+ );
+ return;
+ }
+
+ if (formDecorator.Style === "form") {
+ let parsed: Record;
+ if (formDecorator.Explode === true) {
+ parsed = formExplode(fname, data[fname]);
+ } else {
+ parsed = formNotExplode(fname, data[fname]);
+ }
+
+ Object.keys(parsed).forEach((key) => {
+ parsed[key].forEach((v) => formData.append(key, v));
+ });
+ return;
+ }
+ });
+ }
+ return formData;
+};
+
+const formExplode = (fname: string, data: any): Record => {
+ const exploded: Record = {};
+
+ if (Array.isArray(data)) {
+ data.forEach((value) => {
+ if (!exploded[fname]) {
+ exploded[fname] = [];
+ }
+ exploded[fname].push(value);
+ });
+ } else if (typeof data === "object") {
+ if (data instanceof Date || data instanceof RFCDate) {
+ if (!exploded[fname]) {
+ exploded[fname] = [];
+ }
+ exploded[fname].push(valToString(data));
+ } else {
+ Object.keys(data).forEach((key) => {
+ if (!exploded[key]) {
+ exploded[key] = [];
+ }
+ exploded[key].push(data[key]);
+ });
+ }
+ } else {
+ if (!exploded[fname]) {
+ exploded[fname] = [];
+ }
+ exploded[fname].push(valToString(data));
+ }
+ return exploded;
+};
+
+const formNotExplode = (fname: string, data: any): Record => {
+ const notExploded: Record = {};
+
+ if (Array.isArray(data)) {
+ if (!notExploded[fname]) {
+ notExploded[fname] = [];
+ }
+ notExploded[fname].push(data.map((item) => item.toString()).join(","));
+ } else if (typeof data === "object") {
+ if (data instanceof Date || data instanceof RFCDate) {
+ if (!notExploded[fname]) {
+ notExploded[fname] = [];
+ }
+ notExploded[fname].push(valToString(data));
+ } else {
+ Object.keys(data).forEach((key) => {
+ if (!notExploded[key]) {
+ notExploded[key] = [];
+ }
+ notExploded[fname].push(`${key}=${data[key]}`);
+ });
+ }
+ } else {
+ if (!notExploded[fname]) {
+ notExploded[fname] = [];
+ }
+ notExploded[fname].push(valToString(data));
+ }
+ return notExploded;
+};
+
+function parseFormDecorator(formAnn: string): FormDecorator {
+ const formDecorator: FormDecorator = new FormDecorator(
+ "",
+ "form",
+ false,
+ false
+ );
+ formAnn.split(";").forEach((formAnnPart) => {
+ const [formKey, formVal]: string[] = formAnnPart.split("=");
+ switch (formKey) {
+ case "name":
+ formDecorator.Name = formVal;
+ break;
+ case "style":
+ formDecorator.Style = formVal;
+ break;
+ case "explode":
+ formDecorator.Explode = formVal === "true";
+ break;
+ case "json":
+ formDecorator.JSON = formVal === "true";
+ break;
+ }
+ });
+
+ return formDecorator;
+}
+
+class FormDecorator {
+ Name?: string;
+ Style?: string;
+ Explode?: boolean;
+ JSON?: boolean;
+
+ constructor(
+ Name?: string,
+ Style?: string,
+ Explode?: boolean,
+ JSON?: boolean
+ ) {
+ this.Name = Name;
+ this.Style = Style;
+ this.Explode = Explode;
+ this.JSON = JSON;
+ }
+}
+
+function encodeMultipartFormData(form: any): FormData {
+ const formData: FormData = new FormData();
+
+ const fieldNames: string[] = Object.getOwnPropertyNames(form);
+ fieldNames.forEach((fname) => {
+ const mpFormAnn: string = Reflect.getMetadata(
+ mpFormMetadataKey,
+ form,
+ fname
+ );
+
+ if (mpFormAnn == null) return;
+
+ const mpFormDecorator: MultipartFormDecorator =
+ parseMultipartFormDecorator(mpFormAnn);
+
+ if (mpFormDecorator.File)
+ return encodeMultipartFormDataFile(formData, form[fname]);
+ else if (mpFormDecorator.JSON) {
+ formData.append(mpFormDecorator.Name, JSON.stringify(form[fname]));
+ } else {
+ if (Array.isArray(form[fname])) {
+ form[fname].forEach((val: any) => {
+ formData.append(mpFormDecorator.Name + "[]", valToString(val));
+ });
+ } else {
+ formData.append(mpFormDecorator.Name, valToString(form[fname]));
+ }
+ }
+ });
+ return formData;
+}
+
+function encodeMultipartFormDataFile(formData: FormData, file: any): FormData {
+ if (typeof file !== "object" || Array.isArray(file) || file == null) {
+ throw new Error("invalid type for multipart/form-data file");
+ }
+ let content: any = null;
+ let fileName = "";
+ let mpFormDecoratorName = "";
+
+ const fieldNames: string[] = Object.getOwnPropertyNames(file);
+ fieldNames.forEach((fname) => {
+ const mpFormAnn: string = Reflect.getMetadata(
+ mpFormMetadataKey,
+ file,
+ fname
+ );
+
+ if (mpFormAnn == null) return;
+
+ const mpFormDecorator: MultipartFormDecorator =
+ parseMultipartFormDecorator(mpFormAnn);
+
+ if (!mpFormDecorator.Content && mpFormDecorator.Name == "") return;
+ if (mpFormDecorator.Content) content = file[fname];
+ else {
+ mpFormDecoratorName = mpFormDecorator.Name;
+ fileName = file[fname];
+ }
+ });
+
+ if (mpFormDecoratorName === "" || fileName === "" || content == null) {
+ throw new Error("invalid multipart/form-data file");
+ }
+ formData.append(mpFormDecoratorName, Buffer.from(content), fileName);
+ return formData;
+}
+
+function parseMultipartFormDecorator(
+ mpFormAnn: string
+): MultipartFormDecorator {
+ // example "name=file"
+ const mpFormDecorator: MultipartFormDecorator = new MultipartFormDecorator(
+ false,
+ false,
+ false,
+ ""
+ );
+ mpFormAnn.split(";").forEach((mpFormAnnPart) => {
+ const [mpFormKey, mpFormVal]: string[] = mpFormAnnPart.split("=");
+ switch (mpFormKey) {
+ case "file":
+ mpFormDecorator.File = mpFormVal == "true";
+ break;
+ case "content":
+ mpFormDecorator.Content = mpFormVal == "true";
+ break;
+ case "name":
+ mpFormDecorator.Name = mpFormVal;
+ break;
+ case "json":
+ mpFormDecorator.JSON = mpFormVal == "true";
+ break;
+ }
+ });
+
+ return mpFormDecorator;
+}
+
+class MultipartFormDecorator {
+ File: boolean;
+ Content: boolean;
+ JSON: boolean;
+ Name: string;
+
+ constructor(File: boolean, Content: boolean, JSON: boolean, Name: string) {
+ this.File = File;
+ this.Content = Content;
+ this.JSON = JSON;
+ this.Name = Name;
+ }
+}
+
+function parseRequestDecorator(requestAnn: string): RequestDecorator {
+ // example "media_type=multipart/form-data"
+ const requestDecorator: RequestDecorator = new RequestDecorator(
+ "application/octet-stream"
+ );
+ const [mediaTypeKey, mediaTypeVal]: string[] = requestAnn.split("=");
+ if (mediaTypeKey === "media_type") requestDecorator.MediaType = mediaTypeVal;
+ return requestDecorator;
+}
+
+class RequestDecorator {
+ MediaType: string;
+
+ constructor(MediaType: string) {
+ this.MediaType = MediaType;
+ }
+}
diff --git a/speakeasy/src/internal/utils/retries.ts b/speakeasy/src/internal/utils/retries.ts
new file mode 100755
index 0000000..8fea21d
--- /dev/null
+++ b/speakeasy/src/internal/utils/retries.ts
@@ -0,0 +1,181 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { AxiosError, AxiosResponse } from "axios";
+
+export class BackoffStrategy {
+ initialInterval: number;
+ maxInterval: number;
+ exponent: number;
+ maxElapsedTime: number;
+
+ constructor(
+ initialInterval: number,
+ maxInterval: number,
+ exponent: number,
+ maxElapsedTime: number
+ ) {
+ this.initialInterval = initialInterval;
+ this.maxInterval = maxInterval;
+ this.exponent = exponent;
+ this.maxElapsedTime = maxElapsedTime;
+ }
+}
+
+export class RetryConfig {
+ strategy: "backoff" | "none";
+ backoff?: BackoffStrategy;
+ retryConnectionErrors: boolean;
+
+ constructor(
+ strategy: "backoff" | "none",
+ backoff?: BackoffStrategy,
+ retryConnectionErrors = true
+ ) {
+ this.strategy = strategy;
+ this.backoff = backoff;
+ this.retryConnectionErrors = retryConnectionErrors;
+ }
+}
+
+export class Retries {
+ config: RetryConfig;
+ statusCodes: string[];
+
+ constructor(config: RetryConfig, statusCodes: string[]) {
+ this.config = config;
+ this.statusCodes = statusCodes;
+ }
+}
+
+class PermanentError extends Error {
+ inner: unknown;
+
+ constructor(inner: unknown) {
+ super("Permanent error");
+ this.inner = inner;
+
+ Object.setPrototypeOf(this, PermanentError.prototype);
+ }
+}
+
+class TemporaryError extends Error {
+ res: AxiosResponse;
+
+ constructor(res: AxiosResponse) {
+ super("Temporary error");
+ this.res = res;
+
+ Object.setPrototypeOf(this, TemporaryError.prototype);
+ }
+}
+
+export async function Retry(
+ fn: () => Promise>,
+ retries: Retries
+): Promise> {
+ switch (retries.config.strategy) {
+ case "backoff":
+ return retryBackoff(
+ async () => {
+ try {
+ const res = await fn();
+ if (isRetryableResponse(res, retries.statusCodes)) {
+ throw new TemporaryError(res);
+ }
+
+ return res;
+ } catch (err) {
+ if (err instanceof AxiosError) {
+ if (err.response) {
+ if (isRetryableResponse(err.response, retries.statusCodes)) {
+ throw err;
+ }
+ throw new PermanentError(err);
+ } else if (err.request) {
+ throw err;
+ } else {
+ throw new PermanentError(err);
+ }
+ } else if (err instanceof TemporaryError) {
+ throw err;
+ }
+ throw new PermanentError(err);
+ }
+ },
+ retries.config.backoff?.initialInterval ?? 500,
+ retries.config.backoff?.maxInterval ?? 60000,
+ retries.config.backoff?.exponent ?? 1.5,
+ retries.config.backoff?.maxElapsedTime ?? 3600000
+ );
+ default:
+ return await fn();
+ }
+}
+
+function isRetryableResponse(
+ res: AxiosResponse,
+ statusCodes: string[]
+): boolean {
+ for (const code of statusCodes) {
+ if (code.toUpperCase().includes("X")) {
+ const codeRange = parseInt(code[0]);
+ if (isNaN(codeRange)) {
+ throw new Error("Invalid status code range");
+ }
+
+ const s = res.status / 100;
+
+ if (s >= codeRange && s < codeRange + 1) {
+ return true;
+ }
+ } else if (res.status == parseInt(code)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+async function retryBackoff(
+ fn: () => Promise>,
+ initialInterval: number,
+ maxInterval: number,
+ exponent: number,
+ maxElapsedTime: number
+): Promise> {
+ const start = Date.now();
+ let x = 0;
+
+ while (true) { /* eslint-disable-line no-constant-condition */
+ try {
+ return await fn();
+ } catch (err) {
+ if (err instanceof PermanentError) {
+ throw err.inner;
+ }
+
+ const now = Date.now();
+ if (now - start > maxElapsedTime) {
+ if (err instanceof TemporaryError) {
+ return err.res;
+ }
+
+ throw err;
+ }
+
+ const d = Math.min(
+ initialInterval * Math.pow(x, exponent) + Math.random() * 1000,
+ maxInterval
+ );
+
+ await delay(d);
+ x++;
+ }
+ }
+}
+
+async function delay(delay: number): Promise {
+ return new Promise((resolve) => setTimeout(resolve, delay));
+}
diff --git a/speakeasy/src/internal/utils/security.ts b/speakeasy/src/internal/utils/security.ts
new file mode 100755
index 0000000..8f183b4
--- /dev/null
+++ b/speakeasy/src/internal/utils/security.ts
@@ -0,0 +1,251 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+const securityMetadataKey = "security";
+
+export type SecurityProperties = {
+ params: Record,
+ headers: Record,
+}
+
+export function parseSecurityProperties(
+ security: any
+): SecurityProperties {
+ return parseSecurityClass(security);
+}
+
+function parseSecurityDecorator(securityAnn: string): SecurityDecorator {
+ // scheme=true;type=apiKey;subtype=header"
+ let option = false;
+ let scheme = false;
+ let name = "";
+ let securityType = "";
+ let securitySubType = "";
+
+ securityAnn.split(";").forEach((securityAnnPart) => {
+ const [sKey, sVal]: string[] = securityAnnPart.split("=");
+ switch (sKey) {
+ case "name":
+ name = sVal;
+ break;
+ case "type":
+ securityType = sVal;
+ break;
+ case "subtype":
+ securitySubType = sVal;
+ break;
+ case "option":
+ option = sVal == "true";
+ break;
+ case "scheme":
+ scheme = sVal == "true";
+ }
+ });
+
+ return new SecurityDecorator(
+ name,
+ securityType,
+ option,
+ scheme,
+ securitySubType
+ );
+}
+
+function parseSecurityClass(
+ security: any
+): SecurityProperties {
+ const fieldNames: string[] = Object.getOwnPropertyNames(security);
+ const properties: SecurityProperties = {
+ params: {},
+ headers: {},
+ }
+ fieldNames.forEach((fname) => {
+ const securityAnn: string = Reflect.getMetadata(
+ securityMetadataKey,
+ security,
+ fname
+ );
+ if (securityAnn == null) return;
+ const securityDecorator: SecurityDecorator =
+ parseSecurityDecorator(securityAnn);
+ if (securityDecorator == null) return;
+
+ const value = security[fname];
+
+ if (securityDecorator.Option) {
+ return parseSecurityOption(properties, value);
+ } else if (securityDecorator.Scheme) {
+ if (securityDecorator.SubType === "basic" && value !== Object(value)) {
+ return parseSecurityScheme(properties, securityDecorator, security);
+ } else {
+ return parseSecurityScheme(properties, securityDecorator, value);
+ }
+ }
+ });
+
+ return properties;
+}
+
+function parseSecurityOption(
+ properties: SecurityProperties,
+ optionType: any
+): void {
+ const fieldNames: string[] = Object.getOwnPropertyNames(optionType);
+ fieldNames.forEach((fname) => {
+ const securityAnn: string = Reflect.getMetadata(
+ securityMetadataKey,
+ optionType,
+ fname
+ );
+ if (securityAnn == null) return;
+ const securityDecorator: SecurityDecorator =
+ parseSecurityDecorator(securityAnn);
+ if (securityDecorator == null || !securityDecorator.Scheme) return;
+ return parseSecurityScheme(properties, securityDecorator, optionType[fname]);
+ });
+}
+
+function parseSecurityScheme(
+ properties: SecurityProperties,
+ schemeDecorator: SecurityDecorator,
+ scheme: any
+): void {
+ if (scheme === Object(scheme)) {
+ if (
+ schemeDecorator.Type === "http" &&
+ schemeDecorator.SubType === "basic"
+ ) {
+ return parseBasicAuthScheme(properties, scheme);
+ }
+
+ const fieldNames: string[] = Object.getOwnPropertyNames(scheme);
+ fieldNames.forEach((fname) => {
+ const securityAnn: string = Reflect.getMetadata(
+ securityMetadataKey,
+ scheme,
+ fname
+ );
+ if (securityAnn == null) return;
+ const securityDecorator: SecurityDecorator =
+ parseSecurityDecorator(securityAnn);
+ if (securityDecorator == null || securityDecorator.Name === "") return;
+
+ return parseSecuritySchemeValue(
+ properties,
+ schemeDecorator,
+ securityDecorator,
+ scheme[fname]
+ );
+ });
+ } else {
+ return parseSecuritySchemeValue(
+ properties,
+ schemeDecorator,
+ schemeDecorator,
+ scheme
+ );
+ }
+}
+
+function parseSecuritySchemeValue(
+ properties: SecurityProperties,
+ schemeDecorator: SecurityDecorator,
+ securityDecorator: SecurityDecorator,
+ value: any
+): void {
+ switch (schemeDecorator.Type) {
+ case "apiKey":
+ switch (schemeDecorator.SubType) {
+ case "header":
+ properties.headers[securityDecorator.Name] = value;
+ break;
+ case "query":
+ properties.params[securityDecorator.Name] = value;
+ break;
+ case "cookie": {
+ const securityDecoratorName: string = securityDecorator.Name;
+ const val: string = value;
+ properties.headers[
+ "Cookie"
+ ] = `${securityDecoratorName}=${val}`;
+ break;
+ }
+ default:
+ throw new Error("not supported");
+ }
+ break;
+ case "openIdConnect":
+ properties.headers[securityDecorator.Name] = value;
+ break;
+ case "oauth2":
+ properties.headers[securityDecorator.Name] = value;
+ break;
+ case "http":
+ switch (schemeDecorator.SubType) {
+ case "basic":
+ break;
+ case "bearer":
+ properties.headers[securityDecorator.Name] = value.toLowerCase().startsWith("bearer ") ? value : `Bearer ${value}`;
+ break;
+ default:
+ throw new Error("not supported");
+ }
+ break;
+ default:
+ throw new Error("not supported");
+ }
+}
+
+function parseBasicAuthScheme(
+ properties: SecurityProperties,
+ scheme: any
+): void {
+ let username,
+ password = "";
+
+ const fieldNames: string[] = Object.getOwnPropertyNames(scheme);
+ fieldNames.forEach((fname) => {
+ const securityAnn: string = Reflect.getMetadata(
+ securityMetadataKey,
+ scheme,
+ fname
+ );
+ if (securityAnn == null) return;
+ const securityDecorator: SecurityDecorator =
+ parseSecurityDecorator(securityAnn);
+ if (securityDecorator == null || securityDecorator.Name === "") return;
+
+ switch (securityDecorator.Name) {
+ case "username":
+ username = scheme[fname];
+ break;
+ case "password":
+ password = scheme[fname];
+ break;
+ }
+ });
+
+ properties.headers["Authorization"] = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;
+}
+
+class SecurityDecorator {
+ Name: string;
+ Type: string;
+ Option: boolean;
+ Scheme: boolean;
+ SubType: string;
+ constructor(
+ Name: string,
+ Type: string,
+ Option: boolean,
+ Scheme: boolean,
+ SubType: string
+ ) {
+ this.Name = Name;
+ this.Type = Type;
+ this.Option = Option;
+ this.Scheme = Scheme;
+ this.SubType = SubType;
+ }
+}
diff --git a/speakeasy/src/internal/utils/utils.ts b/speakeasy/src/internal/utils/utils.ts
new file mode 100755
index 0000000..03daf88
--- /dev/null
+++ b/speakeasy/src/internal/utils/utils.ts
@@ -0,0 +1,404 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import "reflect-metadata";
+
+import {getSimplePathParams, ppMetadataKey} from "./pathparams";
+
+import {plainToInstance} from "class-transformer";
+import {RFCDate} from "../../sdk/types";
+import {requestMetadataKey} from "./requestbody";
+
+export const SerializationMethodToContentType: Record = {
+ json: "application/json",
+ form: "application/x-www-form-urlencoded",
+ multipart: "multipart/form-data",
+ raw: "application/octet-stream",
+ string: "text/plain",
+};
+
+export interface PropInfo {
+ key: string | symbol;
+ type: any;
+ elemType: any;
+ elemDepth: number;
+}
+
+function isSpeakeasyBase(type: any): boolean {
+ return type && Object.getPrototypeOf(type)?.name == SpeakeasyBase.name;
+}
+
+function handleArray(value: any, elemType: any, elemDepth: number): any {
+ if (!Array.isArray(value)) {
+ return value;
+ }
+
+ if (elemDepth == 1) {
+ return value.map((v: any) => new elemType(v));
+ } else {
+ return value.map((v: any) => {
+ if (Array.isArray(v)) {
+ return handleArray(v, elemType, elemDepth - 1);
+ } else if (typeof v == "object") {
+ return handleObject(v, elemType, elemDepth - 1);
+ } else {
+ return v;
+ }
+ });
+ }
+}
+
+function handleObject(value: any, elemType: any, elemDepth: number): any {
+ if (typeof value != "object") {
+ return value;
+ }
+
+ if (elemDepth == 1) {
+ return Object.keys(value).reduce((acc: any, key: string) => {
+ acc[key] = new elemType(value[key]);
+ return acc;
+ }, {});
+ } else {
+ return Object.keys(value).reduce((acc: any, key: string) => {
+ const v = value[key];
+ if (Array.isArray(v)) {
+ acc[key] = handleArray(v, elemType, elemDepth - 1);
+ } else if (typeof v == "object") {
+ acc[key] = handleObject(v, elemType, elemDepth - 1);
+ } else {
+ acc[key] = v;
+ }
+ return acc;
+ }, {});
+ }
+}
+
+export class SpeakeasyBase {
+ constructor(payload?: Record) {
+ const props: PropInfo[] = (this as any)["__props__"];
+ if (props) {
+ for (const prop of props) {
+ if (payload && payload.hasOwnProperty(prop.key)) {
+ const value = payload[prop.key];
+ if (isSpeakeasyBase(prop.type) && value != null) {
+ (this as any)[prop.key] = new prop.type(value);
+ } else if (
+ prop.type.name == "Array" &&
+ isSpeakeasyBase(prop.elemType)
+ ) {
+ (this as any)[prop.key] = handleArray(
+ value,
+ prop.elemType,
+ prop.elemDepth
+ );
+ } else if (
+ prop.type.name == "Object" &&
+ isSpeakeasyBase(prop.elemType)
+ ) {
+ (this as any)[prop.key] = handleObject(
+ value,
+ prop.elemType,
+ prop.elemDepth
+ );
+ } else if (prop.type.name == "RFCDate") {
+ if (value instanceof Date) {
+ (this as any)[prop.key] = new RFCDate(value);
+ } else {
+ (this as any)[prop.key] = value;
+ }
+ } else {
+ (this as any)[prop.key] = value;
+ }
+ }
+ }
+ }
+ }
+}
+
+export class ParamDecorator {
+ Style: string;
+ Explode: boolean;
+ ParamName: string;
+ Serialization?: string;
+ constructor(
+ Style: string,
+ Explode: boolean,
+ ParamName: string,
+ Serialization?: string
+ ) {
+ this.Style = Style;
+ this.Explode = Explode;
+ this.ParamName = ParamName;
+ this.Serialization = Serialization;
+ }
+}
+
+export function SpeakeasyMetadata<
+ T extends SpeakeasyBase = Record
+>(params?: {
+ data?: string;
+ elemType?: { new (): T };
+ elemDepth?: number;
+}): PropertyDecorator {
+ return (target, propertyKey) => {
+ if (params?.data) {
+ const annsArr = params.data.split(", ");
+
+ for (let i = 0; i < annsArr.length; i += 2) {
+ Reflect.defineMetadata(annsArr[i], annsArr[i + 1], target, propertyKey);
+ }
+ }
+
+ let props: PropInfo[];
+ if (target.hasOwnProperty("__props__")) {
+ props = (target as any)["__props__"];
+ } else {
+ props = (target as any)["__props__"] = [];
+ }
+
+ const prop = {
+ key: propertyKey,
+ type: Reflect.getMetadata("design:type", target, propertyKey),
+ } as PropInfo;
+
+ if (params?.elemType) {
+ prop.elemType = params.elemType;
+ prop.elemDepth = params.elemDepth || 1;
+ }
+
+ props.push(prop);
+ };
+}
+
+export function templateUrl(
+ stringWithParams: string,
+ params: Record
+): string {
+ let res: string = stringWithParams;
+ if(params) {
+ Object.entries(params).forEach(([key, value]) => {
+ const match: string = "{" + key + "}";
+ res = res.replaceAll(match, value);
+ });
+ }
+ return res;
+}
+
+export function generateURL(
+ serverURL: string,
+ path: string,
+ pathParams: any,
+ globals?: any
+): string {
+ const url: string = serverURL.replace(/\/$/, "") + path;
+ const parsedParameters: Record = {};
+
+ const fieldNames: string[] =
+ "__props__" in pathParams
+ ? pathParams["__props__"].map((prop: any) => prop.key)
+ : Object.getOwnPropertyNames(pathParams);
+ fieldNames.forEach((fname) => {
+ const requestBodyAnn: string = Reflect.getMetadata(
+ requestMetadataKey,
+ pathParams,
+ fname
+ );
+
+ if (requestBodyAnn) return;
+
+ const ppAnn: string = Reflect.getMetadata(ppMetadataKey, pathParams, fname);
+
+ if (ppAnn == null) return;
+
+ const ppDecorator: ParamDecorator = parseParamDecorator(
+ ppAnn,
+ fname,
+ "simple",
+ false
+ );
+ if (ppDecorator == null) return;
+
+ let value = pathParams[fname];
+ value = populateFromGlobals(value, fname, "pathParam", globals);
+
+ if (ppDecorator.Serialization) {
+ switch (ppDecorator.Serialization) {
+ case "json":
+ parsedParameters[ppDecorator.ParamName] = encodeURIComponent(
+ JSON.stringify(value)
+ );
+ break;
+ }
+ } else {
+ switch (ppDecorator.Style) {
+ case "simple": {
+ const simpleParams: Map = getSimplePathParams(
+ ppDecorator.ParamName,
+ value,
+ ppDecorator.Explode
+ );
+ simpleParams.forEach((value, key) => {
+ parsedParameters[key] = value;
+ });
+ }
+ }
+ }
+ });
+ return templateUrl(url, parsedParameters);
+}
+
+export function parseParamDecorator(
+ ann: string,
+ fName: string,
+ defaultStyle: string,
+ defaultExplode: boolean
+): ParamDecorator {
+ // style=simple;explode=false;name=apiID
+ const decorator: ParamDecorator = new ParamDecorator(
+ defaultStyle,
+ defaultExplode,
+ fName.toLowerCase()
+ );
+
+ if (ann == null) return decorator;
+ ann.split(";").forEach((annPart) => {
+ const [paramKey, paramVal]: string[] = annPart.split("=");
+ switch (paramKey) {
+ case "style":
+ decorator.Style = paramVal;
+ break;
+ case "explode":
+ decorator.Explode = paramVal == "true";
+ break;
+ case "name":
+ decorator.ParamName = paramVal;
+ break;
+ case "serialization":
+ decorator.Serialization = paramVal;
+ break;
+ }
+ });
+ return decorator;
+}
+
+export function isStringRecord(obj: any): obj is Record {
+ if (typeof obj !== "object") return false;
+
+ if (Object.getOwnPropertySymbols(obj).length > 0) return false;
+
+ return Object.getOwnPropertyNames(obj).every(
+ (prop) => typeof obj[prop] === "string"
+ );
+}
+
+export function isNumberRecord(obj: any): obj is Record {
+ if (typeof obj !== "object") return false;
+
+ if (Object.getOwnPropertySymbols(obj).length > 0) return false;
+
+ return Object.getOwnPropertyNames(obj).every(
+ (prop) => typeof obj[prop] === "number"
+ );
+}
+
+export function isBooleanRecord(obj: any): obj is Record {
+ if (typeof obj !== "object") return false;
+
+ if (Object.getOwnPropertySymbols(obj).length > 0) return false;
+
+ return Object.getOwnPropertyNames(obj).every(
+ (prop) => typeof obj[prop] === "boolean"
+ );
+}
+
+export function isEmpty(value: any): boolean {
+ // check for undefined, null, and NaN
+ let res = false;
+ if (typeof value === "number") res = Number.isNaN(value);
+ else if (typeof value === "string") res = value === "";
+ return res || value == null;
+}
+
+export function objectToClass(value: T, klass?: any, elemDepth = 0): any {
+ if (value !== Object(value)) {
+ return value;
+ }
+
+ if (elemDepth === 0 && klass != null) {
+ return plainToInstance(klass, value, {
+ excludeExtraneousValues: true,
+ exposeUnsetFields: false,
+ }) as typeof klass;
+ }
+
+ if (Array.isArray(value)) {
+ return value.map((v) => objectToClass(v, klass, elemDepth - 1));
+ }
+
+ if (typeof value === "object" && value != null) {
+ const copiedRecord: Record = {};
+ for (const key in value) {
+ copiedRecord[key] = objectToClass(value[key], klass, elemDepth - 1);
+ }
+ return copiedRecord;
+ }
+
+ return plainToInstance(klass, value, {
+ excludeExtraneousValues: true,
+ exposeUnsetFields: false,
+ }) as typeof klass;
+}
+
+export function getResFieldDepth(res: any): number {
+ const props = res["__props__"];
+ let resFieldDepth = 1;
+
+ if (props) {
+ for (const prop of props) {
+ if (res && res.hasOwnProperty(prop.key)) {
+ if (
+ (prop.type.name == "Array" || prop.type.name == "Object") &&
+ isSpeakeasyBase(prop.elemType)
+ ) {
+ if (prop.elemDepth > resFieldDepth) {
+ resFieldDepth = prop.elemDepth;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return resFieldDepth;
+}
+
+export function populateFromGlobals(
+ value: any,
+ fieldName: string,
+ paramType: string,
+ globals: any
+): any {
+ if (globals && value === undefined) {
+ if ("parameters" in globals && paramType in globals.parameters) {
+ const globalValue = globals.parameters[paramType][fieldName];
+ if (globalValue !== undefined) {
+ value = globalValue;
+ }
+ }
+ }
+
+ return value;
+}
+
+export function valToString(value: any): string {
+ if (value instanceof Date) {
+ return value.toISOString();
+ }
+
+ return value.toString();
+}
+
+export function shouldQueryParamSerialize(value: any): boolean {
+ return !(value === undefined || value === null || value === "")
+}
diff --git a/speakeasy/src/sdk/apiendpoints.ts b/speakeasy/src/sdk/apiendpoints.ts
new file mode 100755
index 0000000..66bf1ec
--- /dev/null
+++ b/speakeasy/src/sdk/apiendpoints.ts
@@ -0,0 +1,758 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for managing ApiEndpoint entities
+ */
+export enum GeneratePostmanCollectionForApiEndpointAcceptEnum {
+ applicationJson = "application/json",
+ applicationOctetStream = "application/octet-stream",
+}
+
+export class ApiEndpoints {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Delete an ApiEndpoint.
+ *
+ * @remarks
+ * Delete an ApiEndpoint. This will also delete all associated Request Logs (if using a Postgres datastore).
+ */
+ async deleteApiEndpoint(
+ req: operations.DeleteApiEndpointRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.DeleteApiEndpointRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "delete",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.DeleteApiEndpointResponse = new operations.DeleteApiEndpointResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Find an ApiEndpoint via its displayName.
+ *
+ * @remarks
+ * Find an ApiEndpoint via its displayName (set by operationId from a registered OpenAPI schema).
+ * This is useful for finding the ID of an ApiEndpoint to use in the /v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID} endpoints.
+ */
+ async findApiEndpoint(
+ req: operations.FindApiEndpointRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.FindApiEndpointRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints/find/{displayName}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.FindApiEndpointResponse = new operations.FindApiEndpointResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apiEndpoint = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.ApiEndpoint
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Generate an OpenAPI specification for a particular ApiEndpoint.
+ *
+ * @remarks
+ * This endpoint will generate a new operation in any registered OpenAPI document if the operation does not already exist in the document.
+ * Returns the original document and the newly generated document allowing a diff to be performed to see what has changed.
+ */
+ async generateOpenApiSpecForApiEndpoint(
+ req: operations.GenerateOpenApiSpecForApiEndpointRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GenerateOpenApiSpecForApiEndpointRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}/generate/openapi",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GenerateOpenApiSpecForApiEndpointResponse =
+ new operations.GenerateOpenApiSpecForApiEndpointResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.generateOpenApiSpecDiff = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.GenerateOpenApiSpecDiff
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Generate a Postman collection for a particular ApiEndpoint.
+ *
+ * @remarks
+ * Generates a postman collection that allows the endpoint to be called from postman variables produced for any path/query/header parameters included in the OpenAPI document.
+ */
+ async generatePostmanCollectionForApiEndpoint(
+ req: operations.GeneratePostmanCollectionForApiEndpointRequest,
+ config?: AxiosRequestConfig,
+ acceptHeaderOverride?: GeneratePostmanCollectionForApiEndpointAcceptEnum
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GeneratePostmanCollectionForApiEndpointRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}/generate/postman",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ if (acceptHeaderOverride !== undefined) {
+ headers["Accept"] = acceptHeaderOverride.toString();
+ } else {
+ headers["Accept"] = "application/json;q=1, application/octet-stream;q=0";
+ }
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GeneratePostmanCollectionForApiEndpointResponse =
+ new operations.GeneratePostmanCollectionForApiEndpointResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/octet-stream`)) {
+ res.postmanCollection = httpRes?.data;
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get all Api endpoints for a particular apiID.
+ */
+ async getAllApiEndpoints(
+ req: operations.GetAllApiEndpointsRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetAllApiEndpointsRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}/api_endpoints", req);
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetAllApiEndpointsResponse =
+ new operations.GetAllApiEndpointsResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apiEndpoints = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.apiEndpoints = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.ApiEndpoint,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get all ApiEndpoints for a particular apiID and versionID.
+ */
+ async getAllForVersionApiEndpoints(
+ req: operations.GetAllForVersionApiEndpointsRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetAllForVersionApiEndpointsRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetAllForVersionApiEndpointsResponse =
+ new operations.GetAllForVersionApiEndpointsResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apiEndpoints = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.apiEndpoints = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.ApiEndpoint,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get an ApiEndpoint.
+ */
+ async getApiEndpoint(
+ req: operations.GetApiEndpointRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetApiEndpointRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetApiEndpointResponse = new operations.GetApiEndpointResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apiEndpoint = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.ApiEndpoint
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Upsert an ApiEndpoint.
+ *
+ * @remarks
+ * Upsert an ApiEndpoint. If the ApiEndpoint does not exist it will be created, otherwise it will be updated.
+ */
+ async upsertApiEndpoint(
+ req: operations.UpsertApiEndpointRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.UpsertApiEndpointRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}",
+ req
+ );
+
+ let [reqBodyHeaders, reqBody]: [object, any] = [{}, null];
+
+ try {
+ [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "apiEndpointInput", "json");
+ } catch (e: unknown) {
+ if (e instanceof Error) {
+ throw new Error(`Error serializing request body, cause: ${e.message}`);
+ }
+ }
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = {
+ ...reqBodyHeaders,
+ ...config?.headers,
+ ...properties.headers,
+ };
+ if (reqBody == null) throw new Error("request body is required");
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "put",
+ headers: headers,
+ responseType: "arraybuffer",
+ data: reqBody,
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.UpsertApiEndpointResponse = new operations.UpsertApiEndpointResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apiEndpoint = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.ApiEndpoint
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/apis.ts b/speakeasy/src/sdk/apis.ts
new file mode 100755
index 0000000..51e74b2
--- /dev/null
+++ b/speakeasy/src/sdk/apis.ts
@@ -0,0 +1,572 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for managing Api entities
+ */
+export enum GeneratePostmanCollectionAcceptEnum {
+ applicationJson = "application/json",
+ applicationOctetStream = "application/octet-stream",
+}
+
+export class Apis {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Delete an Api.
+ *
+ * @remarks
+ * Delete a particular version of an Api. The will also delete all associated ApiEndpoints, Metadata, Schemas & Request Logs (if using a Postgres datastore).
+ */
+ async deleteApi(
+ req: operations.DeleteApiRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.DeleteApiRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}/version/{versionID}", req);
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "delete",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.DeleteApiResponse = new operations.DeleteApiResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Generate an OpenAPI specification for a particular Api.
+ *
+ * @remarks
+ * This endpoint will generate any missing operations in any registered OpenAPI document if the operation does not already exist in the document.
+ * Returns the original document and the newly generated document allowing a diff to be performed to see what has changed.
+ */
+ async generateOpenApiSpec(
+ req: operations.GenerateOpenApiSpecRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GenerateOpenApiSpecRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/generate/openapi",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GenerateOpenApiSpecResponse =
+ new operations.GenerateOpenApiSpecResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.generateOpenApiSpecDiff = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.GenerateOpenApiSpecDiff
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Generate a Postman collection for a particular Api.
+ *
+ * @remarks
+ * Generates a postman collection containing all endpoints for a particular API. Includes variables produced for any path/query/header parameters included in the OpenAPI document.
+ */
+ async generatePostmanCollection(
+ req: operations.GeneratePostmanCollectionRequest,
+ config?: AxiosRequestConfig,
+ acceptHeaderOverride?: GeneratePostmanCollectionAcceptEnum
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GeneratePostmanCollectionRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/generate/postman",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ if (acceptHeaderOverride !== undefined) {
+ headers["Accept"] = acceptHeaderOverride.toString();
+ } else {
+ headers["Accept"] = "application/json;q=1, application/octet-stream;q=0";
+ }
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GeneratePostmanCollectionResponse =
+ new operations.GeneratePostmanCollectionResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/octet-stream`)) {
+ res.postmanCollection = httpRes?.data;
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get all Api versions for a particular ApiEndpoint.
+ *
+ * @remarks
+ * Get all Api versions for a particular ApiEndpoint.
+ * Supports filtering the versions based on metadata attributes.
+ */
+ async getAllApiVersions(
+ req: operations.GetAllApiVersionsRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetAllApiVersionsRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}", req);
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ const queryParams: string = utils.serializeQueryParams(req);
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url + queryParams,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetAllApiVersionsResponse = new operations.GetAllApiVersionsResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apis = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.apis = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.Api,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get a list of Apis for a given workspace
+ *
+ * @remarks
+ * Get a list of all Apis and their versions for a given workspace.
+ * Supports filtering the APIs based on metadata attributes.
+ */
+ async getApis(
+ req: operations.GetApisRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetApisRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/apis";
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ const queryParams: string = utils.serializeQueryParams(req);
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url + queryParams,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetApisResponse = new operations.GetApisResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.apis = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.apis = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.Api,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Upsert an Api
+ *
+ * @remarks
+ * Upsert an Api. If the Api does not exist, it will be created.
+ * If the Api exists, it will be updated.
+ */
+ async upsertApi(
+ req: operations.UpsertApiRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.UpsertApiRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}", req);
+
+ let [reqBodyHeaders, reqBody]: [object, any] = [{}, null];
+
+ try {
+ [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "apiInput", "json");
+ } catch (e: unknown) {
+ if (e instanceof Error) {
+ throw new Error(`Error serializing request body, cause: ${e.message}`);
+ }
+ }
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = {
+ ...reqBodyHeaders,
+ ...config?.headers,
+ ...properties.headers,
+ };
+ if (reqBody == null) throw new Error("request body is required");
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "put",
+ headers: headers,
+ responseType: "arraybuffer",
+ data: reqBody,
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.UpsertApiResponse = new operations.UpsertApiResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.api = utils.objectToClass(JSON.parse(decodedRes), shared.Api);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/embeds.ts b/speakeasy/src/sdk/embeds.ts
new file mode 100755
index 0000000..99995a8
--- /dev/null
+++ b/speakeasy/src/sdk/embeds.ts
@@ -0,0 +1,271 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for managing embeds
+ */
+
+export class Embeds {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Get an embed access token for the current workspace.
+ *
+ * @remarks
+ * Returns an embed access token for the current workspace. This can be used to authenticate access to externally embedded content.
+ * Filters can be applied allowing views to be filtered to things like particular customerIds.
+ */
+ async getEmbedAccessToken(
+ req: operations.GetEmbedAccessTokenRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetEmbedAccessTokenRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/workspace/embed-access-token";
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ const queryParams: string = utils.serializeQueryParams(req);
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url + queryParams,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetEmbedAccessTokenResponse =
+ new operations.GetEmbedAccessTokenResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.embedAccessTokenResponse = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.EmbedAccessTokenResponse
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get all valid embed access tokens for the current workspace.
+ */
+ async getValidEmbedAccessTokens(
+ config?: AxiosRequestConfig
+ ): Promise {
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/workspace/embed-access-tokens/valid";
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetValidEmbedAccessTokensResponse =
+ new operations.GetValidEmbedAccessTokensResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.embedTokens = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.embedTokens = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.EmbedToken,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Revoke an embed access EmbedToken.
+ */
+ async revokeEmbedAccessToken(
+ req: operations.RevokeEmbedAccessTokenRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.RevokeEmbedAccessTokenRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/workspace/embed-access-tokens/{tokenID}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "delete",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.RevokeEmbedAccessTokenResponse =
+ new operations.RevokeEmbedAccessTokenResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/index.ts b/speakeasy/src/sdk/index.ts
new file mode 100755
index 0000000..3130314
--- /dev/null
+++ b/speakeasy/src/sdk/index.ts
@@ -0,0 +1,5 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./sdk";
diff --git a/speakeasy/src/sdk/metadata.ts b/speakeasy/src/sdk/metadata.ts
new file mode 100755
index 0000000..8859632
--- /dev/null
+++ b/speakeasy/src/sdk/metadata.ts
@@ -0,0 +1,299 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for managing Version Metadata entities
+ */
+
+export class Metadata {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Delete metadata for a particular apiID and versionID.
+ */
+ async deleteVersionMetadata(
+ req: operations.DeleteVersionMetadataRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.DeleteVersionMetadataRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/metadata/{metaKey}/{metaValue}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "delete",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.DeleteVersionMetadataResponse =
+ new operations.DeleteVersionMetadataResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get all metadata for a particular apiID and versionID.
+ */
+ async getVersionMetadata(
+ req: operations.GetVersionMetadataRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetVersionMetadataRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/metadata",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetVersionMetadataResponse =
+ new operations.GetVersionMetadataResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.versionMetadata = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.versionMetadata = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.VersionMetadata,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Insert metadata for a particular apiID and versionID.
+ */
+ async insertVersionMetadata(
+ req: operations.InsertVersionMetadataRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.InsertVersionMetadataRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/metadata",
+ req
+ );
+
+ let [reqBodyHeaders, reqBody]: [object, any] = [{}, null];
+
+ try {
+ [reqBodyHeaders, reqBody] = utils.serializeRequestBody(
+ req,
+ "versionMetadataInput",
+ "json"
+ );
+ } catch (e: unknown) {
+ if (e instanceof Error) {
+ throw new Error(`Error serializing request body, cause: ${e.message}`);
+ }
+ }
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = {
+ ...reqBodyHeaders,
+ ...config?.headers,
+ ...properties.headers,
+ };
+ if (reqBody == null) throw new Error("request body is required");
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "post",
+ headers: headers,
+ responseType: "arraybuffer",
+ data: reqBody,
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.InsertVersionMetadataResponse =
+ new operations.InsertVersionMetadataResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.versionMetadata = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.VersionMetadata
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/models/errors/index.ts b/speakeasy/src/sdk/models/errors/index.ts
new file mode 100755
index 0000000..4779e6a
--- /dev/null
+++ b/speakeasy/src/sdk/models/errors/index.ts
@@ -0,0 +1,5 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./sdkerror";
diff --git a/speakeasy/src/sdk/models/errors/sdkerror.ts b/speakeasy/src/sdk/models/errors/sdkerror.ts
new file mode 100755
index 0000000..0d69872
--- /dev/null
+++ b/speakeasy/src/sdk/models/errors/sdkerror.ts
@@ -0,0 +1,31 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { AxiosResponse } from "axios";
+
+export class SDKError extends Error {
+ statusCode: number;
+ body: string;
+ rawResponse: AxiosResponse;
+
+ constructor(
+ message: string,
+ statusCode: number,
+ body: string,
+ rawResponse: AxiosResponse
+ ) {
+ let bodyString = "";
+ if (body?.length > 0) {
+ bodyString = `\n${body}`;
+ }
+
+ super(`${message}: Status ${statusCode}${bodyString}`);
+ this.statusCode = statusCode;
+ this.body = body;
+ this.rawResponse = rawResponse;
+
+ this.name = "SDKError";
+ Object.setPrototypeOf(this, SDKError.prototype);
+ }
+}
diff --git a/speakeasy/src/sdk/models/operations/deleteapi.ts b/speakeasy/src/sdk/models/operations/deleteapi.ts
new file mode 100755
index 0000000..68b872c
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/deleteapi.ts
@@ -0,0 +1,47 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class DeleteApiRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to delete.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to delete.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class DeleteApiResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/deleteapiendpoint.ts b/speakeasy/src/sdk/models/operations/deleteapiendpoint.ts
new file mode 100755
index 0000000..c37e6a0
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/deleteapiendpoint.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class DeleteApiEndpointRequest extends SpeakeasyBase {
+ /**
+ * The ID of the ApiEndpoint to delete.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" })
+ apiEndpointID: string;
+
+ /**
+ * The ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class DeleteApiEndpointResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/deleteschema.ts b/speakeasy/src/sdk/models/operations/deleteschema.ts
new file mode 100755
index 0000000..2165337
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/deleteschema.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class DeleteSchemaRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to delete schemas for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The revision ID of the schema to delete.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=revisionID" })
+ revisionID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class DeleteSchemaResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/deleteversionmetadata.ts b/speakeasy/src/sdk/models/operations/deleteversionmetadata.ts
new file mode 100755
index 0000000..66099d6
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/deleteversionmetadata.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class DeleteVersionMetadataRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The key of the metadata to delete.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=metaKey" })
+ metaKey: string;
+
+ /**
+ * The value of the metadata to delete.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=metaValue" })
+ metaValue: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class DeleteVersionMetadataResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/downloadschema.ts b/speakeasy/src/sdk/models/operations/downloadschema.ts
new file mode 100755
index 0000000..c4ada0d
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/downloadschema.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class DownloadSchemaRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to download the schema for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class DownloadSchemaResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ schema?: Uint8Array;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/downloadschemarevision.ts b/speakeasy/src/sdk/models/operations/downloadschemarevision.ts
new file mode 100755
index 0000000..e01edb7
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/downloadschemarevision.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class DownloadSchemaRevisionRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve schemas for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The revision ID of the schema to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=revisionID" })
+ revisionID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class DownloadSchemaRevisionResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ schema?: Uint8Array;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/findapiendpoint.ts b/speakeasy/src/sdk/models/operations/findapiendpoint.ts
new file mode 100755
index 0000000..1b55405
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/findapiendpoint.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class FindApiEndpointRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The displayName of the ApiEndpoint to find (set by operationId from OpenAPI schema).
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=displayName" })
+ displayName: string;
+
+ /**
+ * The version ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class FindApiEndpointResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ apiEndpoint?: shared.ApiEndpoint;
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/generateopenapispec.ts b/speakeasy/src/sdk/models/operations/generateopenapispec.ts
new file mode 100755
index 0000000..86bd6ed
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/generateopenapispec.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GenerateOpenApiSpecRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to generate an OpenAPI specification for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to generate an OpenAPI specification for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GenerateOpenApiSpecResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ generateOpenApiSpecDiff?: shared.GenerateOpenApiSpecDiff;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/generateopenapispecforapiendpoint.ts b/speakeasy/src/sdk/models/operations/generateopenapispecforapiendpoint.ts
new file mode 100755
index 0000000..3c8dd73
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/generateopenapispecforapiendpoint.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GenerateOpenApiSpecForApiEndpointRequest extends SpeakeasyBase {
+ /**
+ * The ID of the ApiEndpoint to generate an OpenAPI specification for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" })
+ apiEndpointID: string;
+
+ /**
+ * The ID of the Api to generate an OpenAPI specification for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to generate an OpenAPI specification for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GenerateOpenApiSpecForApiEndpointResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ generateOpenApiSpecDiff?: shared.GenerateOpenApiSpecDiff;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/generatepostmancollection.ts b/speakeasy/src/sdk/models/operations/generatepostmancollection.ts
new file mode 100755
index 0000000..b37a583
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/generatepostmancollection.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GeneratePostmanCollectionRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to generate a Postman collection for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to generate a Postman collection for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GeneratePostmanCollectionResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ postmanCollection?: Uint8Array;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts b/speakeasy/src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts
new file mode 100755
index 0000000..84281dd
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GeneratePostmanCollectionForApiEndpointRequest extends SpeakeasyBase {
+ /**
+ * The ID of the ApiEndpoint to generate a Postman collection for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" })
+ apiEndpointID: string;
+
+ /**
+ * The ID of the Api to generate a Postman collection for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to generate a Postman collection for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GeneratePostmanCollectionForApiEndpointResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ postmanCollection?: Uint8Array;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/generaterequestpostmancollection.ts b/speakeasy/src/sdk/models/operations/generaterequestpostmancollection.ts
new file mode 100755
index 0000000..1e427f5
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/generaterequestpostmancollection.ts
@@ -0,0 +1,47 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GenerateRequestPostmanCollectionRequest extends SpeakeasyBase {
+ /**
+ * The ID of the request to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=requestID" })
+ requestID: string;
+}
+
+export class GenerateRequestPostmanCollectionResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ postmanCollection?: Uint8Array;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getallapiendpoints.ts b/speakeasy/src/sdk/models/operations/getallapiendpoints.ts
new file mode 100755
index 0000000..f77e61a
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getallapiendpoints.ts
@@ -0,0 +1,47 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetAllApiEndpointsRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve ApiEndpoints for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+}
+
+export class GetAllApiEndpointsResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.ApiEndpoint })
+ apiEndpoints?: shared.ApiEndpoint[];
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getallapiversions.ts b/speakeasy/src/sdk/models/operations/getallapiversions.ts
new file mode 100755
index 0000000..2f420a5
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getallapiversions.ts
@@ -0,0 +1,70 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+/**
+ * Configuration for filter operations
+ */
+export class GetAllApiVersionsOp extends SpeakeasyBase {
+ /**
+ * Whether to AND or OR the filters
+ */
+ @SpeakeasyMetadata({ data: "queryParam, name=and" })
+ and: boolean;
+}
+
+export class GetAllApiVersionsRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * Metadata to filter Apis on
+ */
+ @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=metadata" })
+ metadata?: Record;
+
+ /**
+ * Configuration for filter operations
+ */
+ @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=op" })
+ op?: GetAllApiVersionsOp;
+}
+
+export class GetAllApiVersionsResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.Api })
+ apis?: shared.Api[];
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getallforversionapiendpoints.ts b/speakeasy/src/sdk/models/operations/getallforversionapiendpoints.ts
new file mode 100755
index 0000000..bfba34f
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getallforversionapiendpoints.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetAllForVersionApiEndpointsRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve ApiEndpoints for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to retrieve ApiEndpoints for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetAllForVersionApiEndpointsResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.ApiEndpoint })
+ apiEndpoints?: shared.ApiEndpoint[];
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getapiendpoint.ts b/speakeasy/src/sdk/models/operations/getapiendpoint.ts
new file mode 100755
index 0000000..e4b7573
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getapiendpoint.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetApiEndpointRequest extends SpeakeasyBase {
+ /**
+ * The ID of the ApiEndpoint to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" })
+ apiEndpointID: string;
+
+ /**
+ * The ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetApiEndpointResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ apiEndpoint?: shared.ApiEndpoint;
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getapis.ts b/speakeasy/src/sdk/models/operations/getapis.ts
new file mode 100755
index 0000000..f4dd018
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getapis.ts
@@ -0,0 +1,64 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+/**
+ * Configuration for filter operations
+ */
+export class GetApisOp extends SpeakeasyBase {
+ /**
+ * Whether to AND or OR the filters
+ */
+ @SpeakeasyMetadata({ data: "queryParam, name=and" })
+ and: boolean;
+}
+
+export class GetApisRequest extends SpeakeasyBase {
+ /**
+ * Metadata to filter Apis on
+ */
+ @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=metadata" })
+ metadata?: Record;
+
+ /**
+ * Configuration for filter operations
+ */
+ @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=op" })
+ op?: GetApisOp;
+}
+
+export class GetApisResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.Api })
+ apis?: shared.Api[];
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getembedaccesstoken.ts b/speakeasy/src/sdk/models/operations/getembedaccesstoken.ts
new file mode 100755
index 0000000..4e49e82
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getembedaccesstoken.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetEmbedAccessTokenRequest extends SpeakeasyBase {
+ /**
+ * The description of the embed access token.
+ */
+ @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=description" })
+ description?: string;
+
+ /**
+ * The duration (in minutes) of the embed access token.
+ */
+ @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=duration" })
+ duration?: number;
+
+ /**
+ * The filter to apply to the query.
+ */
+ @SpeakeasyMetadata({ data: "queryParam, serialization=json;name=filters" })
+ filters?: shared.Filters;
+}
+
+export class GetEmbedAccessTokenResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ embedAccessTokenResponse?: shared.EmbedAccessTokenResponse;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getplugins.ts b/speakeasy/src/sdk/models/operations/getplugins.ts
new file mode 100755
index 0000000..244589e
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getplugins.ts
@@ -0,0 +1,39 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetPluginsResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.Plugin })
+ plugins?: shared.Plugin[];
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getrequestfromeventlog.ts b/speakeasy/src/sdk/models/operations/getrequestfromeventlog.ts
new file mode 100755
index 0000000..432ca07
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getrequestfromeventlog.ts
@@ -0,0 +1,47 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetRequestFromEventLogRequest extends SpeakeasyBase {
+ /**
+ * The ID of the request to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=requestID" })
+ requestID: string;
+}
+
+export class GetRequestFromEventLogResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ unboundedRequest?: shared.UnboundedRequest;
+}
diff --git a/speakeasy/src/sdk/models/operations/getschema.ts b/speakeasy/src/sdk/models/operations/getschema.ts
new file mode 100755
index 0000000..94b0cd9
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getschema.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetSchemaRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to get the schema for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetSchemaResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ schema?: shared.Schema;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getschemadiff.ts b/speakeasy/src/sdk/models/operations/getschemadiff.ts
new file mode 100755
index 0000000..f470a59
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getschemadiff.ts
@@ -0,0 +1,65 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetSchemaDiffRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve schemas for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The base revision ID of the schema to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=baseRevisionID" })
+ baseRevisionID: string;
+
+ /**
+ * The target revision ID of the schema to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=targetRevisionID" })
+ targetRevisionID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetSchemaDiffResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ schemaDiff?: shared.SchemaDiff;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getschemarevision.ts b/speakeasy/src/sdk/models/operations/getschemarevision.ts
new file mode 100755
index 0000000..f5ee5e8
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getschemarevision.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetSchemaRevisionRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve schemas for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The revision ID of the schema to retrieve.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=revisionID" })
+ revisionID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetSchemaRevisionResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ schema?: shared.Schema;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getschemas.ts b/speakeasy/src/sdk/models/operations/getschemas.ts
new file mode 100755
index 0000000..79026d8
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getschemas.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetSchemasRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve schemas for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetSchemasResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.Schema })
+ schemata?: shared.Schema[];
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getvalidembedaccesstokens.ts b/speakeasy/src/sdk/models/operations/getvalidembedaccesstokens.ts
new file mode 100755
index 0000000..e34c3da
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getvalidembedaccesstokens.ts
@@ -0,0 +1,39 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetValidEmbedAccessTokensResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.EmbedToken })
+ embedTokens?: shared.EmbedToken[];
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/getversionmetadata.ts b/speakeasy/src/sdk/models/operations/getversionmetadata.ts
new file mode 100755
index 0000000..f7c179f
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/getversionmetadata.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class GetVersionMetadataRequest extends SpeakeasyBase {
+ /**
+ * The ID of the Api to retrieve metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to retrieve metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class GetVersionMetadataResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.VersionMetadata })
+ versionMetadata?: shared.VersionMetadata[];
+}
diff --git a/speakeasy/src/sdk/models/operations/index.ts b/speakeasy/src/sdk/models/operations/index.ts
new file mode 100755
index 0000000..f407d23
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/index.ts
@@ -0,0 +1,39 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./deleteapi";
+export * from "./deleteapiendpoint";
+export * from "./deleteschema";
+export * from "./deleteversionmetadata";
+export * from "./downloadschema";
+export * from "./downloadschemarevision";
+export * from "./findapiendpoint";
+export * from "./generateopenapispec";
+export * from "./generateopenapispecforapiendpoint";
+export * from "./generatepostmancollection";
+export * from "./generatepostmancollectionforapiendpoint";
+export * from "./generaterequestpostmancollection";
+export * from "./getallapiendpoints";
+export * from "./getallapiversions";
+export * from "./getallforversionapiendpoints";
+export * from "./getapiendpoint";
+export * from "./getapis";
+export * from "./getembedaccesstoken";
+export * from "./getplugins";
+export * from "./getrequestfromeventlog";
+export * from "./getschema";
+export * from "./getschemadiff";
+export * from "./getschemarevision";
+export * from "./getschemas";
+export * from "./getvalidembedaccesstokens";
+export * from "./getversionmetadata";
+export * from "./insertversionmetadata";
+export * from "./queryeventlog";
+export * from "./registerschema";
+export * from "./revokeembedaccesstoken";
+export * from "./runplugin";
+export * from "./upsertapi";
+export * from "./upsertapiendpoint";
+export * from "./upsertplugin";
+export * from "./validateapikey";
diff --git a/speakeasy/src/sdk/models/operations/insertversionmetadata.ts b/speakeasy/src/sdk/models/operations/insertversionmetadata.ts
new file mode 100755
index 0000000..f77c0e9
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/insertversionmetadata.ts
@@ -0,0 +1,59 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class InsertVersionMetadataRequest extends SpeakeasyBase {
+ /**
+ * A JSON representation of the metadata to insert.
+ */
+ @SpeakeasyMetadata({ data: "request, media_type=application/json" })
+ versionMetadataInput: shared.VersionMetadataInput;
+
+ /**
+ * The ID of the Api to insert metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to insert metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class InsertVersionMetadataResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ versionMetadata?: shared.VersionMetadata;
+}
diff --git a/speakeasy/src/sdk/models/operations/queryeventlog.ts b/speakeasy/src/sdk/models/operations/queryeventlog.ts
new file mode 100755
index 0000000..a4fe180
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/queryeventlog.ts
@@ -0,0 +1,47 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class QueryEventLogRequest extends SpeakeasyBase {
+ /**
+ * The filter to apply to the query.
+ */
+ @SpeakeasyMetadata({ data: "queryParam, serialization=json;name=filters" })
+ filters?: shared.Filters;
+}
+
+export class QueryEventLogResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.BoundedRequest })
+ boundedRequests?: shared.BoundedRequest[];
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/registerschema.ts b/speakeasy/src/sdk/models/operations/registerschema.ts
new file mode 100755
index 0000000..8b250f1
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/registerschema.ts
@@ -0,0 +1,69 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class RegisterSchemaRequestBodyFile extends SpeakeasyBase {
+ @SpeakeasyMetadata({ data: "multipart_form, content=true" })
+ content: Uint8Array;
+
+ @SpeakeasyMetadata({ data: "multipart_form, name=file" })
+ file: string;
+}
+
+/**
+ * The schema file to upload provided as a multipart/form-data file segment.
+ */
+export class RegisterSchemaRequestBody extends SpeakeasyBase {
+ @SpeakeasyMetadata({ data: "multipart_form, file=true" })
+ file: RegisterSchemaRequestBodyFile;
+}
+
+export class RegisterSchemaRequest extends SpeakeasyBase {
+ /**
+ * The schema file to upload provided as a multipart/form-data file segment.
+ */
+ @SpeakeasyMetadata({ data: "request, media_type=multipart/form-data" })
+ requestBody: RegisterSchemaRequestBody;
+
+ /**
+ * The ID of the Api to get the schema for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api to delete metadata for.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class RegisterSchemaResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/revokeembedaccesstoken.ts b/speakeasy/src/sdk/models/operations/revokeembedaccesstoken.ts
new file mode 100755
index 0000000..3642071
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/revokeembedaccesstoken.ts
@@ -0,0 +1,41 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class RevokeEmbedAccessTokenRequest extends SpeakeasyBase {
+ /**
+ * The ID of the EmbedToken to revoke.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=tokenID" })
+ tokenID: string;
+}
+
+export class RevokeEmbedAccessTokenResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/runplugin.ts b/speakeasy/src/sdk/models/operations/runplugin.ts
new file mode 100755
index 0000000..163d64d
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/runplugin.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class RunPluginRequest extends SpeakeasyBase {
+ /**
+ * The filter to apply to the query.
+ */
+ @SpeakeasyMetadata({ data: "queryParam, serialization=json;name=filters" })
+ filters?: shared.Filters;
+
+ /**
+ * The ID of the plugin to run.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=pluginID" })
+ pluginID: string;
+}
+
+export class RunPluginResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata({ elemType: shared.BoundedRequest })
+ boundedRequests?: shared.BoundedRequest[];
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/upsertapi.ts b/speakeasy/src/sdk/models/operations/upsertapi.ts
new file mode 100755
index 0000000..f7f533e
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/upsertapi.ts
@@ -0,0 +1,53 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class UpsertApiRequest extends SpeakeasyBase {
+ /**
+ * A JSON representation of the Api to upsert
+ */
+ @SpeakeasyMetadata({ data: "request, media_type=application/json" })
+ apiInput: shared.ApiInput;
+
+ /**
+ * The ID of the Api to upsert.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+}
+
+export class UpsertApiResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ api?: shared.Api;
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/upsertapiendpoint.ts b/speakeasy/src/sdk/models/operations/upsertapiendpoint.ts
new file mode 100755
index 0000000..709d71b
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/upsertapiendpoint.ts
@@ -0,0 +1,65 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class UpsertApiEndpointRequest extends SpeakeasyBase {
+ /**
+ * A JSON representation of the ApiEndpoint to upsert.
+ */
+ @SpeakeasyMetadata({ data: "request, media_type=application/json" })
+ apiEndpointInput: shared.ApiEndpointInput;
+
+ /**
+ * The ID of the ApiEndpoint to upsert.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" })
+ apiEndpointID: string;
+
+ /**
+ * The ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" })
+ apiID: string;
+
+ /**
+ * The version ID of the Api the ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" })
+ versionID: string;
+}
+
+export class UpsertApiEndpointResponse extends SpeakeasyBase {
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ apiEndpoint?: shared.ApiEndpoint;
+
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/upsertplugin.ts b/speakeasy/src/sdk/models/operations/upsertplugin.ts
new file mode 100755
index 0000000..d3f9a2e
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/upsertplugin.ts
@@ -0,0 +1,39 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class UpsertPluginResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * OK
+ */
+ @SpeakeasyMetadata()
+ plugin?: shared.Plugin;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/operations/validateapikey.ts b/speakeasy/src/sdk/models/operations/validateapikey.ts
new file mode 100755
index 0000000..ed3cb64
--- /dev/null
+++ b/speakeasy/src/sdk/models/operations/validateapikey.ts
@@ -0,0 +1,33 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import * as shared from "../shared";
+import { AxiosResponse } from "axios";
+
+export class ValidateApiKeyResponse extends SpeakeasyBase {
+ /**
+ * HTTP response content type for this operation
+ */
+ @SpeakeasyMetadata()
+ contentType: string;
+
+ /**
+ * Default error response
+ */
+ @SpeakeasyMetadata()
+ error?: shared.ErrorT;
+
+ /**
+ * HTTP response status code for this operation
+ */
+ @SpeakeasyMetadata()
+ statusCode: number;
+
+ /**
+ * Raw HTTP response; suitable for custom response parsing
+ */
+ @SpeakeasyMetadata()
+ rawResponse?: AxiosResponse;
+}
diff --git a/speakeasy/src/sdk/models/shared/api.ts b/speakeasy/src/sdk/models/shared/api.ts
new file mode 100755
index 0000000..d212e3f
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/api.ts
@@ -0,0 +1,102 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform.
+ */
+export class ApiInput extends SpeakeasyBase {
+ /**
+ * The ID of this Api. This is a human-readable name (subject to change).
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_id" })
+ apiId: string;
+
+ /**
+ * A detailed description of the Api.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "description" })
+ description: string;
+
+ /**
+ * A set of values associated with a meta_data key. This field is only set on get requests.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "meta_data" })
+ metaData?: Record;
+
+ /**
+ * The version ID of this Api. This is semantic version identifier.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+}
+
+/**
+ * An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform.
+ */
+export class Api extends SpeakeasyBase {
+ /**
+ * The ID of this Api. This is a human-readable name (subject to change).
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_id" })
+ apiId: string;
+
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * A detailed description of the Api.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "description" })
+ description: string;
+
+ /**
+ * Determines if all the endpoints within the Api are found in the OpenAPI spec associated with the Api.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "matched" })
+ matched?: boolean;
+
+ /**
+ * A set of values associated with a meta_data key. This field is only set on get requests.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "meta_data" })
+ metaData?: Record;
+
+ /**
+ * Last update timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "updated_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ updatedAt: Date;
+
+ /**
+ * The version ID of this Api. This is semantic version identifier.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+
+ /**
+ * The workspace ID this Api belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/apiendpoint.ts b/speakeasy/src/sdk/models/shared/apiendpoint.ts
new file mode 100755
index 0000000..b12d088
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/apiendpoint.ts
@@ -0,0 +1,137 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * An ApiEndpoint is a description of an Endpoint for an API.
+ */
+export class ApiEndpointInput extends SpeakeasyBase {
+ /**
+ * The ID of this ApiEndpoint. This is a hash of the method and path.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_endpoint_id" })
+ apiEndpointId: string;
+
+ /**
+ * A detailed description of the ApiEndpoint.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "description" })
+ description: string;
+
+ /**
+ * A human-readable name for the ApiEndpoint.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "display_name" })
+ displayName: string;
+
+ /**
+ * HTTP verb.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "method" })
+ method: string;
+
+ /**
+ * Path that handles this Api.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "path" })
+ path: string;
+
+ /**
+ * The version ID of the Api this ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+}
+
+/**
+ * An ApiEndpoint is a description of an Endpoint for an API.
+ */
+export class ApiEndpoint extends SpeakeasyBase {
+ /**
+ * The ID of this ApiEndpoint. This is a hash of the method and path.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_endpoint_id" })
+ apiEndpointId: string;
+
+ /**
+ * The ID of the Api this ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_id" })
+ apiId: string;
+
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * A detailed description of the ApiEndpoint.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "description" })
+ description: string;
+
+ /**
+ * A human-readable name for the ApiEndpoint.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "display_name" })
+ displayName: string;
+
+ /**
+ * Determines if the endpoint was found in the OpenAPI spec associated with the parent Api.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "matched" })
+ matched?: boolean;
+
+ /**
+ * HTTP verb.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "method" })
+ method: string;
+
+ /**
+ * Path that handles this Api.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "path" })
+ path: string;
+
+ /**
+ * Last update timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "updated_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ updatedAt: Date;
+
+ /**
+ * The version ID of the Api this ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+
+ /**
+ * The workspace ID this ApiEndpoint belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/boundedrequest.ts b/speakeasy/src/sdk/models/shared/boundedrequest.ts
new file mode 100755
index 0000000..f628f2c
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/boundedrequest.ts
@@ -0,0 +1,114 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { RequestMetadata } from "./requestmetadata";
+import { Expose, Transform, Type } from "class-transformer";
+
+/**
+ * A BoundedRequest is a request that has been logged by the Speakeasy without the contents of the request.
+ */
+export class BoundedRequest extends SpeakeasyBase {
+ /**
+ * The ID of the ApiEndpoint this request was made to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_endpoint_id" })
+ apiEndpointId: string;
+
+ /**
+ * The ID of the Api this request was made to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_id" })
+ apiId: string;
+
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * The ID of the customer that made this request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "customer_id" })
+ customerId: string;
+
+ /**
+ * The latency of the request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "latency" })
+ latency: number;
+
+ /**
+ * Metadata associated with this request
+ */
+ @SpeakeasyMetadata({ elemType: RequestMetadata })
+ @Expose({ name: "metadata" })
+ @Type(() => RequestMetadata)
+ metadata?: RequestMetadata[];
+
+ /**
+ * HTTP verb.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "method" })
+ method: string;
+
+ /**
+ * The path of the request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "path" })
+ path: string;
+
+ /**
+ * The time the request finished.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "request_finish_time" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ requestFinishTime: Date;
+
+ /**
+ * The ID of this request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "request_id" })
+ requestId: string;
+
+ /**
+ * The time the request was made.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "request_start_time" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ requestStartTime: Date;
+
+ /**
+ * The status code of the request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "status" })
+ status: number;
+
+ /**
+ * The version ID of the Api this request was made to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+
+ /**
+ * The workspace ID this request was made to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/embedaccesstokenresponse.ts b/speakeasy/src/sdk/models/shared/embedaccesstokenresponse.ts
new file mode 100755
index 0000000..b396d3a
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/embedaccesstokenresponse.ts
@@ -0,0 +1,15 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose } from "class-transformer";
+
+/**
+ * An EmbedAccessTokenResponse contains a token that can be used to embed a Speakeasy dashboard.
+ */
+export class EmbedAccessTokenResponse extends SpeakeasyBase {
+ @SpeakeasyMetadata()
+ @Expose({ name: "access_token" })
+ accessToken: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/embedtoken.ts b/speakeasy/src/sdk/models/shared/embedtoken.ts
new file mode 100755
index 0000000..db8d046
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/embedtoken.ts
@@ -0,0 +1,85 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * A representation of an embed token granted for working with Speakeasy components.
+ */
+export class EmbedToken extends SpeakeasyBase {
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * The ID of the user that created this token.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_by" })
+ createdBy: string;
+
+ /**
+ * A detailed description of the EmbedToken.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "description" })
+ description: string;
+
+ /**
+ * The time this token expires.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "expires_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ expiresAt: Date;
+
+ /**
+ * The filters applied to this token.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "filters" })
+ filters: string;
+
+ /**
+ * The ID of this EmbedToken.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "id" })
+ id: string;
+
+ /**
+ * The last time this token was used.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "last_used" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ lastUsed?: Date;
+
+ /**
+ * The time this token was revoked.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "revoked_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ revokedAt?: Date;
+
+ /**
+ * The ID of the user that revoked this token.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "revoked_by" })
+ revokedBy?: string;
+
+ /**
+ * The workspace ID this token belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/error.ts b/speakeasy/src/sdk/models/shared/error.ts
new file mode 100755
index 0000000..f7ab071
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/error.ts
@@ -0,0 +1,25 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose } from "class-transformer";
+
+/**
+ * The `Status` type defines a logical error model
+ */
+export class ErrorT extends SpeakeasyBase {
+ /**
+ * A developer-facing error message.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "message" })
+ message: string;
+
+ /**
+ * The HTTP status code
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "status_code" })
+ statusCode: number;
+}
diff --git a/speakeasy/src/sdk/models/shared/filter.ts b/speakeasy/src/sdk/models/shared/filter.ts
new file mode 100755
index 0000000..0e8e68f
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/filter.ts
@@ -0,0 +1,32 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose } from "class-transformer";
+
+/**
+ * A filter is a key-value pair that can be used to filter a list of requests.
+ */
+export class Filter extends SpeakeasyBase {
+ /**
+ * The key of the filter.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "key" })
+ key: string;
+
+ /**
+ * The operator of the filter.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "operator" })
+ operator: string;
+
+ /**
+ * The value of the filter.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "value" })
+ value: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/filters.ts b/speakeasy/src/sdk/models/shared/filters.ts
new file mode 100755
index 0000000..dd1d358
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/filters.ts
@@ -0,0 +1,41 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Filter } from "./filter";
+import { Expose, Type } from "class-transformer";
+
+/**
+ * Filters are used to query requests.
+ */
+export class Filters extends SpeakeasyBase {
+ /**
+ * A list of filters to apply to the query.
+ */
+ @SpeakeasyMetadata({ elemType: Filter })
+ @Expose({ name: "filters" })
+ @Type(() => Filter)
+ filters: Filter[];
+
+ /**
+ * The maximum number of results to return.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "limit" })
+ limit: number;
+
+ /**
+ * The offset to start the query from.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "offset" })
+ offset: number;
+
+ /**
+ * The operator to use when combining filters.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "operator" })
+ operator: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/generateopenapispecdiff.ts b/speakeasy/src/sdk/models/shared/generateopenapispecdiff.ts
new file mode 100755
index 0000000..fc8763b
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/generateopenapispecdiff.ts
@@ -0,0 +1,16 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose } from "class-transformer";
+
+export class GenerateOpenApiSpecDiff extends SpeakeasyBase {
+ @SpeakeasyMetadata()
+ @Expose({ name: "current_schema" })
+ currentSchema: string;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "new_schema" })
+ newSchema: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/index.ts b/speakeasy/src/sdk/models/shared/index.ts
new file mode 100755
index 0000000..d02e127
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/index.ts
@@ -0,0 +1,20 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./api";
+export * from "./apiendpoint";
+export * from "./boundedrequest";
+export * from "./embedaccesstokenresponse";
+export * from "./embedtoken";
+export * from "./error";
+export * from "./filter";
+export * from "./filters";
+export * from "./generateopenapispecdiff";
+export * from "./plugin";
+export * from "./requestmetadata";
+export * from "./schema";
+export * from "./schemadiff";
+export * from "./security";
+export * from "./unboundedrequest";
+export * from "./versionmetadata";
diff --git a/speakeasy/src/sdk/models/shared/plugin.ts b/speakeasy/src/sdk/models/shared/plugin.ts
new file mode 100755
index 0000000..5ee34d6
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/plugin.ts
@@ -0,0 +1,41 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * A plugin is a short script that is run against ingested requests
+ */
+export class Plugin extends SpeakeasyBase {
+ @SpeakeasyMetadata()
+ @Expose({ name: "code" })
+ code: string;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt?: Date;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "eval_hash" })
+ evalHash?: string;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "plugin_id" })
+ pluginId: string;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "title" })
+ title: string;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "updated_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ updatedAt?: Date;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/requestmetadata.ts b/speakeasy/src/sdk/models/shared/requestmetadata.ts
new file mode 100755
index 0000000..3ad114b
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/requestmetadata.ts
@@ -0,0 +1,19 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose } from "class-transformer";
+
+/**
+ * Key-Value pairs associated with a request
+ */
+export class RequestMetadata extends SpeakeasyBase {
+ @SpeakeasyMetadata()
+ @Expose({ name: "key" })
+ key?: string;
+
+ @SpeakeasyMetadata()
+ @Expose({ name: "value" })
+ value?: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/schema.ts b/speakeasy/src/sdk/models/shared/schema.ts
new file mode 100755
index 0000000..1a7c33e
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/schema.ts
@@ -0,0 +1,54 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * A Schema represents an API schema for a particular Api and Version.
+ */
+export class Schema extends SpeakeasyBase {
+ /**
+ * The ID of the Api this Schema belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_id" })
+ apiId: string;
+
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * A detailed description of the Schema.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "description" })
+ description: string;
+
+ /**
+ * An ID referencing this particular revision of the Schema.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "revision_id" })
+ revisionId: string;
+
+ /**
+ * The version ID of the Api this Schema belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+
+ /**
+ * The workspace ID this Schema belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/schemadiff.ts b/speakeasy/src/sdk/models/shared/schemadiff.ts
new file mode 100755
index 0000000..9d165da
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/schemadiff.ts
@@ -0,0 +1,58 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { objectToClass, SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+export class SchemaDiffValueChange extends SpeakeasyBase {
+ /**
+ * Represents the previous value of the element.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "From" })
+ from: string;
+
+ /**
+ * Represents the current value of the element.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "To" })
+ to: string;
+}
+
+/**
+ * A SchemaDiff represents a diff of two Schemas.
+ */
+export class SchemaDiff extends SpeakeasyBase {
+ /**
+ * Holds every addition change in the diff.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "additions" })
+ additions: string[];
+
+ /**
+ * Holds every deletion change in the diff.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "deletions" })
+ deletions: string[];
+
+ /**
+ * Holds every modification change in the diff.
+ */
+ @SpeakeasyMetadata({ elemType: SchemaDiffValueChange })
+ @Expose({ name: "modifications" })
+ @Transform(
+ ({ value }) => {
+ const obj: Record = {};
+ for (const key in value) {
+ obj[key] = objectToClass(value[key], SchemaDiffValueChange);
+ }
+ return obj;
+ },
+ { toClassOnly: true }
+ )
+ modifications: Record;
+}
diff --git a/speakeasy/src/sdk/models/shared/security.ts b/speakeasy/src/sdk/models/shared/security.ts
new file mode 100755
index 0000000..3a25e98
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/security.ts
@@ -0,0 +1,10 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+
+export class Security extends SpeakeasyBase {
+ @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=x-api-key" })
+ apiKey: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/unboundedrequest.ts b/speakeasy/src/sdk/models/shared/unboundedrequest.ts
new file mode 100755
index 0000000..3e1dff4
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/unboundedrequest.ts
@@ -0,0 +1,47 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * An UnboundedRequest represents the HAR content capture by Speakeasy when logging a request.
+ */
+export class UnboundedRequest extends SpeakeasyBase {
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * The HAR content of the request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "har" })
+ har: string;
+
+ /**
+ * The size of the HAR content in bytes.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "har_size_bytes" })
+ harSizeBytes: number;
+
+ /**
+ * The ID of this request.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "request_id" })
+ requestId: string;
+
+ /**
+ * The workspace ID this request was made to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/models/shared/versionmetadata.ts b/speakeasy/src/sdk/models/shared/versionmetadata.ts
new file mode 100755
index 0000000..4a9991f
--- /dev/null
+++ b/speakeasy/src/sdk/models/shared/versionmetadata.ts
@@ -0,0 +1,73 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils";
+import { Expose, Transform } from "class-transformer";
+
+/**
+ * A set of keys and associated values, attached to a particular version of an Api.
+ */
+export class VersionMetadataInput extends SpeakeasyBase {
+ /**
+ * The key for this metadata.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "meta_key" })
+ metaKey: string;
+
+ /**
+ * One of the values for this metadata.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "meta_value" })
+ metaValue: string;
+}
+
+/**
+ * A set of keys and associated values, attached to a particular version of an Api.
+ */
+export class VersionMetadata extends SpeakeasyBase {
+ /**
+ * The ID of the Api this Metadata belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "api_id" })
+ apiId: string;
+
+ /**
+ * Creation timestamp.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "created_at" })
+ @Transform(({ value }) => new Date(value), { toClassOnly: true })
+ createdAt: Date;
+
+ /**
+ * The key for this metadata.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "meta_key" })
+ metaKey: string;
+
+ /**
+ * One of the values for this metadata.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "meta_value" })
+ metaValue: string;
+
+ /**
+ * The version ID of the Api this Metadata belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "version_id" })
+ versionId: string;
+
+ /**
+ * The workspace ID this Metadata belongs to.
+ */
+ @SpeakeasyMetadata()
+ @Expose({ name: "workspace_id" })
+ workspaceId: string;
+}
diff --git a/speakeasy/src/sdk/plugins.ts b/speakeasy/src/sdk/plugins.ts
new file mode 100755
index 0000000..d3a029c
--- /dev/null
+++ b/speakeasy/src/sdk/plugins.ts
@@ -0,0 +1,287 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for managing and running plugins
+ */
+
+export class Plugins {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Get all plugins for the current workspace.
+ */
+ async getPlugins(config?: AxiosRequestConfig): Promise {
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/plugins";
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetPluginsResponse = new operations.GetPluginsResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.plugins = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.plugins = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.Plugin,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Run a plugin
+ */
+ async runPlugin(
+ req: operations.RunPluginRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.RunPluginRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(baseURL, "/v1/plugins/{pluginID}", req);
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ const queryParams: string = utils.serializeQueryParams(req);
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url + queryParams,
+ method: "post",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.RunPluginResponse = new operations.RunPluginResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.boundedRequests = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.boundedRequests = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.BoundedRequest,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Upsert a plugin
+ */
+ async upsertPlugin(
+ req: shared.Plugin,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new shared.Plugin(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/plugins";
+
+ let [reqBodyHeaders, reqBody]: [object, any] = [{}, null];
+
+ try {
+ [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "request", "json");
+ } catch (e: unknown) {
+ if (e instanceof Error) {
+ throw new Error(`Error serializing request body, cause: ${e.message}`);
+ }
+ }
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = {
+ ...reqBodyHeaders,
+ ...config?.headers,
+ ...properties.headers,
+ };
+ if (reqBody == null) throw new Error("request body is required");
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "put",
+ headers: headers,
+ responseType: "arraybuffer",
+ data: reqBody,
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.UpsertPluginResponse = new operations.UpsertPluginResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.plugin = utils.objectToClass(JSON.parse(decodedRes), shared.Plugin);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/requests.ts b/speakeasy/src/sdk/requests.ts
new file mode 100755
index 0000000..c70433e
--- /dev/null
+++ b/speakeasy/src/sdk/requests.ts
@@ -0,0 +1,298 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for retrieving request information
+ */
+export enum GenerateRequestPostmanCollectionAcceptEnum {
+ applicationJson = "application/json",
+ applicationOctetStream = "application/octet-stream",
+}
+
+export class Requests {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Generate a Postman collection for a particular request.
+ *
+ * @remarks
+ * Generates a Postman collection for a particular request.
+ * Allowing it to be replayed with the same inputs that were captured by the SDK.
+ */
+ async generateRequestPostmanCollection(
+ req: operations.GenerateRequestPostmanCollectionRequest,
+ config?: AxiosRequestConfig,
+ acceptHeaderOverride?: GenerateRequestPostmanCollectionAcceptEnum
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GenerateRequestPostmanCollectionRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/eventlog/{requestID}/generate/postman",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ if (acceptHeaderOverride !== undefined) {
+ headers["Accept"] = acceptHeaderOverride.toString();
+ } else {
+ headers["Accept"] = "application/json;q=1, application/octet-stream;q=0";
+ }
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GenerateRequestPostmanCollectionResponse =
+ new operations.GenerateRequestPostmanCollectionResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/octet-stream`)) {
+ res.postmanCollection = httpRes?.data;
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get information about a particular request.
+ */
+ async getRequestFromEventLog(
+ req: operations.GetRequestFromEventLogRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetRequestFromEventLogRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(baseURL, "/v1/eventlog/{requestID}", req);
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetRequestFromEventLogResponse =
+ new operations.GetRequestFromEventLogResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.unboundedRequest = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.UnboundedRequest
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Query the event log to retrieve a list of requests.
+ *
+ * @remarks
+ * Supports retrieving a list of request captured by the SDK for this workspace.
+ * Allows the filtering of requests on a number of criteria such as ApiID, VersionID, Path, Method, etc.
+ */
+ async queryEventLog(
+ req: operations.QueryEventLogRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.QueryEventLogRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/eventlog/query";
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ const queryParams: string = utils.serializeQueryParams(req);
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url + queryParams,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.QueryEventLogResponse = new operations.QueryEventLogResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.boundedRequests = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.boundedRequests = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.BoundedRequest,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/schemas.ts b/speakeasy/src/sdk/schemas.ts
new file mode 100755
index 0000000..02c4f69
--- /dev/null
+++ b/speakeasy/src/sdk/schemas.ts
@@ -0,0 +1,744 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { SDKConfiguration } from "./sdk";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+/**
+ * REST APIs for managing Schema entities
+ */
+export enum DownloadSchemaAcceptEnum {
+ applicationJson = "application/json",
+ applicationXYaml = "application/x-yaml",
+}
+
+export enum DownloadSchemaRevisionAcceptEnum {
+ applicationJson = "application/json",
+ applicationXYaml = "application/x-yaml",
+}
+
+export class Schemas {
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(sdkConfig: SDKConfiguration) {
+ this.sdkConfiguration = sdkConfig;
+ }
+
+ /**
+ * Delete a particular schema revision for an Api.
+ */
+ async deleteSchema(
+ req: operations.DeleteSchemaRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.DeleteSchemaRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "delete",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.DeleteSchemaResponse = new operations.DeleteSchemaResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Download the latest schema for a particular apiID.
+ */
+ async downloadSchema(
+ req: operations.DownloadSchemaRequest,
+ config?: AxiosRequestConfig,
+ acceptHeaderOverride?: DownloadSchemaAcceptEnum
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.DownloadSchemaRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema/download",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ if (acceptHeaderOverride !== undefined) {
+ headers["Accept"] = acceptHeaderOverride.toString();
+ } else {
+ headers["Accept"] = "application/json;q=1, application/x-yaml;q=0";
+ }
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.DownloadSchemaResponse = new operations.DownloadSchemaResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.schema = httpRes?.data;
+ } else if (utils.matchContentType(contentType, `application/x-yaml`)) {
+ res.schema = httpRes?.data;
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Download a particular schema revision for an Api.
+ */
+ async downloadSchemaRevision(
+ req: operations.DownloadSchemaRevisionRequest,
+ config?: AxiosRequestConfig,
+ acceptHeaderOverride?: DownloadSchemaRevisionAcceptEnum
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.DownloadSchemaRevisionRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}/download",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ if (acceptHeaderOverride !== undefined) {
+ headers["Accept"] = acceptHeaderOverride.toString();
+ } else {
+ headers["Accept"] = "application/json;q=1, application/x-yaml;q=0";
+ }
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.DownloadSchemaRevisionResponse =
+ new operations.DownloadSchemaRevisionResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.schema = httpRes?.data;
+ } else if (utils.matchContentType(contentType, `application/x-yaml`)) {
+ res.schema = httpRes?.data;
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get information about the latest schema.
+ *
+ * @remarks
+ * Returns information about the last uploaded schema for a particular API version.
+ * This won't include the schema itself, that can be retrieved via the downloadSchema operation.
+ */
+ async getSchema(
+ req: operations.GetSchemaRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetSchemaRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetSchemaResponse = new operations.GetSchemaResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.schema = utils.objectToClass(JSON.parse(decodedRes), shared.Schema);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get a diff of two schema revisions for an Api.
+ */
+ async getSchemaDiff(
+ req: operations.GetSchemaDiffRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetSchemaDiffRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema/{baseRevisionID}/diff/{targetRevisionID}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetSchemaDiffResponse = new operations.GetSchemaDiffResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.schemaDiff = utils.objectToClass(JSON.parse(decodedRes), shared.SchemaDiff);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get information about a particular schema revision for an Api.
+ *
+ * @remarks
+ * Returns information about the last uploaded schema for a particular schema revision.
+ * This won't include the schema itself, that can be retrieved via the downloadSchema operation.
+ */
+ async getSchemaRevision(
+ req: operations.GetSchemaRevisionRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetSchemaRevisionRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetSchemaRevisionResponse = new operations.GetSchemaRevisionResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.schema = utils.objectToClass(JSON.parse(decodedRes), shared.Schema);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Get information about all schemas associated with a particular apiID.
+ *
+ * @remarks
+ * Returns information the schemas associated with a particular apiID.
+ * This won't include the schemas themselves, they can be retrieved via the downloadSchema operation.
+ */
+ async getSchemas(
+ req: operations.GetSchemasRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.GetSchemasRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schemas",
+ req
+ );
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.GetSchemasResponse = new operations.GetSchemasResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.schemata = [];
+ const resFieldDepth: number = utils.getResFieldDepth(res);
+ res.schemata = utils.objectToClass(
+ JSON.parse(decodedRes),
+ shared.Schema,
+ resFieldDepth
+ );
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+
+ /**
+ * Register a schema.
+ *
+ * @remarks
+ * Allows uploading a schema for a particular API version.
+ * This will be used to populate ApiEndpoints and used as a base for any schema generation if present.
+ */
+ async registerSchema(
+ req: operations.RegisterSchemaRequest,
+ config?: AxiosRequestConfig
+ ): Promise {
+ if (!(req instanceof utils.SpeakeasyBase)) {
+ req = new operations.RegisterSchemaRequest(req);
+ }
+
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = utils.generateURL(
+ baseURL,
+ "/v1/apis/{apiID}/version/{versionID}/schema",
+ req
+ );
+
+ let [reqBodyHeaders, reqBody]: [object, any] = [{}, null];
+
+ try {
+ [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "requestBody", "multipart");
+ } catch (e: unknown) {
+ if (e instanceof Error) {
+ throw new Error(`Error serializing request body, cause: ${e.message}`);
+ }
+ }
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = {
+ ...reqBodyHeaders,
+ ...config?.headers,
+ ...properties.headers,
+ };
+ if (reqBody == null) throw new Error("request body is required");
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "post",
+ headers: headers,
+ responseType: "arraybuffer",
+ data: reqBody,
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.RegisterSchemaResponse = new operations.RegisterSchemaResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/sdk.ts b/speakeasy/src/sdk/sdk.ts
new file mode 100755
index 0000000..3e72e1d
--- /dev/null
+++ b/speakeasy/src/sdk/sdk.ts
@@ -0,0 +1,195 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+import * as utils from "../internal/utils";
+import { ApiEndpoints } from "./apiendpoints";
+import { Apis } from "./apis";
+import { Embeds } from "./embeds";
+import { Metadata } from "./metadata";
+import * as errors from "./models/errors";
+import * as operations from "./models/operations";
+import * as shared from "./models/shared";
+import { Plugins } from "./plugins";
+import { Requests } from "./requests";
+import { Schemas } from "./schemas";
+import axios from "axios";
+import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios";
+
+export const ServerProd = "prod";
+/**
+ * Contains the list of servers available to the SDK
+ */
+export const ServerList: Record = {
+ [ServerProd]: "https://api.prod.speakeasyapi.dev",
+} as const;
+
+/**
+ * The available configuration options for the SDK
+ */
+export type SDKProps = {
+ apiKey?: string;
+
+ /**
+ * Allows overriding the default axios client used by the SDK
+ */
+ defaultClient?: AxiosInstance;
+
+ /**
+ * Allows overriding the default server used by the SDK
+ */
+ server?: string;
+
+ /**
+ * Allows overriding the default server URL used by the SDK
+ */
+ serverURL?: string;
+ /**
+ * Allows overriding the default retry config used by the SDK
+ */
+ retryConfig?: utils.RetryConfig;
+};
+
+export class SDKConfiguration {
+ defaultClient: AxiosInstance;
+ security?: shared.Security | (() => Promise);
+ serverURL: string;
+ serverDefaults: any;
+ language = "typescript";
+ openapiDocVersion = "0.3.0";
+ sdkVersion = "0.1.0";
+ genVersion = "2.161.0";
+ userAgent = "speakeasy-sdk/typescript 0.1.0 2.161.0 0.3.0 openapi";
+ retryConfig?: utils.RetryConfig;
+ public constructor(init?: Partial) {
+ Object.assign(this, init);
+ }
+}
+
+/**
+ * Speakeasy API: The Speakeasy API allows teams to manage common operations with their APIs
+ *
+ * @see {@link /docs} - The Speakeasy Platform Documentation
+ */
+export class SDK {
+ /**
+ * REST APIs for managing ApiEndpoint entities
+ */
+ public apiEndpoints: ApiEndpoints;
+ /**
+ * REST APIs for managing Api entities
+ */
+ public apis: Apis;
+ /**
+ * REST APIs for managing embeds
+ */
+ public embeds: Embeds;
+ /**
+ * REST APIs for managing Version Metadata entities
+ */
+ public metadata: Metadata;
+ /**
+ * REST APIs for managing and running plugins
+ */
+ public plugins: Plugins;
+ /**
+ * REST APIs for retrieving request information
+ */
+ public requests: Requests;
+ /**
+ * REST APIs for managing Schema entities
+ */
+ public schemas: Schemas;
+
+ private sdkConfiguration: SDKConfiguration;
+
+ constructor(props?: SDKProps) {
+ let serverURL = props?.serverURL;
+ const server = props?.server ?? ServerProd;
+
+ if (!serverURL) {
+ serverURL = ServerList[server];
+ }
+
+ const defaultClient = props?.defaultClient ?? axios.create({ baseURL: serverURL });
+ this.sdkConfiguration = new SDKConfiguration({
+ defaultClient: defaultClient,
+ security: new shared.Security({ apiKey: props?.apiKey }),
+
+ serverURL: serverURL,
+ retryConfig: props?.retryConfig,
+ });
+
+ this.apiEndpoints = new ApiEndpoints(this.sdkConfiguration);
+ this.apis = new Apis(this.sdkConfiguration);
+ this.embeds = new Embeds(this.sdkConfiguration);
+ this.metadata = new Metadata(this.sdkConfiguration);
+ this.plugins = new Plugins(this.sdkConfiguration);
+ this.requests = new Requests(this.sdkConfiguration);
+ this.schemas = new Schemas(this.sdkConfiguration);
+ }
+
+ /**
+ * Validate the current api key.
+ */
+ async validateApiKey(config?: AxiosRequestConfig): Promise {
+ const baseURL: string = utils.templateUrl(
+ this.sdkConfiguration.serverURL,
+ this.sdkConfiguration.serverDefaults
+ );
+ const url: string = baseURL.replace(/\/$/, "") + "/v1/auth/validate";
+ const client: AxiosInstance = this.sdkConfiguration.defaultClient;
+ let globalSecurity = this.sdkConfiguration.security;
+ if (typeof globalSecurity === "function") {
+ globalSecurity = await globalSecurity();
+ }
+ if (!(globalSecurity instanceof utils.SpeakeasyBase)) {
+ globalSecurity = new shared.Security(globalSecurity);
+ }
+ const properties = utils.parseSecurityProperties(globalSecurity);
+ const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers };
+ headers["Accept"] = "application/json";
+
+ headers["user-agent"] = this.sdkConfiguration.userAgent;
+
+ const httpRes: AxiosResponse = await client.request({
+ validateStatus: () => true,
+ url: url,
+ method: "get",
+ headers: headers,
+ responseType: "arraybuffer",
+ ...config,
+ });
+
+ const contentType: string = httpRes?.headers?.["content-type"] ?? "";
+
+ if (httpRes?.status == null) {
+ throw new Error(`status code not found in response: ${httpRes}`);
+ }
+
+ const res: operations.ValidateApiKeyResponse = new operations.ValidateApiKeyResponse({
+ statusCode: httpRes.status,
+ contentType: contentType,
+ rawResponse: httpRes,
+ });
+ const decodedRes = new TextDecoder().decode(httpRes?.data);
+ switch (true) {
+ case httpRes?.status == 200:
+ break;
+ default:
+ if (utils.matchContentType(contentType, `application/json`)) {
+ res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT);
+ } else {
+ throw new errors.SDKError(
+ "unknown content-type received: " + contentType,
+ httpRes.status,
+ decodedRes,
+ httpRes
+ );
+ }
+ break;
+ }
+
+ return res;
+ }
+}
diff --git a/speakeasy/src/sdk/types/index.ts b/speakeasy/src/sdk/types/index.ts
new file mode 100755
index 0000000..de759a3
--- /dev/null
+++ b/speakeasy/src/sdk/types/index.ts
@@ -0,0 +1,5 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export * from "./rfcdate";
diff --git a/speakeasy/src/sdk/types/rfcdate.ts b/speakeasy/src/sdk/types/rfcdate.ts
new file mode 100755
index 0000000..903ac7d
--- /dev/null
+++ b/speakeasy/src/sdk/types/rfcdate.ts
@@ -0,0 +1,48 @@
+/*
+ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+ */
+
+export class RFCDate {
+ private date: Date;
+
+ constructor(date: Date | {date:string} | string | undefined) {
+ if (!date) {
+ this.date = new Date();
+ return;
+ }
+
+ if (typeof date === "string") {
+ this.date = new Date(date);
+ return;
+ }
+ if (date instanceof Date) {
+ this.date = date as Date
+ return;
+ }
+
+ const anyDate = (date as any);
+ if (date && !!anyDate.date) {
+ this.date = new Date(anyDate.date);
+ }
+ }
+
+ public getDate(): Date {
+ return this.date;
+ }
+
+ public toJSON(): string {
+ return this.toString();
+ }
+
+ public toString(): string {
+ const dateRegex = /^(\d{4})-(\d{2})-(\d{2})/;
+
+ const matches = this.date.toISOString().match(dateRegex);
+ if (matches == null) {
+ throw new Error("Date format is not valid");
+ }
+
+ const [, year, month, day]: RegExpMatchArray = matches;
+ return `${year}-${month}-${day}`;
+ }
+}
diff --git a/speakeasy/tsconfig.json b/speakeasy/tsconfig.json
new file mode 100755
index 0000000..0e90e5e
--- /dev/null
+++ b/speakeasy/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["es2021"],
+ "baseUrl": "src",
+ "rootDir": "src",
+ "outDir": "dist",
+ "allowJs": true,
+ "downlevelIteration": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noFallthroughCasesInSwitch": true,
+ "module": "commonjs",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "strictPropertyInitialization": false,
+ "declaration": true,
+ "types": ["reflect-metadata"]
+ },
+ "include": ["src"]
+}