diff --git a/README.md b/README.md index 2c667a0..0e591e1 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ The metadata is openly accessible and is system instance aware. Depending on the **tenant** the metadata return can potentially vary (reflecting customizations). This strategy therefore only applies to multi-tenant systems. -When fetching metadata for a specific tenant, the request REQUIRES to add an additional HTTP Header `sap-global-tenant-id` with a [CLD Tenant ID](https://wiki.one.int.sap/wiki/display/CLMAM/CLD+Tenant+ID) as a value. +When fetching metadata for a specific tenant, the request REQUIRES to add an additional HTTP Header `global-tenant-id` with a [CLD Tenant ID](https://wiki.one.int.sap/wiki/display/CLMAM/CLD+Tenant+ID) as a value. The application internally maps from the global tenant ID to a local tenant and returns the metadata for the local tenant as requested (see [./src/data/user/tenantMapping.ts](./src/data/user/tenantMapping.ts)). Therefore the application MUST support the mapping of the global tenant ID to its own tenant IDs. @@ -52,7 +52,7 @@ In this case metadata would be returned without considering tenant specifics. The metadata is openly accessible, but system instance aware. Depending tenant the metadata that is return can vary (reflecting customizations). -When fetching metadata for a specific tenant, the request REQUIRES an additional HTTP Header `sap-local-tenant-id` with a local tenant ID (that the application locally understands) as a value. +When fetching metadata for a specific tenant, the request REQUIRES an additional HTTP Header `local-tenant-id` with a local tenant ID (that the application locally understands) as a value. If the specified header is missing the request will be identical to the `open` access strategy. Whether this is supported is defined by additionally supporting the `open` access strategy. diff --git a/deps/open-resource-discovery/dist/types/v1/Configuration.d.ts b/deps/open-resource-discovery/dist/types/v1/Configuration.d.ts index b5ebf50..0a9b7da 100644 --- a/deps/open-resource-discovery/dist/types/v1/Configuration.d.ts +++ b/deps/open-resource-discovery/dist/types/v1/Configuration.d.ts @@ -1,3 +1,5 @@ +// AUTO-GENERATED definition files. Do not modify directly. + /** * The ORD configuration response will indicate that ORD is available for the given host and how to proceed with the discovery. * @@ -6,99 +8,118 @@ * The configuration endpoint is a [Well-Known URI](https://tools.ietf.org/html/rfc8615#section-3) discovery mechanism. */ export interface ORDConfiguration { - /** - * An optional URL to the ORD document schema (defined as JSON Schema). - * If given, this enables code intelligence and validation in supported editors (like VSCode) and tools. - */ - $schema?: string; - /** - * Optional [base URL](../index.md#def-base-url) that can be used to resolve the relative URLs to the ORD Documents. - * - * The `baseUrl` MUST not contain a leading slash. - * - * If you do not provide this property, the base URL is assumed to be the URL of the config endpoint without `/.well-known/open-resource-discovery` suffix. - * This implies that either a `baseUrl` or only absolute URLs MUST be provided when no standardized well-known URI is used. - * If both a `baseUrl` and a well-known URI is provided, the explicit `baseUrl` takes precedence. - */ - baseUrl?: string; - openResourceDiscoveryV1: ORDV1Support; + /** + * Optional URL to the ORD document schema (defined as JSON Schema). + * If given, this enables code intelligence and validation in supported editors (like VSCode) and tools. + */ + $schema?: ( + | string + | "https://open-resource-discovery.github.io/specification/spec-v1/interfaces/Configuration.schema.json#" + ) & + string; + /** + * Optional [base URL](../index.md#def-base-url) that can be used to resolve the relative URLs to the ORD Documents. + * + * The `baseUrl` MUST not contain a leading slash. + * + * If you do not provide this property, the base URL is assumed to be the URL of the config endpoint without `/.well-known/open-resource-discovery` suffix. + * This implies that either a `baseUrl` or only absolute URLs MUST be provided when no standardized well-known URI is used. + * If both a `baseUrl` and a well-known URI is provided, the explicit `baseUrl` takes precedence. + */ + baseUrl?: string; + openResourceDiscoveryV1: ORDV1Support; } /** * The existence of this version indicates that Open Resource Discovery is supported in Version 1.x */ export interface ORDV1Support { - /** - * List of all ORD documents that can be retrieved. - * - * While it is possible to describe everything in one big ORD document, for bigger services/use cases it might be preferable to split the information into multiple documents. - * - * For more details how to implement this correctly, please refer to the [ORD configuration endpoint](../index.md#ord-configuration-endpoint) section and the [considerations on the granularity of ORD documents](../index.md#considerations-on-the-granularity-of-ord-documents). - */ - documents?: ORDV1DocumentDescription[]; + /** + * List of all ORD documents that can be retrieved. + * + * While it is possible to describe everything in one big ORD document, for bigger services/use cases it might be preferable to split the information into multiple documents. + * + * For more details how to implement this correctly, please refer to the [ORD configuration endpoint](../index.md#ord-configuration-endpoint) section and the [considerations on the granularity of ORD documents](../index.md#considerations-on-the-granularity-of-ord-documents). + */ + documents?: ORDV1DocumentDescription[]; } /** * Describes an [ORD Document](../index.md#ord-document) that is available for pull transport consumption. */ export interface ORDV1DocumentDescription { - /** - * URL or relative URL to the ORD document (provided by an ORD document endpoint). - * - * It is RECOMMENDED to provide a relative URL (to base URL), starting with `/`. - * If a `baseUrl` is given, the relative URLs will be resolved with it. - * - * If the URL is not relative to the system providing this information or no well-known URI is used, - * either the baseUrl or a full URL to the document MUST be provided. - */ - url: string; - /** - * Whether the information in the ORD document is **system instance aware**. - * - * This is the case when the provided ORD document potentially differs between **system instances**. - * Please note that if a system does not support multitenancy, most likely each system instance has its own - * URL and different system instances could even be deployed in a different state (version). - * If those conditions apply, `systemInstanceAware` MUST be set to true. - * - * An ORD aggregator that represents a system instance aware perspective MUST fetch a system instance aware ORD document, - * not just once per system type but once per **system instance**. - * - * Please note that you can define system instance awareness also on the level of an ORD resource. - * It is even possible and valid to have an ORD document that is NOT system instance aware to contain resources that are. - * This can be the case because the resource is described in separate resource definition formats which would change, - * while the ORD document itself would not change (the links to the resource definition files stay the same). - * - * If some ORD information is **system instance aware** and some is not, - * we RECOMMEND to split the information into separate documents and mark their system instance awareness accordingly. - */ - systemInstanceAware?: boolean; - /** - * List of supported access strategies for retrieving the metadata from the ORD provider. - * - * An ORD Consumer/ORD Aggregator MAY freely choose any of the listed strategies. - * - * @minItems 1 - */ - accessStrategies: [AccessStrategy, ...AccessStrategy[]]; + /** + * URL or relative URL to the ORD document (provided by an ORD document endpoint). + * + * It is RECOMMENDED to provide a relative URL (to `baseUrl`). + * If a `baseUrl` is given, the relative URLs will be resolved with it. + * + * If the URL is not relative to the system providing this information or no well-known URI is used, + * either the baseUrl or a full URL to the document MUST be provided. + */ + url: string; + /** + * With ORD it's possible to describe a system from a static or a dynamic [perspective](../index.md#perspectives) (for more details, follow the link). + * + * If `perspective` is set for one document, it MUST also be explicitly set for the others. + * An ORD aggregator that only documents the static perspective will ignore all documents marked with `system-instance`. + * + * It is strongly RECOMMENDED to mark all static ORD documents with perspective `system-version`. + * + * It is RECOMMENDED to describe dynamic metadata in both static system-version perspective and additionally describe the system-instance perspective where it diverges from the static metadata. + * + * By default this assumes `system-instance`, which is the most precise description but also the most costly to replicate. + * + * Please read the [article on perspectives](../concepts/perspectives) for more explanations. + */ + perspective?: "system-version" | "system-instance" | "system-independent"; + /** + * Whether the information in the ORD document is **system instance aware**. + * + * This is the case when the provided ORD document potentially differs between **system instances**. + * Please note that if a system does not support multi-tenancy, most likely each system instance has its own + * URL and different system instances could even be deployed in a different state (version). + * If those conditions apply, `systemInstanceAware` MUST be set to true. + * + * An ORD aggregator that represents a system instance aware perspective MUST fetch a system instance aware ORD document, + * not just once per system type but once per **system instance**. + * + * Please note that you can define system instance awareness also on the level of an ORD resource. + * It is even possible and valid to have an ORD document that is NOT system instance aware to contain resources that are. + * This can be the case because the resource is described in separate resource definition formats which would change, + * while the ORD document itself would not change (the links to the resource definition files stay the same). + * + * If some ORD information is **system instance aware** and some is not, + * we RECOMMEND to split the information into separate documents and mark their system instance awareness accordingly. + */ + systemInstanceAware?: boolean; + /** + * List of supported access strategies for retrieving the metadata from the ORD provider. + * + * An ORD Consumer/ORD Aggregator MAY freely choose any of the listed strategies. + * + * @minItems 1 + */ + accessStrategies: [AccessStrategy, ...AccessStrategy[]]; } /** * Defines the [access strategy](../../spec-extensions/access-strategies/) for accessing the ORD documents from the ORD provider. */ export interface AccessStrategy { - /** - * Defines the authentication/authorization strategy through which the referenced ORD Documents can be accessed. - */ - type: "open" | "sap:cmp-mtls:v1" | "sap.businesshub:basic-auth:v1" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * Human-readable description about how the access is set up, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * MUST only be provided if `type` is set to `custom`. - */ - customDescription?: string; + /** + * Defines the authentication/authorization strategy through which the referenced ORD Documents can be accessed. + */ + type: "open" | "sap:oauth-client-credentials:v1" | "sap:cmp-mtls:v1" | "sap.businesshub:basic-auth:v1" | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * Human-readable description about how the access is set up, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * MUST only be provided if `type` is set to `custom`. + */ + customDescription?: string; } diff --git a/deps/open-resource-discovery/dist/types/v1/Document.d.ts b/deps/open-resource-discovery/dist/types/v1/Document.d.ts index 89f618d..fb74a40 100644 --- a/deps/open-resource-discovery/dist/types/v1/Document.d.ts +++ b/deps/open-resource-discovery/dist/types/v1/Document.d.ts @@ -1,11 +1,10 @@ +// AUTO-GENERATED definition files. Do not modify directly. + /** * Define from where the API resource can be used and accessed */ export type Usage = "external" | "local"; -/** - * If provided, all resources that are part of this package can only run on the listed runtime. - */ -export type RuntimeRestriction = "sap.datasphere"; + /** * The [ORD Document](../index.md#ord-document) object serves as a wrapper for the **ORD resources** and **ORD taxonomy** and adds further top-level information * that are specific to the document/the service it describes. @@ -13,128 +12,163 @@ export type RuntimeRestriction = "sap.datasphere"; * The constraints and considerations on [ORD Documents](../index.md#ord-document) MUST be followed. */ export interface ORDDocument { - /** - * An optional [URL](https://tools.ietf.org/html/rfc3986) to the Open Resource Discovery document schema (Defined as a JSON Schema). - * - * If provided, this enables code intelligence and validation in supported editors (like VSCode) and tools. - */ - $schema?: string; - /** - * Version of the Open Resource Discovery specification that is used to describe this document. - */ - openResourceDiscovery: "1.0" | "1.1" | "1.2" | "1.3" | "1.4" | "1.5" | "1.6" | "1.7" | "1.8"; - /** - * Optional description of the ORD document itself. - * Please note that this information is NOT further processed or considered by an ORD aggregator. - * - * Notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - describedSystemInstance?: SystemInstance; - /** - * The [policy level](../../spec-extensions/access-strategies/) (aka. compliance level) that this ORD Document or part of it needs to be compliant with. - * Depending on the chosen policy level, certain expectations and validations rules will be applied. - * - * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. - * - * If not provided, no additional policy level expectations and validations apply. - * - */ - policyLevel?: "none" | "sap:core:v1" | "custom"; - /** - * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. - * - * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. - * - * MUST only be provided if `policyLevel` is set to `custom`. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - */ - customPolicyLevel?: string; - /** - * Array of all API Resources that are described in this ORD document. - */ - apiResources?: APIResource[]; - /** - * Array of all event resources that are described in this ORD document. - */ - eventResources?: EventResource[]; - /** - * Array of all entity types that are described in this ORD document. - */ - entityTypes?: EntityType[]; - /** - * Array of all capabilities that are described in this ORD document. - */ - capabilities?: Capability[]; - /** - * Array of all data products that are described in this ORD document. - */ - dataProducts?: DataProduct[]; - /** - * Array of all integration dependencies that are described in this ORD document. - */ - integrationDependencies?: IntegrationDependency[]; - /** - * Array of all Vendors that are described in this ORD document. - */ - vendors?: Vendor[]; - /** - * Array of all Products that are described in this ORD document. - */ - products?: Product[]; - /** - * Array of all Packages that are described in this ORD document. - */ - packages?: Package[]; - /** - * Array of all Consumption Bundles that are described in this ORD document. - */ - consumptionBundles?: ConsumptionBundle[]; - /** - * List of ORD information (resources or taxonomy) that have been "tombstoned"/removed. - * This MUST be indicated explicitly, so that ORD aggregators and consumers can learn about the removal. - * - * A tombstone entry MAY be removed after a grace period of 31 days. - */ - tombstones?: Tombstone[]; + /** + * Optional [URL](https://tools.ietf.org/html/rfc3986) to the Open Resource Discovery document schema (defined as a JSON Schema). + * If provided, this enables code intelligence and validation in supported editors (like VSCode) and tools. + */ + $schema?: ( + | string + | "https://open-resource-discovery.github.io/specification/spec-v1/interfaces/Document.schema.json#" + ) & + string; + /** + * Version of the Open Resource Discovery specification that is used to describe this document. + */ + openResourceDiscovery: "1.0" | "1.1" | "1.2" | "1.3" | "1.4" | "1.5" | "1.6" | "1.7" | "1.8" | "1.9" | "1.10"; + /** + * Optional description of the ORD document itself. + * Please note that this information is NOT further processed or considered by an ORD aggregator. + * + * Notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + */ + description?: string; + /** + * With ORD it's possible to describe a system from a static or a dynamic [perspective](../index.md#perspectives) (for more details, follow the link). + * + * It is strongly RECOMMENDED to mark all static ORD documents with perspective `system-version`. + * + * It is RECOMMENDED to describe dynamic metadata in both static system-version perspective and additionally describe the system-instance perspective where it diverges from the static metadata. + * + * If not provided, this defaults to `system-instance`, which is the most precise description but also the most costly to replicate. + * + * Please read the [article on perspectives](../concepts/perspectives) for more explanations. + */ + perspective?: "system-version" | "system-instance" | "system-independent"; + describedSystemInstance?: SystemInstance; + describedSystemType?: SystemType; + describedSystemVersion?: SystemVersion; + /** + * The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with. + * Depending on the chosen policy level, additional expectations and validations rules will be applied. + * + * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + */ + policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom"; + /** + * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. + * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. + * + * MUST only be provided if `policyLevel` is set to `custom`. + * MUST be a valid [Specification ID](../index.md#specification-id). + */ + customPolicyLevel?: string; + /** + * A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with. + * For each chosen policy level, additional expectations and validations rules will be applied. + * + * Policy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + * A policy level MUST be a valid [Specification ID](../index.md#specification-id). + */ + policyLevels?: string[]; + /** + * Array of all API Resources that are described in this ORD document. + */ + apiResources?: APIResource[]; + /** + * Array of all event resources that are described in this ORD document. + */ + eventResources?: EventResource[]; + /** + * Array of all entity types that are described in this ORD document. + */ + entityTypes?: EntityType[]; + /** + * Array of all capabilities that are described in this ORD document. + */ + capabilities?: Capability[]; + /** + * Array of all data products that are described in this ORD document. + */ + dataProducts?: DataProduct[]; + /** + * Array of all integration dependencies that are described in this ORD document. + */ + integrationDependencies?: IntegrationDependency[]; + /** + * Array of all Vendors that are described in this ORD document. + */ + vendors?: Vendor[]; + /** + * Array of all Products that are described in this ORD document. + */ + products?: Product[]; + /** + * Array of all Packages that are described in this ORD document. + */ + packages?: Package[]; + /** + * Array of all Consumption Bundles that are described in this ORD document. + */ + consumptionBundles?: ConsumptionBundle[]; + /** + * Array of all Groups that are described in this ORD document. + */ + groups?: Group[]; + /** + * Array of all Group Types that are described in this ORD document. + */ + groupTypes?: GroupType[]; + /** + * List of ORD information (resources or taxonomy) that have been "tombstoned"/removed. + * This MUST be indicated explicitly, so that ORD aggregators and consumers can learn about the removal. + * + * A tombstone entry MAY be removed after a grace period of 31 days. + */ + tombstones?: Tombstone[]; } /** - * A **system instance** is a concrete, running instance of a system type. - * In a multi-tenant system, this corresponds to a tenant. + * A [system instance](../index.md#def-system-instance) is a concrete, running instance of a system type. + * In a multi-tenant system, it corresponds to a tenant. + * In a single-tenant system, it corresponds to the [system installation](../index.md#def-system-deployment) itself. */ export interface SystemInstance { - /** - * Optional [base URL](../index.md#def-base-url) of the **system instance**. - * By providing the base URL, all relative references in the document are resolved relative to it. - * - * The `baseUrl` MUST not contain a leading slash. - * - * MUST be provided if the base URL is not known to the ORD aggregators. - * MUST be provided when the document needs to be fully self contained, e.g. when used for manual imports. - */ - baseUrl?: string; - /** - * Optional local ID for the system instance, as known by the described system. - * - * In the context of a system instance, this is usually the local tenant id. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; + /** + * Optional [base URL](../index.md#def-base-url) of the **system instance**. + * By providing the base URL, relative URLs in the document are resolved relative to it. + * + * The `baseUrl` MUST not contain a leading slash. + * + * MUST be provided if the base URL is not known to the ORD aggregators. + * MUST be provided when the document needs to be fully self contained, e.g. when used for manual imports. + */ + baseUrl?: string; + /** + * Optional local ID for the system instance, as known by the described system. + * + * In case of multi-tenant systems, it is equivalent to the local tenant id. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; } /** * Generic labels that can be applied to most ORD information. @@ -153,11 +187,11 @@ export interface SystemInstance { * * Duplicate values of the same label key will be removed. */ export interface Labels { - /** - * This interface was referenced by `Labels`'s JSON-Schema definition - * via the `patternProperty` "^[a-zA-Z0-9-_.]*$". - */ - [k: string]: string[]; + /** + * This interface was referenced by `Labels`'s JSON-Schema definition + * via the `patternProperty` "^[a-zA-Z0-9-_.]*$". + */ + [k: string]: string[]; } /** * Generic documentation labels that can be applied to most ORD information. @@ -175,11 +209,79 @@ export interface Labels { * In contrast to regular labels, documentation labels are not meant to be used to categorize or query information. */ export interface DocumentationLabels { - /** - * This interface was referenced by `DocumentationLabels`'s JSON-Schema definition - * via the `patternProperty` "^.*$". - */ - [k: string]: string[]; + /** + * This interface was referenced by `DocumentationLabels`'s JSON-Schema definition + * via the `patternProperty` "^.*$". + */ + [k: string]: string[]; +} +/** + * A [system type](../index.md#def-system-type) is the abstract type of an application or service, from operational perspective. + */ +export interface SystemType { + /** + * The system namespace is a unique identifier for the system type. + * It is used to reference the system type in the ORD. + */ + systemNamespace?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; +} +/** + * A [system version](../index.md#def-system-version) states the design-time version / release of a [system instance](../index.md#def-system-instance). + * It provides versioning for operational purposes for the [system type](../index.md#def-system-type). + */ +export interface SystemVersion { + /** + * The version of the system instance (run-time) or the version of the described system-version perspective. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * + * MUST be provided if the ORD document is `perspective`: `system-version`. + * + * For continuous-delivery systems, the version MAY be fixed to the same value, e.g. `1.0.0`, but be aware that phased rollouts may benefit from a more precise versioning like adding a build number. + */ + version?: string; + /** + * Human-readable title of the system version. + */ + title?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; } /** * The API Resource provides a high-level description of an exposed API. @@ -197,316 +299,437 @@ export interface DocumentationLabels { * If the API is not created or owned by the user of the system or by third parties (like partners), it MUST be assigned to dedicated [Packages](#package) that state this the ownership via the `vendor` property. */ export interface APIResource { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description: string; - /** - * Defines which Package the resource is part of. - * - * MUST be a valid reference to a [Package](#package) ORD ID. - * - * Every resource MUST be part of one package. - */ - partOfPackage: string; - /** - * List of references to the consumption bundles in this resource belongs to. - * - * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. - * - * An API resource SHOULD be associated to one or multiple consumption bundles, if it is of direction `inbound` or `mixed`. - * Some ORD consumer use cases MAY depend on an association to a consumption bundle. - * If none is given, the resource may not appear as it's unknown how it can be consumed. - * - * If a resource has no direct incoming consumption characteristics: - * - MUST NOT assign consumption bundle to API or Event resources with `direction`: `outbound` (no inbound consumption) - * - MUST NOT assign consumption bundle if resource is not accessible directly, but only via intermediaries like event brokers or gateways. - * - In this case the intermediary SHOULD describe the consumption bundle instead (potentially also re-describing the resources as well). - */ - partOfConsumptionBundles?: ConsumptionBundleReference[]; - /** - * References the default consumption bundle to use for this resource. - * - * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. - * - * Can be used by clients to make a deterministic and preferred choice when multiple options are available. - * - * The value MUST be an existing option in the corresponding `partOfConsumptionBundles` array. - */ - defaultConsumptionBundle?: string; - /** - * List of products this resource is a part of. - * - * MUST be a valid reference to a [Product](#product) ORD ID. - * - * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - * - * @minItems 0 - */ - partOfProducts?: string[]; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * The visibility/exposure of the described resource. - * This indicates who is allowed to see (and implicitly also access) the described resource. - */ - visibility: "public" | "internal" | "private"; - /** - * The `releaseStatus` specifies the stability of the resource and its external contract. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. - * This can happen either because it has not been setup for use or disabled by an admin / user. - * - * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. - * - * This only needs to reflect the knowledge of the described system instance itself, - * meaning that outside factors don't need to be considered (e.g. network connectivity, middlewares). - * This information may be of relevance for some ORD consumers that need to filter for active or disabled APIs. - * - * A disabled resource MAY skip describing its resource definitions. - * - */ - disabled?: boolean; - /** - * The deprecation date defines when the resource has been set as deprecated. - * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. - * - * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - deprecationDate?: string; - /** - * The sunset date defines when the resource is scheduled to be decommissioned/removed. - * - * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` MUST be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - sunsetDate?: string; - /** - * The successor resource(s). - * - * MUST be a valid reference to an ORD ID. - * - * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. - */ - successors?: string[]; - /** - * Contains changelog entries that summarize changes with special regards to version and releaseStatus - */ - changelogEntries?: ChangelogEntry[]; - /** - * List of [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the target host. - * - * If the API resource can be accessed through an entry point, it MUST be described here. - * - * The list of entry points MUST not include duplicates. - * If multiple entry points are provided they MUST be arbitrarily exchangeable without effects. - * This means that the URLs are just an alias to each other and the `resourceDefinitions` apply to all entry points equally. - * In case of multiple entry points it is RECOMMENDED to provide a `defaultEntryPoint` through `partOfConsumptionBundles`. - * The entry point URLs SHOULD match with the target host(s) in the resource definition files (e.g. OpenAPI `servers`). - * If there is no match, the information in ORD takes precedence. - * - * **Provider View:** - * If the URL is relative to the system that describes the ORD information, - * it is RECOMMENDED to use relative references and (if known) to provide the `describedSystemInstance`.`baseUrl`. - * If the URL is not relative to the described system instance [base URL](../index.md#def-base-url), a full URL MUST be provided. - * - * **Consumer View**: - * When fetching the information from an ORD Aggregator, the consumer MAY rely on receiving full URLs. - * - * @minItems 0 - */ - entryPoints?: string[]; - /** - * Direction of the API Resource consumption. - * If not provided, "inbound" is assumed. - * - * In case of SOAP APIs, the direction is already indicated through the `apiProtocol`, making this property redundant and optional. But if it is provided, it MUST not be in contradiction with the `apiProtocol` direction. - */ - direction?: "inbound" | "mixed" | "outbound"; - /** - * API Protocol including the protocol version if applicable - */ - apiProtocol: "odata-v2" | "odata-v4" | "rest" | "graphql" | "delta-sharing" | "soap-inbound" | "soap-outbound" | "websocket" | "sap-rfc" | "sap-sql-api-v1" | "sap-ina-api-v1"; - /** - * List of available machine-readable resource definitions. - * - * It is RECOMMENDED to provide the resource definitions as they enable machine-readable use cases. - * If resource definitions are added or changed, the `version` MUST be incremented. - * An ORD aggregator MAY only (re)fetch the resource definitions again when the `version` was incremented. - */ - resourceDefinitions?: APIResourceDefinition[]; - /** - * Declares this API to be a valid implementation of an externally standardized API contract, sub-protocol or protocol variant. - * - * All APIs that share the same implementation standard MAY be treated the same or similar by a consumer client. - */ - implementationStandard?: "sap:ord-document-api:v1" | "cff:open-service-broker:v2" | "sap:csn-exposure:v1" | "sap:ape-api:v1" | "sap:cdi-api:v1" | "sap:hdlf-delta-sharing:v1" | "sap:hana-cloud-sql:v1" | "custom"; - /** - * If the fixed `implementationStandard` values need to be extended, an arbitrary `customImplementationStandard` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `implementationStandard` is set to `custom`. - */ - customImplementationStandard?: string; - /** - * Full description of the custom implementation standard, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * MUST only be provided if `implementationStandard` is set to `custom`. - * - * SHOULD contain documentation and links that describe the used standard. - */ - customImplementationStandardDescription?: string; - /** - * Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components. - */ - responsible?: string; - /** - * List of use cases (types) how the resource is meant to be used for. - * - * This helps consumers better to understand which use cases had been in mind by the provider - * and are therefore explicitly supported. - * This is obviously described from a provider perspective, but stating what consumer use cases it potentially supports. - * As it's not possible to create a list of options that are mutually exclusive, all options that apply should be provided. - * - * If no array is defined, it is assumed that this information is not provided. - */ - supportedUseCases?: (("data-federation" | "snapshot" | "incremental" | "streaming") & ("data-federation" | "snapshot" | "incremental" | "streaming"))[]; - usage?: Usage; - /** - * Describes mappings between the API Models of the described resource to the underlying, conceptual entity types. - */ - entityTypeMappings?: EntityTypeMapping[]; - /** - * Links with semantic meaning that are specific to API Resources. - */ - apiResourceLinks?: APIAndEventResourceLink[]; - /** - * Generic Links with arbitrary meaning and content. - * - * If applicable, `apiResourceLinks` MUST be used instead of generic `links`. - */ - links?: Link[]; - extensible?: Extensible; - /** - * List of countries that the package resources are applicable to. - * - * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). - * - * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - countries?: string[]; - /** - * List of line of business tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - lineOfBusiness?: ((string | "Asset Management" | "Commerce" | "Finance" | "Human Resources" | "Manufacturing" | "Marketing" | "R&D Engineering" | "Sales" | "Service" | "Sourcing and Procurement" | "Supply Chain" | "Sustainability" | "Metering" | "Grid Operations and Maintenance" | "Plant Operations and Maintenance" | "Maintenance and Engineering") & string)[]; - /** - * List of industry tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - industry?: ((string | "Aerospace and Defense" | "Automotive" | "Banking" | "Chemicals" | "Consumer Products" | "Defense and Security" | "Engineering Construction and Operations" | "Healthcare" | "Higher Education and Research" | "High Tech" | "Industrial Machinery and Components" | "Insurance" | "Life Sciences" | "Media" | "Mill Products" | "Mining" | "Oil and Gas" | "Professional Services" | "Public Sector" | "Retail" | "Sports and Entertainment" | "Telecommunications" | "Travel and Transportation" | "Utilities" | "Wholesale Distribution") & string)[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; - /** - * The [policy level](../../spec-extensions/access-strategies/) (aka. compliance level) that this ORD Document or part of it needs to be compliant with. - * Depending on the chosen policy level, certain expectations and validations rules will be applied. - * - * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. - * - * If not provided, no additional policy level expectations and validations apply. - * - */ - policyLevel?: "none" | "sap:core:v1" | "custom"; - /** - * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. - * - * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. - * - * MUST only be provided if `policyLevel` is set to `custom`. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - */ - customPolicyLevel?: string; - /** - * Defines whether this ORD resource is **system instance aware**. - * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. - * - * If this behavior applies, `systemInstanceAware` MUST be set to true. - * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, - * not just once per system type, but once per **system instance**. - */ - systemInstanceAware?: boolean; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description: string; + /** + * Defines which Package the resource is part of. + * + * MUST be a valid reference to a [Package](#package) ORD ID. + * + * Every resource MUST be part of one package. + */ + partOfPackage: string; + /** + * Defines which groups the resource is assigned to. + * + * The property is optional, but if given the value MUST be an array of valid Group IDs. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * All resources that share the same group ID assignment are effectively grouped together. + */ + partOfGroups?: string[]; + /** + * List of references to the consumption bundles in this resource belongs to. + * + * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. + * + * An API resource SHOULD be associated to one or multiple consumption bundles, if it is of direction `inbound` or `mixed`. + * Some ORD consumer use cases MAY depend on an association to a consumption bundle. + * If none is given, the resource may not appear as it's unknown how it can be consumed. + * + * If a resource has no direct incoming consumption characteristics: + * - MUST NOT assign consumption bundle to API or Event resources with `direction`: `outbound` (no inbound consumption) + * - MUST NOT assign consumption bundle if resource is not accessible directly, but only via intermediaries like event brokers or gateways. + * - In this case the intermediary SHOULD describe the consumption bundle instead (potentially also re-describing the resources as well). + */ + partOfConsumptionBundles?: ConsumptionBundleReference[]; + /** + * References the default consumption bundle to use for this resource. + * + * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. + * + * Can be used by clients to make a deterministic and preferred choice when multiple options are available. + * + * The value MUST be an existing option in the corresponding `partOfConsumptionBundles` array. + */ + defaultConsumptionBundle?: string; + /** + * List of products the resources of the package are a part of. + * + * MUST be a valid reference to a [Product](#product) ORD ID. + * + * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + * + * @minItems 0 + */ + partOfProducts?: string[]; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility states who is allowed to "see" the described resource or capability. + */ + visibility: "public" | "internal" | "private"; + /** + * The `releaseStatus` specifies the stability of the resource and its external contract. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. + * This can happen either because it has not been setup for use or disabled by an admin / user. + * + * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. + * + * This property can only reflect the knowledge of the described system instance itself. + * Outside factors for availability can't need to be considered (e.g. network connectivity, middlewares). + * + * A disabled resource MAY skip describing its resource definitions. + * + */ + disabled?: boolean; + /** + * The resource has been introduced in the given [system version](../index.md#def-system-version). + * This implies that the resource is only available if the system instance is of at least that system version. + */ + minSystemVersion?: string; + /** + * The deprecation date defines when the resource has been set as deprecated. + * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. + * + * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + deprecationDate?: string; + /** + * The sunset date defines when the resource is scheduled to be decommissioned/removed. + * + * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` SHOULD be provided (if already known). + * Once the sunset date is known and ready to be communicated externally, it MUST be provided here. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + sunsetDate?: string; + /** + * The successor resource(s). + * + * MUST be a valid reference to an ORD ID. + * + * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. + * If `successors` is given, the described resource SHOULD set its `releaseStatus` to `deprecated`. + */ + successors?: string[]; + /** + * Contains changelog entries that summarize changes with special regards to version and releaseStatus + */ + changelogEntries?: ChangelogEntry[]; + /** + * List of [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the target host. + * + * If the API resource can be accessed through an entry point, it MUST be described here. + * + * The list of entry points MUST not include duplicates. + * If multiple entry points are provided they MUST be arbitrarily exchangeable without effects. + * This means that the URLs are just an alias to each other and the `resourceDefinitions` apply to all entry points equally. + * In case of multiple entry points it is RECOMMENDED to provide a `defaultEntryPoint` through `partOfConsumptionBundles`. + * The entry point URLs SHOULD match with the target host(s) in the resource definition files (e.g. OpenAPI `servers`). + * If there is no match, the information in ORD takes precedence. + * + * **Provider View:** + * If the URL is relative to the system that describes the ORD information, + * it is RECOMMENDED to use relative references and (if known) to provide the `describedSystemInstance`.`baseUrl`. + * If the URL is not relative to the described system instance [base URL](../index.md#def-base-url), a full URL MUST be provided. + * + * **Consumer View**: + * When fetching the information from an ORD Aggregator, the consumer MAY rely on receiving full URLs. + * + * @minItems 0 + */ + entryPoints?: string[]; + /** + * Direction of the API Resource consumption. + * If not provided, "inbound" is assumed. + * + * In case of SOAP APIs, the direction is already indicated through the `apiProtocol`, making this property redundant and optional. But if it is provided, it MUST not be in contradiction with the `apiProtocol` direction. + */ + direction?: "inbound" | "mixed" | "outbound"; + /** + * API Protocol including the protocol version if applicable + */ + apiProtocol: + | "odata-v2" + | "odata-v4" + | "rest" + | "graphql" + | "delta-sharing" + | "soap-inbound" + | "soap-outbound" + | "websocket" + | "sap-rfc" + | "sap-sql-api-v1" + | "sap-ina-api-v1"; + /** + * List of available machine-readable definitions, which describe the resource or capability in detail. + * + * Each definition is to be understood as an alternative description format, describing the same resource / capability. + * As a consequence the same definition type MUST NOT be provided more than once. + * + * It is RECOMMENDED to provide the definitions as they enable machine-readable use cases. + * If the definitions are added or changed, the `version` MUST be incremented. + * An ORD aggregator MAY only (re)fetch the definitions again when the `version` was incremented. + */ + resourceDefinitions?: APIResourceDefinition[]; + /** + * Declares this API to be a valid implementation of an externally standardized API contract, sub-protocol or protocol variant. + * + * All APIs that share the same implementation standard MAY be treated the same or similar by a consumer client. + */ + implementationStandard?: + | "sap:ord-document-api:v1" + | "cff:open-service-broker:v2" + | "sap:csn-exposure:v1" + | "sap:ape-api:v1" + | "sap:cdi-api:v1" + | "sap:delta-sharing:v1" + | "sap:hana-cloud-sql:v1" + | "sap.dp:data-subscription-api:v1" + | "custom"; + /** + * If the fixed `implementationStandard` values need to be extended, an arbitrary `customImplementationStandard` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `implementationStandard` is set to `custom`. + */ + customImplementationStandard?: string; + /** + * Full description of the custom implementation standard, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * MUST only be provided if `implementationStandard` is set to `custom`. + * + * SHOULD contain documentation and links that describe the used standard. + */ + customImplementationStandardDescription?: string; + /** + * Declares this API is a compatible implementation of the referenced API contract(s). + * This is also sometimes known as [Service Provider Interface](https://en.wikipedia.org/wiki/Service_provider_interface). + * + * MUST be a valid reference to an (usually external) [API Resource](#api-resource) ORD ID. + * + * All APIs that share the same `compatibleWith` value MAY be treated the same or similar by a consumer client. + */ + compatibleWith?: string[]; + /** + * Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components. + */ + responsible?: string; + /** + * List of use cases (types) how the resource is meant to be used for. + * + * This helps consumers better to understand which use cases had been in mind by the provider + * and are therefore explicitly supported. + * This is obviously described from a provider perspective, but stating what consumer use cases it potentially supports. + * As it's not possible to create a list of options that are mutually exclusive, all options that apply should be provided. + * + * If no array is defined, it is assumed that this information is not provided. + */ + supportedUseCases?: ("data-federation" | "snapshot" | "incremental" | "streaming")[]; + usage?: Usage; + /** + * Describes mappings between the API Models of the described resource to the underlying, conceptual entity types. + */ + entityTypeMappings?: EntityTypeMapping[]; + /** + * Links with semantic meaning that are specific to API Resources. + */ + apiResourceLinks?: APIAndEventResourceLink[]; + /** + * Generic Links with arbitrary meaning and content. + * + * If applicable, `apiResourceLinks` MUST be used instead of generic `links`. + */ + links?: Link[]; + extensible?: Extensible; + /** + * List of countries that the package resources are applicable to. + * + * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). + * + * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + countries?: string[]; + /** + * List of line of business tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + lineOfBusiness?: (( + | string + | "Asset Management" + | "Commerce" + | "Finance" + | "Human Resources" + | "Manufacturing" + | "Marketing" + | "R&D Engineering" + | "Sales" + | "Service" + | "Sourcing and Procurement" + | "Supply Chain" + | "Sustainability" + | "Metering" + | "Grid Operations and Maintenance" + | "Plant Operations and Maintenance" + | "Maintenance and Engineering" + ) & + string)[]; + /** + * List of industry tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + industry?: (( + | string + | "Aerospace and Defense" + | "Automotive" + | "Banking" + | "Chemicals" + | "Consumer Products" + | "Defense and Security" + | "Engineering Construction and Operations" + | "Healthcare" + | "Higher Education and Research" + | "High Tech" + | "Industrial Machinery and Components" + | "Insurance" + | "Life Sciences" + | "Media" + | "Mill Products" + | "Mining" + | "Oil and Gas" + | "Professional Services" + | "Public Sector" + | "Retail" + | "Sports and Entertainment" + | "Telecommunications" + | "Travel and Transportation" + | "Utilities" + | "Wholesale Distribution" + ) & + string)[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with. + * Depending on the chosen policy level, additional expectations and validations rules will be applied. + * + * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + */ + policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom"; + /** + * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. + * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. + * + * MUST only be provided if `policyLevel` is set to `custom`. + * MUST be a valid [Specification ID](../index.md#specification-id). + */ + customPolicyLevel?: string; + /** + * A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with. + * For each chosen policy level, additional expectations and validations rules will be applied. + * + * Policy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + * A policy level MUST be a valid [Specification ID](../index.md#specification-id). + */ + policyLevels?: string[]; + /** + * All resources that are [system instance aware](../index.md#def-system-instance-aware) should now be put together in one ORD document that has `perspective`: `system-instance`. + * All resources that are [system instance unaware](../index.md#def-system-instance-unaware) should now be put together in one ORD document that has `perspective`: `system-version`. + * + * Defines whether this ORD resource is **system instance aware**. + * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. + * + * If this behavior applies, `systemInstanceAware` MUST be set to true. + * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, + * not just once per system type, but once per **system instance**. + */ + systemInstanceAware?: boolean; } /** * Reference to a Consumption bundle. @@ -514,118 +737,138 @@ export interface APIResource { * This is a complex object to allow additional properties / selections to be attached. */ export interface ConsumptionBundleReference { - /** - * The consumption bundle ORD ID (`ConsumptionBundle.ordId`) this reference points to. - */ - ordId: string; - /** - * In case that an API Resource has multiple entry points, this will indicate which entry point should be used by default - * when discovering this resource from the context of the referenced Consumption Bundle. - * - * MUST NOT be provided for Event Resources, as they don't have entry points. - * MUST only be provided if the resource has more than one entry point. - * MUST be in the list of `entryPoints` of the affected resource. - */ - defaultEntryPoint?: string; + /** + * The consumption bundle ORD ID (`ConsumptionBundle.ordId`) this reference points to. + */ + ordId: string; + /** + * In case that an API Resource has multiple entry points, this will indicate which entry point should be used by default + * when discovering this resource from the context of the referenced Consumption Bundle. + * + * MUST NOT be provided for Event Resources, as they don't have entry points. + * MUST only be provided if the resource has more than one entry point. + * MUST be in the list of `entryPoints` of the affected resource. + */ + defaultEntryPoint?: string; } /** * A changelog entry can be used to indicate changes. * Usually they lead to a change of the version number or the release status. */ export interface ChangelogEntry { - /** - * Full version number that corresponds to the `version` that is described by the changelog entry. - * - * Ideally it follows the [Semantic Versioning 2.0.0](https://semver.org/) standard, - * but since it should reflect the actual version string / scheme used, this is not a mandatory requirement. - */ - version: string; - /** - * The `releaseStatus` specifies the stability of the resource and its external contract. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * Date of change, without time or timezone information. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - date: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * Optional [URL](https://tools.ietf.org/html/rfc3986) that links to a more detailed changelog entry. - */ - url?: string; + /** + * Full version number that corresponds to the `version` that is described by the changelog entry. + * + * Ideally it follows the [Semantic Versioning 2.0.0](https://semver.org/) standard, + * but since it should reflect the actual version string / scheme used, this is not a mandatory requirement. + */ + version: string; + /** + * The `releaseStatus` specifies the stability of the resource and its external contract. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * Date of change, without time or timezone information. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + date: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * Optional [URL](https://tools.ietf.org/html/rfc3986) that links to a more detailed changelog entry. + * + * The link target MUST be absolute and SHOULD be openly accessible. + */ + url?: string; } /** * Link and categorization of a machine-readable API definition. * For example, OpenAPI definition, OData Metadata, etc. */ export interface APIResourceDefinition { - /** - * Type of the API Resource Definition - * If "custom" is chosen, a customType MUST be provided - */ - type: "openapi-v2" | "openapi-v3" | "raml-v1" | "edmx" | "csdl-json" | "graphql-sdl" | "wsdl-v1" | "wsdl-v2" | "sap-rfc-metadata-v1" | "sap-sql-api-definition-v1" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format. - * A consuming application can use this information to know which file format parser it needs to use. - * For example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON. - * - * If no Media Type is registered for the referenced file, - * `text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data. - * - */ - mediaType: "application/json" | "application/xml" | "text/yaml" | "text/plain" | "application/octet-stream"; - /** - * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file. - * - * It is RECOMMENDED to provide a relative URL (to base URL), starting with `/`. - */ - url: string; - /** - * List of supported access strategies for retrieving metadata from the ORD provider. - * An ORD Consumer/ORD Aggregator MAY choose any of the strategies. - * - * If this property is not provided, the definition URL will be available through the same access strategy as this ORD document. - * We RECOMMEND anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process. - * - * @minItems 1 - */ - accessStrategies?: [AccessStrategy, ...AccessStrategy[]]; + /** + * Type of the API Resource Definition + * If "custom" is chosen, a customType MUST be provided + */ + type: + | "openapi-v2" + | "openapi-v3" + | "raml-v1" + | "edmx" + | "csdl-json" + | "graphql-sdl" + | "wsdl-v1" + | "wsdl-v2" + | "sap-rfc-metadata-v1" + | "sap-sql-api-definition-v1" + | "sap-csn-interop-effective-v1" + | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format. + * A consuming application can use this information to know which file format parser it needs to use. + * For example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON. + * + * If no Media Type is registered for the referenced file, + * `text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data. + * + */ + mediaType: "application/json" | "application/xml" | "text/yaml" | "text/plain" | "application/octet-stream"; + /** + * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file. + * + * It is RECOMMENDED to provide a relative URL (to base URL). + */ + url: string; + /** + * List of supported access strategies for retrieving metadata from the ORD provider. + * An ORD Consumer/ORD Aggregator MAY choose any of the strategies. + * + * The access strategies only apply to the metadata access and not the actual API access. + * The actual access to the APIs for clients is described via Consumption Bundles. + * + * If this property is not provided, the definition URL will be available through the same access strategy as this ORD document. + * It is RECOMMENDED anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process. + * + * @minItems 1 + */ + accessStrategies?: [AccessStrategy, ...AccessStrategy[]]; } /** * Defines the [access strategy](../../spec-extensions/access-strategies/) for accessing the resource definitions. */ export interface AccessStrategy { - /** - * Defines the authentication/authorization strategy through which the referenced `resourceDefinitions` are accessible. - */ - type: "open" | "sap:cmp-mtls:v1" | "sap.businesshub:basic-auth:v1" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * Human-readable description about how the access is set up, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * MUST only be provided if `type` is set to `custom`. - */ - customDescription?: string; + /** + * Defines the authentication/authorization strategy through which the referenced `resourceDefinitions` are accessible. + */ + type: "open" | "sap:oauth-client-credentials:v1" | "sap:cmp-mtls:v1" | "sap.businesshub:basic-auth:v1" | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * Human-readable description about how the access is set up, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * MUST only be provided if `type` is set to `custom`. + */ + customDescription?: string; } /** * An API or Event resource may optionally define its `entityTypeMappings`. @@ -641,8 +884,8 @@ export interface AccessStrategy { * For the various resource definition formats the selection of API models may need to be expressed differently. * As a consequence, there are different types of selectors that are specialized toward certain resource definition formats. * - * The target of the mapping is a correlation to an entity type via a [Correlation ID](https://sap.github.io/open-resource-discovery/#/v1/README?id=correlation-id) - * or to an [ORD ID] of an entity type. + * The target of the mapping is a correlation to an entity type via a [Correlation ID](../../#/v1/README?id=correlation-id) + * or to an [ORD ID](../../spec-v1/#ord-id) of an entity type. * It is assumed that the entity types are described in more detail or on a different abstraction level via metadata. * When the correlation ID is used, an ORD consumer may need to know how to access the entity type metadata through conventions. * This can be determined either by the namespace of the correlation ID, @@ -652,35 +895,35 @@ export interface AccessStrategy { * To indicate this, the service needs to be implemented and described in ORD with `implementationStandard` set to `sap:csn-exposure:v1`). * * ODM 2.0 relies on the entity type mappings and uses the the mapping to express the relationship of an API to the - * corresponding ODM entity. ORD consumers like SAP Business Accelerator Hub consume the mapping to make the relationships navigatable for customers. + * corresponding ODM entity. ORD consumers like SAP Business Accelerator Hub consume the mapping to make the relationships navigate-able for customers. */ export interface EntityTypeMapping { - /** - * List of selectors for API models within an API Resource. - * If multiple selectors are given, every selected API model maps to the entity type target(s). - * If omitted, the complete API resource will be mapped to the `entityTypeTargets` (less specific). - * - * Multiple selectors can be useful, e.g. with a CRUD REST API, to combine the similar API models. - * - * Depending on the chosen API protocol and the available resource definition formats, - * different kind of selectors need to be used. - */ - apiModelSelectors?: (APIModelSelectorOData | APIModelSelectorJSONPointer)[]; - /** - * List of entity types the ORD resource maps to. - * If `apiModelSelectors` are given, the mapping is more precise by also pointing to the specific model in the API. - * - * If multiple entity types are defined as the mapping target, - * all of them can be at least partially mapped to the source API model(s). - * - * Entity types can be referenced using either using an [ORD ID](https://sap.github.io/open-resource-discovery/spec-v1/#ord-id) or a [Correlation ID](https://sap.github.io/open-resource-discovery/spec-v1/#correlation-id). - * - * @minItems 1 - */ - entityTypeTargets: [ - EntityTypeTargetORDID | EntityTypeTargetCorrelationID, - ...(EntityTypeTargetORDID | EntityTypeTargetCorrelationID)[] - ]; + /** + * List of selectors for API models within an API Resource. + * If multiple selectors are given, every selected API model maps to the entity type target(s). + * If omitted, the complete API resource will be mapped to the `entityTypeTargets` (less specific). + * + * Multiple selectors can be useful, e.g. with a CRUD REST API, to combine the similar API models. + * + * Depending on the chosen API protocol and the available resource definition formats, + * different kind of selectors need to be used. + */ + apiModelSelectors?: (APIModelSelectorOData | APIModelSelectorJSONPointer)[]; + /** + * List of entity types the ORD resource maps to. + * If `apiModelSelectors` are given, the mapping is more precise by also pointing to the specific model in the API. + * + * If multiple entity types are defined as the mapping target, + * all of them can be at least partially mapped to the source API model(s). + * + * Entity types can be referenced using either using an [ORD ID](../../spec-v1/#ord-id) or a [Correlation ID](../../spec-v1/#correlation-id). + * + * @minItems 1 + */ + entityTypeTargets: [ + EntityTypeTargetORDID | EntityTypeTargetCorrelationID, + ...(EntityTypeTargetORDID | EntityTypeTargetCorrelationID)[] + ]; } /** * API Model Selector for OData, using entity set names for the selection. @@ -688,16 +931,16 @@ export interface EntityTypeMapping { * MUST only be used if the API Resource provides an API Resource Definition of type `edmx`. */ export interface APIModelSelectorOData { - /** - * The type for OData selectors is fixed to `odata`. - */ - type: "odata"; - /** - * OData entity set name. - * - * As defined in the EDMX, e.g. ``. - */ - entitySetName: string; + /** + * The type for OData selectors is fixed to `odata`. + */ + type: "odata"; + /** + * OData entity set name. + * + * As defined in the EDMX, e.g. ``. + */ + entitySetName: string; } /** * Generic API Model Selector for JSON / YAML based resource definitions. @@ -709,85 +952,96 @@ export interface APIModelSelectorOData { * MUST only be used if the API Resource provides an API Resource Definition of media type `application/json` or `text/yaml`. */ export interface APIModelSelectorJSONPointer { - /** - * The type for generic JSON Pointer selectors is fixed to `json-pointer`. - */ - type: "json-pointer"; - /** - * JSON Pointer to the entity type schema / description within the resource definition format. - * - * MUST be a valid JSON Pointer according to [RFC6901](https://datatracker.ietf.org/doc/html/rfc6901). - * - * The JSON pointers MUST point to each instance of the mapped entity type in the resource definition file, BEFORE `$ref` JSON Schema References are resolved (dereferenced). - */ - jsonPointer: string; + /** + * The type for generic JSON Pointer selectors is fixed to `json-pointer`. + */ + type: "json-pointer"; + /** + * JSON Pointer to the entity type schema / description within the resource definition format. + * + * MUST be a valid JSON Pointer according to [RFC6901](https://datatracker.ietf.org/doc/html/rfc6901). + * + * The JSON pointers MUST point to each instance of the mapped entity type in the resource definition file, BEFORE `$ref` JSON Schema References are resolved (dereferenced). + */ + jsonPointer: string; } /** * Define which entity type is the target of an entity type mapping * - * Entity types can be referenced using a [ORD ID](https://sap.github.io/open-resource-discovery/spec-v1/#ord-id) of an entity type. + * Entity types can be referenced using a [ORD ID](../../spec-v1/#ord-id) of an entity type. */ export interface EntityTypeTargetORDID { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; } /** * Define which entity type is the target of an entity type mapping * - * Entity types can be referenced using a [Correlation ID](https://sap.github.io/open-resource-discovery/spec-v1/#correlation-id). + * Entity types can be referenced using a [Correlation ID](../../spec-v1/#correlation-id). */ export interface EntityTypeTargetCorrelationID { - correlationId: string; + correlationId: string; } /** * Links with specific semantic meaning that are related to API or event resources. * - * If a generic `Link` can also be expressed via an `APIEventResourceLink`, the latter MUST be chosen. + * If a generic [Link](#link) can also be expressed via an API / Event Resource Link, the latter MUST be chosen. */ export interface APIAndEventResourceLink { - /** - * See also: [WADG0001 WebAPI type extension](https://webapi-discovery.github.io/rfcs/rfc0001.html#webapiactions) - */ - type: "api-documentation" | "authentication" | "client-registration" | "console" | "payment" | "service-level-agreement" | "support" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the endpoint or UI for the action. - * - * If the link is relative to base URL, it is RECOMMENDED to provide a relative URL to it, starting with `/`. - */ - url: string; + /** + * See also: [WADG0001 WebAPI type extension](https://webapi-discovery.github.io/rfcs/rfc0001.html#webapiactions) + */ + type: + | "api-documentation" + | "authentication" + | "client-registration" + | "console" + | "payment" + | "service-level-agreement" + | "support" + | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the API or Event Resource Link. + * + * The link target SHOULD be absolute and SHOULD be openly accessible. + * If a relative link is given, it is relative to the [`describedSystemInstance.baseUrl`](#system-instance_baseurl). + */ + url: string; } /** * Link that can be attached to packages or Open Resource Discovery resources. * */ export interface Link { - /** - * Human readable title of the link. - * - * MUST be unique within the collection of links provided. - */ - title: string; - /** - * [URL](https://tools.ietf.org/html/rfc3986) of the link. - */ - url: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown) - */ - description?: string; - [k: string]: any | undefined; + /** + * Human readable title of the link. + * + * MUST be unique within the collection of links provided. + */ + title: string; + /** + * [URL](https://tools.ietf.org/html/rfc3986) of the link. + * + * The link target MUST be absolute and SHOULD be openly accessible. + */ + url: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown) + */ + description?: string; + [k: string]: any | undefined; } /** * Contains information about the extensibility of this resource. @@ -795,23 +1049,23 @@ export interface Link { * If applicable, a description and further resources about extending this resource are provided. */ export interface Extensible { - /** - * This property defines whether the resource is extensible. - * - * **Not extensible** means that the data model of the resource (i.e. API or event) cannot be extended with custom fields. - * **Manually extensible** means that in addition to defining a custom field, manual activities to include the field in the data model of the resource (i.e. API or event) are required. E.g. using a specific mapping tool or by selecting the resource in the data model extension tool. - * **Automatically extensible** means that after defining a custom field in the local domain model, the resource (i.e. API or event) is automatically extended as part of the default extension field definition. - */ - supported: "no" | "manual" | "automatic"; - /** - * A description about the extensibility capabilities of this API, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * This description may contain detailed steps on how to extend the API. - * Links to external resources can be provided within the description as markdown links. - * - * This description MUST be provided if `supported` is set to `manual` or `automatic`. - */ - description?: string; + /** + * This property defines whether the resource is extensible. + * + * **Not extensible** means that the data model of the resource (i.e. API or event) cannot be extended with custom fields. + * **Manually extensible** means that in addition to defining a custom field, manual activities to include the field in the data model of the resource (i.e. API or event) are required. E.g. using a specific mapping tool or by selecting the resource in the data model extension tool. + * **Automatically extensible** means that after defining a custom field in the local domain model, the resource (i.e. API or event) is automatically extended as part of the default extension field definition. + */ + supported: "no" | "manual" | "automatic"; + /** + * A description about the extensibility capabilities of this API, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * This description may contain detailed steps on how to extend the API. + * Links to external resources can be provided within the description as markdown links. + * + * This description MUST be provided if `supported` is set to `manual` or `automatic`. + */ + description?: string; } /** * The event resource provides a high-level description of a collection of related Events. More detailed information, such as the event resource definitions, are provided in links in the table below. @@ -820,497 +1074,658 @@ export interface Extensible { * If the event resource is not created or owned by the user / customer of the system or by partners / third parties, it MUST be assigned to dedicated [Packages](#package) that state this the ownership via the `vendor` property. */ export interface EventResource { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description: string; - /** - * Defines which Package the resource is part of. - * - * MUST be a valid reference to a [Package](#package) ORD ID. - * - * Every resource MUST be part of one package. - */ - partOfPackage: string; - /** - * List of references to the consumption bundles in this resource belongs to. - * - * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. - * - * An API resource SHOULD be associated to one or multiple consumption bundles, if it is of direction `inbound` or `mixed`. - * Some ORD consumer use cases MAY depend on an association to a consumption bundle. - * If none is given, the resource may not appear as it's unknown how it can be consumed. - * - * If a resource has no direct incoming consumption characteristics: - * - MUST NOT assign consumption bundle to API or Event resources with `direction`: `outbound` (no inbound consumption) - * - MUST NOT assign consumption bundle if resource is not accessible directly, but only via intermediaries like event brokers or gateways. - * - In this case the intermediary SHOULD describe the consumption bundle instead (potentially also re-describing the resources as well). - */ - partOfConsumptionBundles?: ConsumptionBundleReference[]; - /** - * References the default consumption bundle to use for this resource. - * - * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. - * - * Can be used by clients to make a deterministic and preferred choice when multiple options are available. - * - * The value MUST be an existing option in the corresponding `partOfConsumptionBundles` array. - */ - defaultConsumptionBundle?: string; - /** - * List of products this resource is a part of. - * - * MUST be a valid reference to a [Product](#product) ORD ID. - * - * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - * - * @minItems 0 - */ - partOfProducts?: string[]; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * The visibility/exposure of the described resource. - * This indicates who is allowed to see (and implicitly also access) the described resource. - */ - visibility: "public" | "internal" | "private"; - /** - * The `releaseStatus` specifies the stability of the resource and its external contract. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. - * This can happen either because it has not been setup for use or disabled by an admin / user. - * - * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. - * - * This only needs to reflect the knowledge of the described system instance itself, - * meaning that outside factors don't need to be considered (e.g. network connectivity, middlewares). - * This information may be of relevance for some ORD consumers that need to filter for active or disabled APIs. - * - * A disabled resource MAY skip describing its resource definitions. - * - */ - disabled?: boolean; - /** - * The deprecation date defines when the resource has been set as deprecated. - * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. - * - * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - deprecationDate?: string; - /** - * The sunset date defines when the resource is scheduled to be decommissioned/removed. - * - * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` MUST be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - sunsetDate?: string; - /** - * The successor resource(s). - * - * MUST be a valid reference to an ORD ID. - * - * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. - */ - successors?: string[]; - /** - * Contains changelog entries that summarize changes with special regards to version and releaseStatus - */ - changelogEntries?: ChangelogEntry[]; - /** - * List of available machine-readable resource definitions. - * - * It is RECOMMENDED to provide resource definitions (if applicable) as they enable machine-readable use cases. - * If resource definitions are added or changed, the `version` MUST be incremented. - * An ORD aggregator MAY only (re)fetch the resource definitions again when the `version` was incremented. - */ - resourceDefinitions?: EventResourceDefinition[]; - /** - * Declares this EventResource to be a valid implementation of a standardized or shared contract. - * - * All implementations of the same implementation standard MAY be treated the same by a consumer. - * However, there MAY be differences in the access strategy, and compatible customizations by the implementer. - * The implementation standard MAY define the role of the implementor (producer, consumer, both) and how it is determined. - * - * As of now, only custom implementation standards are supported. - */ - implementationStandard?: "custom"; - /** - * If the fixed `implementationStandard` values need to be extended, an arbitrary `customImplementationStandard` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `implementationStandard` is set to `custom`. - */ - customImplementationStandard?: string; - /** - * Full description of the custom implementation standard, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * MUST only be provided if `implementationStandard` is set to `custom`. - * - * SHOULD contain documentation and links that describe the used standard. - */ - customImplementationStandardDescription?: string; - /** - * Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components. - */ - responsible?: string; - /** - * Describes mappings between the API Models of the described resource to the underlying, conceptual entity types. - */ - entityTypeMappings?: EntityTypeMapping[]; - /** - * Links with semantic meaning that are specific to event resources. - * - * If applicable, `eventResourceLinks` MUST be used instead of generic `links`. - */ - eventResourceLinks?: APIAndEventResourceLink[]; - /** - * Generic Links with arbitrary meaning and content. - */ - links?: Link[]; - extensible?: Extensible; - /** - * List of countries that the package resources are applicable to. - * - * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). - * - * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - countries?: string[]; - /** - * List of line of business tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - lineOfBusiness?: ((string | "Asset Management" | "Commerce" | "Finance" | "Human Resources" | "Manufacturing" | "Marketing" | "R&D Engineering" | "Sales" | "Service" | "Sourcing and Procurement" | "Supply Chain" | "Sustainability" | "Metering" | "Grid Operations and Maintenance" | "Plant Operations and Maintenance" | "Maintenance and Engineering") & string)[]; - /** - * List of industry tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - industry?: ((string | "Aerospace and Defense" | "Automotive" | "Banking" | "Chemicals" | "Consumer Products" | "Defense and Security" | "Engineering Construction and Operations" | "Healthcare" | "Higher Education and Research" | "High Tech" | "Industrial Machinery and Components" | "Insurance" | "Life Sciences" | "Media" | "Mill Products" | "Mining" | "Oil and Gas" | "Professional Services" | "Public Sector" | "Retail" | "Sports and Entertainment" | "Telecommunications" | "Travel and Transportation" | "Utilities" | "Wholesale Distribution") & string)[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; - /** - * The [policy level](../../spec-extensions/access-strategies/) (aka. compliance level) that this ORD Document or part of it needs to be compliant with. - * Depending on the chosen policy level, certain expectations and validations rules will be applied. - * - * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. - * - * If not provided, no additional policy level expectations and validations apply. - * - */ - policyLevel?: "none" | "sap:core:v1" | "custom"; - /** - * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. - * - * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. - * - * MUST only be provided if `policyLevel` is set to `custom`. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - */ - customPolicyLevel?: string; - /** - * Defines whether this ORD resource is **system instance aware**. - * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. - * - * If this behavior applies, `systemInstanceAware` MUST be set to true. - * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, - * not just once per system type, but once per **system instance**. - */ - systemInstanceAware?: boolean; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description: string; + /** + * Defines which Package the resource is part of. + * + * MUST be a valid reference to a [Package](#package) ORD ID. + * + * Every resource MUST be part of one package. + */ + partOfPackage: string; + /** + * Defines which groups the resource is assigned to. + * + * The property is optional, but if given the value MUST be an array of valid Group IDs. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * All resources that share the same group ID assignment are effectively grouped together. + */ + partOfGroups?: string[]; + /** + * List of references to the consumption bundles in this resource belongs to. + * + * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. + * + * An API resource SHOULD be associated to one or multiple consumption bundles, if it is of direction `inbound` or `mixed`. + * Some ORD consumer use cases MAY depend on an association to a consumption bundle. + * If none is given, the resource may not appear as it's unknown how it can be consumed. + * + * If a resource has no direct incoming consumption characteristics: + * - MUST NOT assign consumption bundle to API or Event resources with `direction`: `outbound` (no inbound consumption) + * - MUST NOT assign consumption bundle if resource is not accessible directly, but only via intermediaries like event brokers or gateways. + * - In this case the intermediary SHOULD describe the consumption bundle instead (potentially also re-describing the resources as well). + */ + partOfConsumptionBundles?: ConsumptionBundleReference[]; + /** + * References the default consumption bundle to use for this resource. + * + * MUST be a valid reference to a [Consumption Bundle](#consumption-bundle) ORD ID. + * + * Can be used by clients to make a deterministic and preferred choice when multiple options are available. + * + * The value MUST be an existing option in the corresponding `partOfConsumptionBundles` array. + */ + defaultConsumptionBundle?: string; + /** + * List of products the resources of the package are a part of. + * + * MUST be a valid reference to a [Product](#product) ORD ID. + * + * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + * + * @minItems 0 + */ + partOfProducts?: string[]; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility states who is allowed to "see" the described resource or capability. + */ + visibility: "public" | "internal" | "private"; + /** + * The `releaseStatus` specifies the stability of the resource and its external contract. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. + * This can happen either because it has not been setup for use or disabled by an admin / user. + * + * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. + * + * This property can only reflect the knowledge of the described system instance itself. + * Outside factors for availability can't need to be considered (e.g. network connectivity, middlewares). + * + * A disabled resource MAY skip describing its resource definitions. + * + */ + disabled?: boolean; + /** + * The resource has been introduced in the given [system version](../index.md#def-system-version). + * This implies that the resource is only available if the system instance is of at least that system version. + */ + minSystemVersion?: string; + /** + * The deprecation date defines when the resource has been set as deprecated. + * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. + * + * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + deprecationDate?: string; + /** + * The sunset date defines when the resource is scheduled to be decommissioned/removed. + * + * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` SHOULD be provided (if already known). + * Once the sunset date is known and ready to be communicated externally, it MUST be provided here. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + sunsetDate?: string; + /** + * The successor resource(s). + * + * MUST be a valid reference to an ORD ID. + * + * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. + * If `successors` is given, the described resource SHOULD set its `releaseStatus` to `deprecated`. + */ + successors?: string[]; + /** + * Contains changelog entries that summarize changes with special regards to version and releaseStatus + */ + changelogEntries?: ChangelogEntry[]; + /** + * List of available machine-readable definitions, which describe the resource or capability in detail. + * + * Each definition is to be understood as an alternative description format, describing the same resource / capability. + * As a consequence the same definition type MUST NOT be provided more than once. + * + * It is RECOMMENDED to provide the definitions as they enable machine-readable use cases. + * If the definitions are added or changed, the `version` MUST be incremented. + * An ORD aggregator MAY only (re)fetch the definitions again when the `version` was incremented. + */ + resourceDefinitions?: EventResourceDefinition[]; + /** + * Declares this EventResource to be a valid implementation of a standardized or shared contract. + * + * All implementations of the same implementation standard MAY be treated the same by a consumer. + * However, there MAY be differences in the access strategy, and compatible customizations by the implementer. + * The implementation standard MAY define the role of the implementor (producer, consumer, both) and how it is determined. + * + * As of now, only custom implementation standards are supported. + */ + implementationStandard?: "custom"; + /** + * If the fixed `implementationStandard` values need to be extended, an arbitrary `customImplementationStandard` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `implementationStandard` is set to `custom`. + */ + customImplementationStandard?: string; + /** + * Full description of the custom implementation standard, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * MUST only be provided if `implementationStandard` is set to `custom`. + * + * SHOULD contain documentation and links that describe the used standard. + */ + customImplementationStandardDescription?: string; + /** + * Declares this event resource is a compatible implementation of the referenced contract. + * This is also sometimes known as [Service Provider Interface](https://en.wikipedia.org/wiki/Service_provider_interface). + * + * MUST be a valid reference to an (usually external) [Event Resource](#event-resource) ORD ID. + * + * All event resources that share the same `compatibleWith` value MAY be treated the same or similar by a consumer client. + */ + compatibleWith?: string[]; + /** + * Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components. + */ + responsible?: string; + /** + * Describes mappings between the API Models of the described resource to the underlying, conceptual entity types. + */ + entityTypeMappings?: EntityTypeMapping[]; + /** + * Links with semantic meaning that are specific to event resources. + * + * If applicable, `eventResourceLinks` MUST be used instead of generic `links`. + */ + eventResourceLinks?: APIAndEventResourceLink[]; + /** + * Generic Links with arbitrary meaning and content. + */ + links?: Link[]; + extensible?: Extensible; + /** + * List of countries that the package resources are applicable to. + * + * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). + * + * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + countries?: string[]; + /** + * List of line of business tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + lineOfBusiness?: (( + | string + | "Asset Management" + | "Commerce" + | "Finance" + | "Human Resources" + | "Manufacturing" + | "Marketing" + | "R&D Engineering" + | "Sales" + | "Service" + | "Sourcing and Procurement" + | "Supply Chain" + | "Sustainability" + | "Metering" + | "Grid Operations and Maintenance" + | "Plant Operations and Maintenance" + | "Maintenance and Engineering" + ) & + string)[]; + /** + * List of industry tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + industry?: (( + | string + | "Aerospace and Defense" + | "Automotive" + | "Banking" + | "Chemicals" + | "Consumer Products" + | "Defense and Security" + | "Engineering Construction and Operations" + | "Healthcare" + | "Higher Education and Research" + | "High Tech" + | "Industrial Machinery and Components" + | "Insurance" + | "Life Sciences" + | "Media" + | "Mill Products" + | "Mining" + | "Oil and Gas" + | "Professional Services" + | "Public Sector" + | "Retail" + | "Sports and Entertainment" + | "Telecommunications" + | "Travel and Transportation" + | "Utilities" + | "Wholesale Distribution" + ) & + string)[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with. + * Depending on the chosen policy level, additional expectations and validations rules will be applied. + * + * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + */ + policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom"; + /** + * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. + * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. + * + * MUST only be provided if `policyLevel` is set to `custom`. + * MUST be a valid [Specification ID](../index.md#specification-id). + */ + customPolicyLevel?: string; + /** + * A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with. + * For each chosen policy level, additional expectations and validations rules will be applied. + * + * Policy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + * A policy level MUST be a valid [Specification ID](../index.md#specification-id). + */ + policyLevels?: string[]; + /** + * All resources that are [system instance aware](../index.md#def-system-instance-aware) should now be put together in one ORD document that has `perspective`: `system-instance`. + * All resources that are [system instance unaware](../index.md#def-system-instance-unaware) should now be put together in one ORD document that has `perspective`: `system-version`. + * + * Defines whether this ORD resource is **system instance aware**. + * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. + * + * If this behavior applies, `systemInstanceAware` MUST be set to true. + * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, + * not just once per system type, but once per **system instance**. + */ + systemInstanceAware?: boolean; } /** * Link and categorization of a machine-readable API definition. * For example, AsyncAPI or OpenAPI with callbacks, etc. */ export interface EventResourceDefinition { - /** - * Type of the event resource definition - */ - type: "asyncapi-v2" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format. - * A consuming application can use this information to know which file format parser it needs to use. - * For example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON. - * - * If no Media Type is registered for the referenced file, - * `text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data. - * - */ - mediaType: "application/json" | "application/xml" | "text/yaml" | "text/plain" | "application/octet-stream"; - /** - * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file. - * - * It is RECOMMENDED to provide a relative URL (to base URL), starting with `/`. - */ - url: string; - /** - * List of supported access strategies for retrieving metadata from the ORD provider. - * An ORD Consumer/ORD Aggregator MAY choose any of the strategies. - * - * If this property is not provided, the definition URL will be available through the same access strategy as this ORD document. - * We RECOMMEND anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process. - * - * @minItems 1 - */ - accessStrategies?: [AccessStrategy, ...AccessStrategy[]]; + /** + * Type of the event resource definition + */ + type: "asyncapi-v2" | "sap-csn-interop-effective-v1" | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format. + * A consuming application can use this information to know which file format parser it needs to use. + * For example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON. + * + * If no Media Type is registered for the referenced file, + * `text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data. + * + */ + mediaType: "application/json" | "application/xml" | "text/yaml" | "text/plain" | "application/octet-stream"; + /** + * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file. + * + * It is RECOMMENDED to provide a relative URL (to base URL). + */ + url: string; + /** + * List of supported access strategies for retrieving metadata from the ORD provider. + * An ORD Consumer/ORD Aggregator MAY choose any of the strategies. + * + * The access strategies only apply to the metadata access and not the actual API access. + * The actual access to the APIs for clients is described via Consumption Bundles. + * + * If this property is not provided, the definition URL will be available through the same access strategy as this ORD document. + * It is RECOMMENDED anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process. + * + * @minItems 1 + */ + accessStrategies?: [AccessStrategy, ...AccessStrategy[]]; } /** - * An entity type ideally describes an underlying conceptual model that is then exposed through one or multiple API and events resources. - * It is a well-defined named abstract concept in SAP software representing a data model and behavioral model of a concrete business or technical entity. + * An [**Entity Type**](../concepts/grouping-and-bundling#entity-type) describes either a business concept / term or an underlying conceptual model. + * The same entity type can be exposed through one or multiple API and events resources. * + * To learn more about the concept, see [Entity Type](../concepts/grouping-and-bundling#entity-type). */ export interface EntityType { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription?: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * Defines which Package the resource is part of. - * - * MUST be a valid reference to a [Package](#package) ORD ID. - * - * Every resource MUST be part of one package. - */ - partOfPackage: string; - /** - * List of products this resource is a part of. - * - * MUST be a valid reference to a [Product](#product) ORD ID. - * - * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - * - * @minItems 0 - */ - partOfProducts?: string[]; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * The visibility/exposure of the described resource. - * This indicates who is allowed to see (and implicitly also access) the described resource. - */ - visibility: "public" | "internal" | "private"; - /** - * The `releaseStatus` specifies the stability of the resource and its external contract. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * The deprecation date defines when the resource has been set as deprecated. - * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. - * - * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - deprecationDate?: string; - /** - * The sunset date defines when the resource is scheduled to be decommissioned/removed. - * - * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` MUST be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - sunsetDate?: string; - /** - * The successor resource(s). - * - * MUST be a valid reference to an ORD ID. - * - * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. - */ - successors?: string[]; - /** - * Contains changelog entries that summarize changes with special regards to version and releaseStatus - */ - changelogEntries?: ChangelogEntry[]; - /** - * Defining the abstraction level of the entity type using the DDD terminology. - * - * In Domain-Driven Design, there is a concept of entities and aggregates. There are root entities which may contain - * further sub entities by composition. The complete “package” is then called an aggregate, which gets its name and identity - * from the root entity. An aggregate is a cluster of domain objects that can be treated as a single unit. The root - * is the entity that is referenced from outside the aggregate. There must be only one root per aggregate. The root - * ensures the integrity of the aggregate. A sub entity is any other non-root entity in the aggregate. Source, see - * [Martin Fowler on DDD Aggregate](https://martinfowler.com/bliki/DDD_Aggregate.html) - * - * For now, we decided to only cover the aggregate level, which is described in the enum value. - */ - level: "aggregate"; - /** - * Generic Links with arbitrary meaning and content. - */ - links?: Link[]; - extensible?: Extensible; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; - /** - * The [policy level](../../spec-extensions/access-strategies/) (aka. compliance level) that this ORD Document or part of it needs to be compliant with. - * Depending on the chosen policy level, certain expectations and validations rules will be applied. - * - * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. - * - * If not provided, no additional policy level expectations and validations apply. - * - */ - policyLevel?: "none" | "sap:core:v1" | "custom"; - /** - * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. - * - * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. - * - * MUST only be provided if `policyLevel` is set to `custom`. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - */ - customPolicyLevel?: string; - /** - * Defines whether this ORD resource is **system instance aware**. - * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. - * - * If this behavior applies, `systemInstanceAware` MUST be set to true. - * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, - * not just once per system type, but once per **system instance**. - */ - systemInstanceAware?: boolean; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription?: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * Defines which Package the resource is part of. + * + * MUST be a valid reference to a [Package](#package) ORD ID. + * + * Every resource MUST be part of one package. + */ + partOfPackage: string; + /** + * Defines which groups the resource is assigned to. + * + * The property is optional, but if given the value MUST be an array of valid Group IDs. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * All resources that share the same group ID assignment are effectively grouped together. + */ + partOfGroups?: string[]; + /** + * List of products the resources of the package are a part of. + * + * MUST be a valid reference to a [Product](#product) ORD ID. + * + * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + * + * @minItems 0 + */ + partOfProducts?: string[]; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility states who is allowed to "see" the described resource or capability. + */ + visibility: "public" | "internal" | "private"; + /** + * The `releaseStatus` specifies the stability of the resource and its external contract. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * The deprecation date defines when the resource has been set as deprecated. + * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. + * + * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + deprecationDate?: string; + /** + * The sunset date defines when the resource is scheduled to be decommissioned/removed. + * + * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` SHOULD be provided (if already known). + * Once the sunset date is known and ready to be communicated externally, it MUST be provided here. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + sunsetDate?: string; + /** + * The successor resource(s). + * + * MUST be a valid reference to an ORD ID. + * + * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. + * If `successors` is given, the described resource SHOULD set its `releaseStatus` to `deprecated`. + */ + successors?: string[]; + /** + * Contains changelog entries that summarize changes with special regards to version and releaseStatus + */ + changelogEntries?: ChangelogEntry[]; + /** + * Defining the abstraction level of the entity type using the DDD terminology. + * + * In Domain-Driven Design, there is a concept of entities and aggregates. + * There are root entities which may contain further sub entities by composition. + * The complete “package” is then called an aggregate, which gets its name and identity from the root entity. + * An aggregate is a cluster of domain objects that can be treated as a single unit. + * The root is the entity that is referenced from outside the aggregate. There must be only one root per aggregate. + * The root ensures the integrity of the aggregate. A sub entity is any other non-root entity in the aggregate. + * + * Source, see [Martin Fowler on DDD Aggregate](https://martinfowler.com/bliki/DDD_Aggregate.html) + */ + level: "aggregate" | "root-entity" | "sub-entity"; + /** + * States that this Entity Type is related to another Entity Type. + * + * Usually this happens if there are similar conceptual entity types across different namespaces. + */ + relatedEntityTypes?: RelatedEntityType[]; + /** + * Generic Links with arbitrary meaning and content. + */ + links?: Link[]; + extensible?: Extensible; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with. + * Depending on the chosen policy level, additional expectations and validations rules will be applied. + * + * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + */ + policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom"; + /** + * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. + * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. + * + * MUST only be provided if `policyLevel` is set to `custom`. + * MUST be a valid [Specification ID](../index.md#specification-id). + */ + customPolicyLevel?: string; + /** + * A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with. + * For each chosen policy level, additional expectations and validations rules will be applied. + * + * Policy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + * A policy level MUST be a valid [Specification ID](../index.md#specification-id). + */ + policyLevels?: string[]; + /** + * All resources that are [system instance aware](../index.md#def-system-instance-aware) should now be put together in one ORD document that has `perspective`: `system-instance`. + * All resources that are [system instance unaware](../index.md#def-system-instance-unaware) should now be put together in one ORD document that has `perspective`: `system-version`. + * + * Defines whether this ORD resource is **system instance aware**. + * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. + * + * If this behavior applies, `systemInstanceAware` MUST be set to true. + * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, + * not just once per system type, but once per **system instance**. + */ + systemInstanceAware?: boolean; +} +/** + * Defines which Entity Type is related (via its ORD ID). + * In the future, this could include stating the relationship type, too. + */ +export interface RelatedEntityType { + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; } /** * Capabilities can be used to describe use case specific capabilities, most notably supported features or additional information (like configuration) that needs to be understood from outside. @@ -1320,402 +1735,581 @@ export interface EntityType { * This is the same idea and mechanism as with API resources and their resource definition formats. */ export interface Capability { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Type of the Capability - */ - type: "custom" | "sap.mdo:mdi-capability:v1"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription?: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * Defines which Package the resource is part of. - * - * MUST be a valid reference to a [Package](#package) ORD ID. - * - * Every resource MUST be part of one package. - */ - partOfPackage: string; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * The visibility/exposure of the described resource. - * This indicates who is allowed to see (and implicitly also access) the described resource. - */ - visibility: "public" | "internal" | "private"; - /** - * The `releaseStatus` specifies the stability of the resource and its external contract. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * Optional list of related EntityType Resources. - * - * MUST be a valid reference to an [EntityType Resource](#entity-type) ORD ID. - */ - relatedEntityTypes?: string[]; - /** - * List of available machine-readable capability definitions. - * - * If capability definitions are added or changed, the `version` SHOULD be incremented and `lastUpdate` be updated. - */ - definitions?: CapabilityDefinition[]; - /** - * Generic Links with arbitrary meaning and content. - */ - links?: Link[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; - /** - * Defines whether this ORD resource is **system instance aware**. - * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. - * - * If this behavior applies, `systemInstanceAware` MUST be set to true. - * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, - * not just once per system type, but once per **system instance**. - */ - systemInstanceAware?: boolean; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Type of the Capability + */ + type: "custom" | "sap.mdo:mdi-capability:v1"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription?: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * Defines which Package the resource is part of. + * + * MUST be a valid reference to a [Package](#package) ORD ID. + * + * Every resource MUST be part of one package. + */ + partOfPackage: string; + /** + * Defines which groups the resource is assigned to. + * + * The property is optional, but if given the value MUST be an array of valid Group IDs. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * All resources that share the same group ID assignment are effectively grouped together. + */ + partOfGroups?: string[]; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility states who is allowed to "see" the described resource or capability. + */ + visibility: "public" | "internal" | "private"; + /** + * The `releaseStatus` specifies the stability of the resource and its external contract. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. + * This can happen either because it has not been setup for use or disabled by an admin / user. + * + * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. + * + * This property can only reflect the knowledge of the described system instance itself. + * Outside factors for availability can't need to be considered (e.g. network connectivity, middlewares). + * + * A disabled resource MAY skip describing its resource definitions. + * + */ + disabled?: boolean; + /** + * The resource has been introduced in the given [system version](../index.md#def-system-version). + * This implies that the resource is only available if the system instance is of at least that system version. + */ + minSystemVersion?: string; + /** + * Optional list of related EntityType Resources. + * + * MUST be a valid reference to an [EntityType Resource](#entity-type) ORD ID. + */ + relatedEntityTypes?: string[]; + /** + * List of available machine-readable definitions, which describe the resource or capability in detail. + * + * Each definition is to be understood as an alternative description format, describing the same resource / capability. + * As a consequence the same definition type MUST NOT be provided more than once. + * + * It is RECOMMENDED to provide the definitions as they enable machine-readable use cases. + * If the definitions are added or changed, the `version` MUST be incremented. + * An ORD aggregator MAY only (re)fetch the definitions again when the `version` was incremented. + */ + definitions?: CapabilityDefinition[]; + /** + * Generic Links with arbitrary meaning and content. + */ + links?: Link[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * All resources that are [system instance aware](../index.md#def-system-instance-aware) should now be put together in one ORD document that has `perspective`: `system-instance`. + * All resources that are [system instance unaware](../index.md#def-system-instance-unaware) should now be put together in one ORD document that has `perspective`: `system-version`. + * + * Defines whether this ORD resource is **system instance aware**. + * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. + * + * If this behavior applies, `systemInstanceAware` MUST be set to true. + * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, + * not just once per system type, but once per **system instance**. + */ + systemInstanceAware?: boolean; } /** * Link and categorization of a machine-readable capability definition. */ export interface CapabilityDefinition { - /** - * Type of the capability resource definition - */ - type: "custom" | "sap.mdo:mdi-capability-definition:v1"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format. - * A consuming application can use this information to know which file format parser it needs to use. - * For example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON. - * - * If no Media Type is registered for the referenced file, - * `text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data. - * - */ - mediaType: "application/json" | "application/xml" | "text/yaml" | "text/plain" | "application/octet-stream"; - /** - * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file. - * - * It is RECOMMENDED to provide a relative URL (to base URL), starting with `/`. - */ - url: string; - /** - * List of supported access strategies for retrieving metadata from the ORD provider. - * An ORD Consumer/ORD Aggregator MAY choose any of the strategies. - * - * If this property is not provided, the definition URL will be available through the same access strategy as this ORD document. - * We RECOMMEND anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process. - * - * @minItems 1 - */ - accessStrategies?: [AccessStrategy, ...AccessStrategy[]]; + /** + * Type of the capability resource definition + */ + type: "custom" | "sap.mdo:mdi-capability-definition:v1"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format. + * A consuming application can use this information to know which file format parser it needs to use. + * For example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON. + * + * If no Media Type is registered for the referenced file, + * `text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data. + * + */ + mediaType: "application/json" | "application/xml" | "text/yaml" | "text/plain" | "application/octet-stream"; + /** + * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file. + * + * It is RECOMMENDED to provide a relative URL (to base URL). + */ + url: string; + /** + * List of supported access strategies for retrieving metadata from the ORD provider. + * An ORD Consumer/ORD Aggregator MAY choose any of the strategies. + * + * The access strategies only apply to the metadata access and not the actual API access. + * The actual access to the APIs for clients is described via Consumption Bundles. + * + * If this property is not provided, the definition URL will be available through the same access strategy as this ORD document. + * It is RECOMMENDED anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process. + * + * @minItems 1 + */ + accessStrategies?: [AccessStrategy, ...AccessStrategy[]]; } /** - * A [Data Product](../../details/articles/data-product) is a data set exposed for consumption outside the boundaries of the producing application via APIs and described by high quality metadata that can be accessed through the [ORD Aggregator](../../spec-v1/#ord-aggregator). + * A [Data Product](../concepts/data-product) is a data set exposed for consumption outside the boundaries of the producing application via APIs and described by high quality metadata that can be accessed through the [ORD Aggregator](../../spec-v1/#ord-aggregator). * - * Please note that this concept is in beta, see [Data Product - Beta Status](../../details/articles/data-product#beta-status). + * Please note that this concept is in beta, see [Data Product - Beta Status](../concepts/data-product#beta-status). */ export interface DataProduct { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription?: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * Defines which Package the resource is part of. - * - * MUST be a valid reference to a [Package](#package) ORD ID. - * - * Every resource MUST be part of one package. - */ - partOfPackage: string; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * The visibility/exposure of the data product. A public data product might have private APIs for trusted consumers therefore the having the property on data product - */ - visibility: "public" | "internal" | "private"; - /** - * The `releaseStatus` specifies the stability towards incompatible changes in the future. - * In the context of data products, it it covers only properties on the data product level. - * APIs that are part of the input and output ports have their own independent `releaseStatus` and `version`. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. - * This can happen either because it has not been setup for use or disabled by an admin / user. - * - * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. - * - * This only needs to reflect the knowledge of the described system instance itself, - * meaning that outside factors don't need to be considered (e.g. network connectivity, middlewares). - * This information may be of relevance for some ORD consumers that need to filter for active or disabled APIs. - * - * A disabled resource MAY skip describing its resource definitions. - * - */ - disabled?: boolean; - /** - * The deprecation date defines when the resource has been set as deprecated. - * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. - * - * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - deprecationDate?: string; - /** - * The sunset date defines when the resource is scheduled to be decommissioned/removed. - * - * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` MUST be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - sunsetDate?: string; - /** - * The successor resource(s). - * - * MUST be a valid reference to an ORD ID. - * - * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. - */ - successors?: string[]; - /** - * Contains changelog entries that summarize changes with special regards to version and releaseStatus - */ - changelogEntries?: ChangelogEntry[]; - /** - * Type of the data product. Based on the type some properties of a data product may become optional/mandatory. - */ - type: "base" | "derived"; - /** - * Category of the data-set within data product. Based on its definition, a data product is a “data set” - which can include on the values below. - * Based on the type some properties of a data product may become optional/mandatory. - * Consumers might still do analytics on business object like data products. - */ - category: "business-object" | "analytical" | "other"; - /** - * List of entity types that are at least partially exposed by the data product. - */ - entityTypes?: string[]; - /** - * The input ports of a data product indicate the data inputs for lineage purposes. - * - * It is a list of Integration Dependencies, whose aspects will form the actual input ports. - * - * Input ports can also be understood as the public interface to ingest data into the data product. - * Data products of type `derived` consume data through the input ports. Different input ports allowing ingestion of different sub-sets building up the data-set for the data product. - * Data products of type `base` might not have any input ports. Their data sets are typically based directly on the applications / services own data. - * - * @minItems 0 - */ - inputPorts?: DataProductInputPort[]; - /** - * Output ports are the interface (APIs and Events) through with the data of the data product can be accessed. - * - * Output ports of the same data product might produce different facets of the data set with different qualities. - * A data set can also be made available via different protocols, which also results in different ports. - * - * As long as different output ports are accessing the same model beneath, they should belong to the same data product. - * If the above criteria cannot be reasonably met, consider splitting the data product into multiple smaller data products. - * - * @minItems 1 - */ - outputPorts: [DataProductOutputPort, ...DataProductOutputPort[]]; - /** - * Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components. - */ - responsible: string; - /** - * Links with semantic meaning that are specific to Data Product Resources. - */ - dataProductLinks?: DataProductLink[]; - /** - * Generic Links with arbitrary meaning and content. - */ - links?: Link[]; - /** - * List of industry tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - industry?: ((string | "Aerospace and Defense" | "Automotive" | "Banking" | "Chemicals" | "Consumer Products" | "Defense and Security" | "Engineering Construction and Operations" | "Healthcare" | "Higher Education and Research" | "High Tech" | "Industrial Machinery and Components" | "Insurance" | "Life Sciences" | "Media" | "Mill Products" | "Mining" | "Oil and Gas" | "Professional Services" | "Public Sector" | "Retail" | "Sports and Entertainment" | "Telecommunications" | "Travel and Transportation" | "Utilities" | "Wholesale Distribution") & string)[]; - /** - * List of line of business tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - lineOfBusiness?: ((string | "Asset Management" | "Commerce" | "Finance" | "Human Resources" | "Manufacturing" | "Marketing" | "R&D Engineering" | "Sales" | "Service" | "Sourcing and Procurement" | "Supply Chain" | "Sustainability" | "Metering" | "Grid Operations and Maintenance" | "Plant Operations and Maintenance" | "Maintenance and Engineering") & string)[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; - /** - * The [policy level](../../spec-extensions/access-strategies/) (aka. compliance level) that this ORD Document or part of it needs to be compliant with. - * Depending on the chosen policy level, certain expectations and validations rules will be applied. - * - * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. - * - * If not provided, no additional policy level expectations and validations apply. - * - */ - policyLevel?: "none" | "sap:core:v1" | "custom"; - /** - * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. - * - * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. - * - * MUST only be provided if `policyLevel` is set to `custom`. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - */ - customPolicyLevel?: string; - /** - * Defines whether this ORD resource is **system instance aware**. - * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. - * - * If this behavior applies, `systemInstanceAware` MUST be set to true. - * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, - * not just once per system type, but once per **system instance**. - */ - systemInstanceAware?: boolean; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description: string; + /** + * Defines which Package the resource is part of. + * + * MUST be a valid reference to a [Package](#package) ORD ID. + * + * Every resource MUST be part of one package. + */ + partOfPackage: string; + /** + * Defines which groups the resource is assigned to. + * + * The property is optional, but if given the value MUST be an array of valid Group IDs. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * All resources that share the same group ID assignment are effectively grouped together. + */ + partOfGroups?: string[]; + /** + * List of products this Data Product is a part of or is related to, its e.g. data source systems. + * + * MUST be a valid reference to a [Product](#product) ORD ID. + * + * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + * + * @minItems 0 + */ + partOfProducts?: string[]; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility/exposure of the data product. A public data product might have private APIs for trusted consumers therefore the having the property on data product + */ + visibility: "public" | "internal" | "private"; + /** + * The `releaseStatus` specifies the stability towards incompatible changes in the future. + * In the context of data products, it it covers only properties on the data product level. + * APIs that are part of the input and output ports have their own independent `releaseStatus` and `version`. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so. + * This can happen either because it has not been setup for use or disabled by an admin / user. + * + * If the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance aware perspective. + * + * This property can only reflect the knowledge of the described system instance itself. + * Outside factors for availability can't need to be considered (e.g. network connectivity, middlewares). + * + * A disabled resource MAY skip describing its resource definitions. + * + */ + disabled?: boolean; + /** + * The resource has been introduced in the given [system version](../index.md#def-system-version). + * This implies that the resource is only available if the system instance is of at least that system version. + */ + minSystemVersion?: string; + /** + * Lifecycle status of the Data Product as a whole. + * + * MUST be provided when describing the system-instance aware (run-time) perspective. + * SHOULD NOT be provided in static (design-time) perspective. Static aggregators MUST ignore this property. + */ + lifecycleStatus?: + | "inactive" + | "provisioning" + | "active" + | "deprovisioning" + | "active-with-errors" + | "provisioning-error" + | "deprovisioning-error"; + /** + * The deprecation date defines when the resource has been set as deprecated. + * This is not to be confused with the `sunsetDate` which defines when the resource will be actually decommissioned / removed. + * + * If the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + deprecationDate?: string; + /** + * The sunset date defines when the resource is scheduled to be decommissioned/removed. + * + * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` SHOULD be provided (if already known). + * Once the sunset date is known and ready to be communicated externally, it MUST be provided here. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + sunsetDate?: string; + /** + * The successor resource(s). + * + * MUST be a valid reference to an ORD ID. + * + * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. + * If `successors` is given, the described resource SHOULD set its `releaseStatus` to `deprecated`. + */ + successors?: string[]; + /** + * Contains changelog entries that summarize changes with special regards to version and releaseStatus + */ + changelogEntries?: ChangelogEntry[]; + /** + * Type of the data product. Based on the type some properties of a data product may become optional/mandatory. + */ + type: "primary" | "derived"; + /** + * Category of the data-set within data product. Based on its definition, a data product is a “data set” - which can include on the values below. + * Based on the type some properties of a data product may become optional/mandatory. + * Consumers might still do analytics on business object like data products. + */ + category: "business-object" | "analytical" | "other"; + /** + * Aggregated list of entity types that are at least partially exposed by the data product. Detailed mapping can be found on the output port schema level. + */ + entityTypes?: string[]; + /** + * The input ports of a data product indicate the data inputs for lineage purposes. + * + * It is a list of Integration Dependencies, whose aspects will form the actual input ports. + * + * Input ports can also be understood as the public interface to ingest data into the data product. + * Data products of type `derived` consume data through the input ports. Different input ports allowing ingestion of different sub-sets building up the data-set for the data product. + * Data products of type `base` might not have any input ports. Their data sets are typically based directly on the applications / services own data. + * + * @minItems 0 + */ + inputPorts?: DataProductInputPort[]; + /** + * Output ports are the interface (APIs and Events) through which the data of the data product can be accessed. + * + * Output ports of the same data product might produce different facets of the data set with different qualities. + * A data set can also be made available via different protocols, which also results in different ports. + * + * As long as different output ports are accessing the same model beneath, they should belong to the same data product. + * If the above criteria cannot be reasonably met, consider splitting the data product into multiple smaller data products. + * + * @minItems 1 + */ + outputPorts: [DataProductOutputPort, ...DataProductOutputPort[]]; + /** + * Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components. + */ + responsible: string; + /** + * Links with semantic meaning that are specific to Data Product Resources. + */ + dataProductLinks?: DataProductLink[]; + /** + * Generic Links with arbitrary meaning and content. + */ + links?: Link[]; + /** + * List of industry tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + industry?: (( + | string + | "Aerospace and Defense" + | "Automotive" + | "Banking" + | "Chemicals" + | "Consumer Products" + | "Defense and Security" + | "Engineering Construction and Operations" + | "Healthcare" + | "Higher Education and Research" + | "High Tech" + | "Industrial Machinery and Components" + | "Insurance" + | "Life Sciences" + | "Media" + | "Mill Products" + | "Mining" + | "Oil and Gas" + | "Professional Services" + | "Public Sector" + | "Retail" + | "Sports and Entertainment" + | "Telecommunications" + | "Travel and Transportation" + | "Utilities" + | "Wholesale Distribution" + ) & + string)[]; + /** + * List of line of business tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + lineOfBusiness?: (( + | string + | "Asset Management" + | "Commerce" + | "Finance" + | "Human Resources" + | "Manufacturing" + | "Marketing" + | "R&D Engineering" + | "Sales" + | "Service" + | "Sourcing and Procurement" + | "Supply Chain" + | "Sustainability" + | "Metering" + | "Grid Operations and Maintenance" + | "Plant Operations and Maintenance" + | "Maintenance and Engineering" + ) & + string)[]; + /** + * List of countries that the package resources are applicable to. + * + * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). + * + * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + countries?: string[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; + /** + * The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with. + * Depending on the chosen policy level, additional expectations and validations rules will be applied. + * + * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + */ + policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom"; + /** + * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. + * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. + * + * MUST only be provided if `policyLevel` is set to `custom`. + * MUST be a valid [Specification ID](../index.md#specification-id). + */ + customPolicyLevel?: string; + /** + * A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with. + * For each chosen policy level, additional expectations and validations rules will be applied. + * + * Policy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + * A policy level MUST be a valid [Specification ID](../index.md#specification-id). + */ + policyLevels?: string[]; + /** + * All resources that are [system instance aware](../index.md#def-system-instance-aware) should now be put together in one ORD document that has `perspective`: `system-instance`. + * All resources that are [system instance unaware](../index.md#def-system-instance-unaware) should now be put together in one ORD document that has `perspective`: `system-version`. + * + * Defines whether this ORD resource is **system instance aware**. + * This is the case (and relevant) when the referenced resource definitions are potentially different between **system instances**. + * + * If this behavior applies, `systemInstanceAware` MUST be set to true. + * An ORD aggregator that represents a system instance aware perspective MUST fetch the referenced resource definitions, + * not just once per system type, but once per **system instance**. + */ + systemInstanceAware?: boolean; } /** * An input port of a data product states where it retrieves its data inputs from. @@ -1723,12 +2317,12 @@ export interface DataProduct { * It is described as via an ORD Integration Dependency. */ export interface DataProductInputPort { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; } /** * A data product output port references the APIs or Events that can be used to access the data-set. @@ -1739,39 +2333,37 @@ export interface DataProductInputPort { * In this case the other application is responsible for the lifecycle of the API contract and will update its ORD description independently. */ export interface DataProductOutputPort { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; } /** * Links with specific semantic meaning that are related to Data Product resources. - * If a generic `Link` can also be expressed via `DataProductLink`, the latter MUST be chosen. + * If a generic [Link](#link) can also be expressed via Data Product Link, the latter MUST be chosen. */ export interface DataProductLink { - /** - * API action type. - * See also: [WADG0001 WebAPI type extension](https://webapi-discovery.github.io/rfcs/rfc0001.html#webapiactions) - */ - type: "payment" | "service-level-agreement" | "support" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the endpoint or UI for the action. - * If the link is relative to base URL, it is RECOMMENDED to provide a relative URL to it, starting with `/`. - */ - url: string; + type: "payment" | "terms-of-use" | "service-level-agreement" | "support" | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the Data Product Link. + * + * The link target SHOULD be absolute and SHOULD be openly accessible. + * If a relative link is given, it is relative to the [`describedSystemInstance.baseUrl`](#system-instance_baseurl). + */ + url: string; } /** - * An [Integration Dependency](../../details/articles/integration-dependency) states that the described system (self) can integrate with external systems (integration target) to achieve an integration purpose. + * An [Integration Dependency](../concepts/integration-dependency) states that the described system (self) can integrate with external systems (integration target) to achieve an integration purpose. * The purpose could be to enable a certain feature or integration scenario, but it could also be a mandatory prerequisite for the described system to work. * * The integration dependency includes a list of individual **aspects** that the integration consists of. @@ -1789,130 +2381,160 @@ export interface DataProductLink { * An integration dependency is also not meant to describe a bigger process. * Instead it focuses on the technical necessaries to create an integration for one particular purpose. * - * For more details, see [Integration Dependency](../../details/articles/integration-dependency). + * To learn more about the concept, see [Integration Dependency](../concepts/integration-dependency). */ export interface IntegrationDependency { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription?: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * Defines which Package the resource is part of. - * - * MUST be a valid reference to a [Package](#package) ORD ID. - * - * Every resource MUST be part of one package. - */ - partOfPackage: string; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * The visibility/exposure of the described resource. - * This indicates who is allowed to see (and implicitly also access) the described resource. - */ - visibility: "public" | "internal" | "private"; - /** - * The `releaseStatus` specifies the stability of the resource and its external contract. - */ - releaseStatus: "active" | "beta" | "deprecated"; - /** - * The sunset date defines when the resource is scheduled to be decommissioned/removed. - * - * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` MUST be provided. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - sunsetDate?: string; - /** - * The successor resource(s). - * - * MUST be a valid reference to an ORD ID. - * - * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. - */ - successors?: string[]; - /** - * If true, the Integration Dependency is mandatory for the described system to function. - */ - mandatory: boolean; - /** - * List of integration aspects that make up the Integration Dependency. - * - * Each aspect listed is a dedicated, constituent part (AND condition). - */ - aspects?: Aspect[]; - /** - * If an Integration Dependency conceptually belongs or related to another Integration Dependency, this can be indicated here. - * One situation would be where two systems each have an Integration Dependency to describe a two-sided integration from each side. - */ - relatedIntegrationDependencies?: string[]; - /** - * Generic Links with arbitrary meaning and content. - */ - links?: Link[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription?: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * Defines which Package the resource is part of. + * + * MUST be a valid reference to a [Package](#package) ORD ID. + * + * Every resource MUST be part of one package. + */ + partOfPackage: string; + /** + * Defines which groups the resource is assigned to. + * + * The property is optional, but if given the value MUST be an array of valid Group IDs. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * All resources that share the same group ID assignment are effectively grouped together. + */ + partOfGroups?: string[]; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility states who is allowed to "see" the described resource or capability. + */ + visibility: "public" | "internal" | "private"; + /** + * The `releaseStatus` specifies the stability of the resource and its external contract. + */ + releaseStatus: "active" | "beta" | "deprecated"; + /** + * The sunset date defines when the resource is scheduled to be decommissioned/removed. + * + * If the `releaseStatus` is set to `deprecated`, the `sunsetDate` SHOULD be provided (if already known). + * Once the sunset date is known and ready to be communicated externally, it MUST be provided here. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + sunsetDate?: string; + /** + * The successor resource(s). + * + * MUST be a valid reference to an ORD ID. + * + * If the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists. + * If `successors` is given, the described resource SHOULD set its `releaseStatus` to `deprecated`. + */ + successors?: string[]; + /** + * If true, the Integration Dependency is mandatory for the described system to function. + */ + mandatory: boolean; + /** + * List of integration aspects that make up the Integration Dependency. + * + * Each aspect listed is a dedicated, constituent part (AND condition). + */ + aspects?: Aspect[]; + /** + * If an Integration Dependency conceptually belongs or related to another Integration Dependency, this can be indicated here. + * One situation would be where two systems each have an Integration Dependency to describe a two-sided integration from each side. + */ + relatedIntegrationDependencies?: string[]; + /** + * Generic Links with arbitrary meaning and content. + */ + links?: Link[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; } /** * An (integration) aspect is the constituent part that makes up an Integration Dependency. @@ -1924,70 +2546,82 @@ export interface IntegrationDependency { * In case an AND condition is needed, multiple aspects need to be added to the Integration Dependency. */ export interface Aspect { - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * If true, the aspect is mandatory to realize the Integration Dependency it contains. - */ - mandatory: boolean; - /** - * If true, the references resources can be provided by multiple system instances. - * If not, only one integration target is supported. - */ - supportMultipleProviders?: boolean; - /** - * List of API Resource Dependencies. - */ - apiResources?: APIResourceIntegrationAspect[]; - /** - * List of Event Resource Dependencies. - */ - eventResources?: EventResourceIntegrationAspect[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * If true, the aspect is mandatory to realize the Integration Dependency it contains. + */ + mandatory: boolean; + /** + * If true, the references resources can be provided by multiple system instances. + * If not, only one integration target is supported. + */ + supportMultipleProviders?: boolean; + /** + * List of API Resource Dependencies. + */ + apiResources?: APIResourceIntegrationAspect[]; + /** + * List of Event Resource Dependencies. + */ + eventResources?: EventResourceIntegrationAspect[]; } /** * API resource related integration aspect */ export interface APIResourceIntegrationAspect { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Minimum version of the references resource that the integration requires. - * - */ - minVersion?: string; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * Minimum version of the references resource that the integration requires. + * + */ + minVersion?: string; } /** * Event resource related integration aspect */ export interface EventResourceIntegrationAspect { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Minimum version of the references resource that the integration requires. - * - */ - minVersion?: string; - /** - * List of individual events or messages that are sufficient to achieve the aspect. - */ - subset?: EventResourceIntegrationAspectSubset[]; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * Minimum version of the references resource that the integration requires. + * + */ + minVersion?: string; + /** + * List of individual events or messages that are sufficient to achieve the aspect. + */ + subset?: EventResourceIntegrationAspectSubset[]; + /** + * In case that the event subscriptions are limited to known [system types](../index.md#def-system-type), they can be listed here as [system namespaces](../index.md#system-namespace). + * + * If given, only system types of the defined namespaces are supported as integration partners. + * If not given, there is no restriction which system type provides the events. + * + * @minItems 1 + */ + systemTypeRestriction?: [string, ...string[]]; } /** * Defines that Event Resource Integration Aspect only requires a subset of the referenced contract. @@ -1996,13 +2630,13 @@ export interface EventResourceIntegrationAspect { * This information helps to narrow down what is really necessary and can help optimize the integration, e.g. by only publishing the events that are really needed. */ export interface EventResourceIntegrationAspectSubset { - /** - * The type ID of the individual event or message. - * - * This MUST be an ID that is understood by the used protocol and resource definition format. - * E.g. for CloudEvents, the [type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) can be used. - */ - eventType: string; + /** + * The type ID of the individual event or message. + * + * This MUST be an ID that is understood by the used protocol and resource definition format. + * E.g. for CloudEvents, the [type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) can be used. + */ + eventType: string; } /** * The vendor of a product or a package, usually a corporation or a customer / user. @@ -2019,36 +2653,36 @@ export interface EventResourceIntegrationAspectSubset { * For example: The only correct value for a SAP vendor reference is `sap:vendor:SAP:`. */ export interface Vendor { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Optional list of partner vendors, referenced through their ORD ID. - * - * MUST be a valid reference to a [Vendor](#vendor) ORD ID. - * - * This property can be used to indicate partnership relations between vendors. - */ - partners?: string[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Optional list of partner vendors, referenced through their ORD ID. + * + * MUST be a valid reference to a [Vendor](#vendor) ORD ID. + * + * This property can be used to indicate partnership relations between vendors. + */ + partners?: string[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; } /** * A **product** in ORD is understood as a commercial product or service. @@ -2062,344 +2696,437 @@ export interface Vendor { * ORD assumes that this is handled by specialized systems and that ORD only provides the means to correlate to them. */ export interface Product { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * Vendor / organization that is responsible for the Product. - * - * MUST be a valid reference to a [Vendor](#vendor) ORD ID. - */ - vendor: string; - /** - * Optional product parent ORD ID, if a hierarchical product structure needs to be expressed. - * - * MUST be a valid reference to a [Product](#product) ORD ID. - */ - parent?: string; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * Vendor / organization that is responsible for the Product. + * + * MUST be a valid reference to a [Vendor](#vendor) ORD ID. + */ + vendor: string; + /** + * Optional product parent ORD ID, if a hierarchical product structure needs to be expressed. + * + * MUST be a valid reference to a [Product](#product) ORD ID. + */ + parent?: string; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; } /** - * A **Package** organizes a set of related resources together, by considering all of the following concerns: - * - * * The resources are created by the same vendor or customer. - * * The resources are published together. They share the same development and publishing lifecycle and ownership. - * * The resources share certain aspects/taxonomy that is inherited down to them (e.g. `vendor`). - * * If applicable: The resources are meant to be used by only a particular target platform / software. + * A [**Package**](../concepts/grouping-and-bundling#package) organizes a set of related resources together, by publishing and catalog presentation concerns. * - * All resources that are not created by the described systems vendor MUST be put into separate packages. - * This is the case, when: - * - * * The resources are created by the customer (user) of the system. - * All such resources MUST be assigned to a dedicated Package, where `vendor` is set to `customer:vendor:Customer:`. - * * The resources are created by partners or third parties. - * All such resources MUST be assigned to a dedicated Package for each partner / third party. - * The `vendor` MUST be set to a registered, matching Vendor ID (implies also a registered namespace). - * - * Another responsibility of a package is human-readable documentation and presentation. - * It can also express information about the resource providers, terms of use of the APIs, - * pricing for the usage of the packages, APIs, Events, etc. + * The Package can also be used to indicate which products or vendors provided the packaged resources. + * For partner or customer content, the package can indicate this via the `vendor` and `partOfProducts` assignments. + * In any case, the Package `ordID` namespace MUST reflect the namespace of the providing application (which hosts the resource), not the resource definition owner, which could be a customer or partner. * * A package SHOULD contain at least one resource. Avoid empty packages. * + * The package assignment of a resource MAY change, so consumers MUST not rely on this to be stable. + * * A package does not have a `visibility` property. * Whether it is displayed is decided by the fact, whether it contains any visible resources according to the visibility role of the aggregator. + * + * To learn more about the concept and further guidance, see [Package](../concepts/grouping-and-bundling#package). */ export interface Package { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description: string; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version: string; - /** - * The [policy level](../../spec-extensions/access-strategies/) (aka. compliance level) that this ORD Document or part of it needs to be compliant with. - * Depending on the chosen policy level, certain expectations and validations rules will be applied. - * - * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. - * - * If not provided, no additional policy level expectations and validations apply. - * - */ - policyLevel?: "none" | "sap:core:v1" | "custom"; - /** - * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. - * - * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. - * - * MUST only be provided if `policyLevel` is set to `custom`. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - */ - customPolicyLevel?: string; - /** - * Links with semantic meaning that are specific to packages. - */ - packageLinks?: PackageLink[]; - /** - * Generic links with arbitrary meaning and content. - * - * `packageLinks` MUST be preferred if applicable. - */ - links?: Link[]; - /** - * Standardized identifier for the license. - * It MUST conform to the [SPDX License List](https://spdx.org/licenses). - */ - licenseType?: string; - /** - * Optional information that should be provided when creating a support ticket for the resources bundled in this package. - * This can for example be a "component" name that needs to be chosen in the support portal. - * - * Notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * Please also note that if you want to provide link(s) where you can find support information, - * you can use `packageLinks` with a link of type `support`. - */ - supportInfo?: string; - /** - * Vendor / organization that is the creator (or responsible party) of the resources that are part of the `Package`. - * - * MUST be a valid reference to a [Vendor](#vendor) ORD ID. - * - * MUST be set to `customer:vendor:Customer:` if the contents of the package are created by the customer / user. - * - * MUST be set to a registered partner vendor, if the contents of the package are created by a partner / third party. - */ - vendor: string; - /** - * List of products this resource is a part of. - * - * MUST be a valid reference to a [Product](#product) ORD ID. - * - * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - * - * @minItems 0 - */ - partOfProducts?: string[]; - /** - * List of countries that the package resources are applicable to. - * - * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). - * - * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - countries?: string[]; - /** - * List of line of business tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - lineOfBusiness?: ((string | "Asset Management" | "Commerce" | "Finance" | "Human Resources" | "Manufacturing" | "Marketing" | "R&D Engineering" | "Sales" | "Service" | "Sourcing and Procurement" | "Supply Chain" | "Sustainability" | "Metering" | "Grid Operations and Maintenance" | "Plant Operations and Maintenance" | "Maintenance and Engineering") & string)[]; - /** - * List of industry tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - industry?: ((string | "Aerospace and Defense" | "Automotive" | "Banking" | "Chemicals" | "Consumer Products" | "Defense and Security" | "Engineering Construction and Operations" | "Healthcare" | "Higher Education and Research" | "High Tech" | "Industrial Machinery and Components" | "Insurance" | "Life Sciences" | "Media" | "Mill Products" | "Mining" | "Oil and Gas" | "Professional Services" | "Public Sector" | "Retail" | "Sports and Entertainment" | "Telecommunications" | "Travel and Transportation" | "Utilities" | "Wholesale Distribution") & string)[]; - runtimeRestriction?: RuntimeRestriction; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description: string; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version: string; + /** + * The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with. + * Depending on the chosen policy level, additional expectations and validations rules will be applied. + * + * The policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + */ + policyLevel?: "none" | "sap:base:v1" | "sap:core:v1" | "sap:dp:v1" | "custom"; + /** + * If the fixed `policyLevel` values need to be extended, an arbitrary `customPolicyLevel` can be provided. + * The policy level is inherited from packages to resources they contain, but can be overwritten at resource level. + * + * MUST only be provided if `policyLevel` is set to `custom`. + * MUST be a valid [Specification ID](../index.md#specification-id). + */ + customPolicyLevel?: string; + /** + * A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with. + * For each chosen policy level, additional expectations and validations rules will be applied. + * + * Policy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level. + * + * A policy level MUST be a valid [Specification ID](../index.md#specification-id). + */ + policyLevels?: string[]; + /** + * Links with semantic meaning that are specific to packages. + */ + packageLinks?: PackageLink[]; + /** + * Generic links with arbitrary meaning and content. + * + * `packageLinks` MUST be preferred if applicable. + */ + links?: Link[]; + /** + * Standardized identifier for the license. + * It MUST conform to the [SPDX License List](https://spdx.org/licenses). + */ + licenseType?: string; + /** + * Optional information that should be provided when creating a support ticket for the resources bundled in this package. + * This can for example be a "component" name that needs to be chosen in the support portal. + * + * Notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * Please also note that if you want to provide link(s) where you can find support information, + * you can use `packageLinks` with a link of type `support`. + */ + supportInfo?: string; + /** + * Vendor / organization that is the creator (or responsible party) of the resources that are part of the `Package`. + * + * MUST be a valid reference to a [Vendor](#vendor) ORD ID. + * + * MUST be set to `customer:vendor:Customer:` if the contents of the package are created by the customer / user. + * + * MUST be set to a registered partner vendor, if the contents of the package are created by a partner / third party. + */ + vendor: string; + /** + * List of products the resources of the package are a part of. + * + * MUST be a valid reference to a [Product](#product) ORD ID. + * + * `partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + * + * @minItems 0 + */ + partOfProducts?: string[]; + /** + * List of countries that the package resources are applicable to. + * + * MUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). + * + * `countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + countries?: string[]; + /** + * List of line of business tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + lineOfBusiness?: (( + | string + | "Asset Management" + | "Commerce" + | "Finance" + | "Human Resources" + | "Manufacturing" + | "Marketing" + | "R&D Engineering" + | "Sales" + | "Service" + | "Sourcing and Procurement" + | "Supply Chain" + | "Sustainability" + | "Metering" + | "Grid Operations and Maintenance" + | "Plant Operations and Maintenance" + | "Maintenance and Engineering" + ) & + string)[]; + /** + * List of industry tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * `industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + industry?: (( + | string + | "Aerospace and Defense" + | "Automotive" + | "Banking" + | "Chemicals" + | "Consumer Products" + | "Defense and Security" + | "Engineering Construction and Operations" + | "Healthcare" + | "Higher Education and Research" + | "High Tech" + | "Industrial Machinery and Components" + | "Insurance" + | "Life Sciences" + | "Media" + | "Mill Products" + | "Mining" + | "Oil and Gas" + | "Professional Services" + | "Public Sector" + | "Retail" + | "Sports and Entertainment" + | "Telecommunications" + | "Travel and Transportation" + | "Utilities" + | "Wholesale Distribution" + ) & + string)[]; + /** + * If provided, all resources that are part of this package can only run on the listed runtime. + * + * MUST be a valid [System Namespace](../index.md#system-namespace). + */ + runtimeRestriction?: string; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; } /** * Links with specific semantic meaning that are related to `Package`. * - * If a generic `Link` can also be expressed via `PackageLink`, the latter MUST be chosen. + * If a generic [Link](#link) can also be expressed via a Package Link, the latter MUST be chosen. */ export interface PackageLink { - /** - * Package link type - */ - type: "terms-of-service" | "license" | "client-registration" | "payment" | "sandbox" | "service-level-agreement" | "support" | "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * [URL](https://tools.ietf.org/html/rfc3986) to the PackageLink. For more information, see `type`. - */ - url: string; - [k: string]: any | undefined; + type: + | "terms-of-service" + | "license" + | "client-registration" + | "payment" + | "sandbox" + | "service-level-agreement" + | "support" + | "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * [URL](https://tools.ietf.org/html/rfc3986) to the PackageLink. + * + * The link target MUST be absolute and SHOULD be openly accessible. + */ + url: string; + [k: string]: any | undefined; } /** - * A **Consumption Bundle** organizes a set of related resources into a single group for consumption purposes. - * - * The main use case is to enable developers to easily discover and access APIs and Events from the system instances they are extending. + * A [**Consumption Bundle**](../concepts/grouping-and-bundling#consumption-bundle) groups APIs and Events together that can be consumed with the credentials and auth mechanism. + * Ideally it also includes instructions and details how to request access and credentials for resources. * - * The consumption bundle expresses information about how the APIs and Events that it contains can be accessed. - * This potentially also includes instructions and details how to request access and credentials for resources. - * - * All resources that are part of the same consumption bundle MUST be accessible through the same set of credentials. - * Such credentials can be programmatically obtained via one of the provided `credentialExchangeStrategies`. + * For more documentation and guidance how to correctly this correctly, see [Consumption Bundle details](../concepts/grouping-and-bundling#consumption-bundle). * * A consumption bundle SHOULD have at least one association with a resource (0..n). Avoid empty consumption bundles. * A consumption bundle MUST NOT contain APIs and Events that are NOT defined in the ORD document(s) returned * by the system instance that defines the consumption bundle. * * Please note that some ORD consumer use cases MAY depend on consumption bundle assignments to work with the resources. + * + * To learn more about the concept, see [Consumption Bundle](../concepts/grouping-and-bundling#consumption-bundle). */ export interface ConsumptionBundle { - /** - * The [ORD ID](../index.md#ord-id) is a stable, globally unique ID for ORD resources or taxonomy. - * - * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. - */ - ordId: string; - /** - * Local ID, as known by the described system. - */ - localId?: string; - /** - * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). - * - * MUST be a valid [Correlation ID](../index.md#correlation-id). - */ - correlationIds?: string[]; - /** - * Human-readable title. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - title: string; - /** - * Plain text short description. - * - * MUST NOT exceed 255 chars. - * MUST NOT contain line breaks. - */ - shortDescription?: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - */ - description?: string; - /** - * The complete [SemVer](https://semver.org/) version string. - * - * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. - * It SHOULD be changed if the ORD information or referenced resource definitions changed. - * It SHOULD express minor and patch changes that don't lead to incompatible changes. - * - * When the `version` major version changes, the [ORD ID](#ord-id) `` fragment MUST be updated to be identical. - * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. - * - * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. - * - * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. - * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. - */ - version?: string; - /** - * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - * - * In case that this property is available and the value of it hasn't changed since the last crawling, the resource definitions do not need to be fetched and updated. - * - * Together with `systemInstanceAware`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. - */ - lastUpdate?: string; - /** - * Defines the supported strategies for how the consumption credentials can be exchanged. - * - * Ideally, the system type supports a strategy that can automate the exchange. - */ - credentialExchangeStrategies?: CredentialExchangeStrategy[]; - /** - * Generic links with arbitrary meaning and content. - */ - links?: Link[]; - /** - * List of free text style tags. - * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. - * - * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. - */ - tags?: string[]; - labels?: Labels; - documentationLabels?: DocumentationLabels; + /** + * The ORD ID is a stable, globally unique ID for ORD resources or taxonomy. + * + * It MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type. + */ + ordId: string; + /** + * The locally unique ID under which this resource can be looked up / resolved in the described system itself. + * Unlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name. + * + * It MAY also be used as the `` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID. + * But since this is not always possible, no assumptions MUST be made about the local ID being the same as the `` fragment in the ORD ID. + */ + localId?: string; + /** + * Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record). + * + * They express an "identity" / "equals" / "mappable" relationship to the target ID. + * + * If a "part of" relationship needs to be expressed, use the `partOfGroups` assignment instead. + * + * MUST be a valid [Correlation ID](../index.md#correlation-id). + */ + correlationIds?: string[]; + /** + * Human-readable title. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + title: string; + /** + * Plain text short description. + * + * MUST NOT exceed 255 chars. + * MUST NOT contain line breaks. + */ + shortDescription?: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + /** + * The complete [SemVer](https://semver.org/) version string. + * + * It MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard. + * It SHOULD be changed if the ORD information or referenced resource definitions changed. + * It SHOULD express minor and patch changes that don't lead to incompatible changes. + * + * When the `version` major version changes, the [ORD ID](../index.md#ord-id) `` fragment MUST be updated to be identical. + * In case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://swagger.io/specification/#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies. + * + * If the resource has been extended by the user, the change MUST be indicated via `lastUpdate`. + * The `version` MUST not be bumped for changes in extensions. + * + * The general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed. + * + * Note: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly. + * For example: If a resource within a `Package` changes, but the package itself did not, the package version does not need to be incremented. + */ + version?: string; + /** + * Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + * + * When retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time. + * Therefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files. + * + * If the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again. + * + * Together with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators. + */ + lastUpdate?: string; + /** + * The visibility states who is allowed to "see" the described resource or capability. + */ + visibility?: "public" | "internal" | "private"; + /** + * Defines the supported strategies for how the consumption credentials can be exchanged. + * + * Ideally, the system type supports a strategy that can automate the exchange. + */ + credentialExchangeStrategies?: CredentialExchangeStrategy[]; + /** + * Generic links with arbitrary meaning and content. + */ + links?: Link[]; + /** + * List of free text style tags. + * No special characters are allowed except `-`, `_`, `.`, `/` and ` `. + * + * Tags that are assigned to a `Package` are inherited to all of the ORD resources it contains. + */ + tags?: string[]; + labels?: Labels; + documentationLabels?: DocumentationLabels; } /** * The credential exchange strategy specifies how a set of credentials for a particular usage @@ -2412,62 +3139,136 @@ export interface ConsumptionBundle { * that would like to use the APIs from a particular bundle. */ export interface CredentialExchangeStrategy { - /** - * The type of credential exchange strategy. - */ - type: "custom"; - /** - * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. - * - * MUST be a valid [Specification ID](../index.md#specification-id). - * - * MUST only be provided if `type` is set to `custom`. - */ - customType?: string; - /** - * Human-readable description about how the credential exchange is achieved, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * MUST only be provided if `type` is set to `custom`. - */ - customDescription?: string; - /** - * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the credential exchange callback endpoint. - * - * This allows requesting a set of credentials that can be used for consuming all the APIs and Events that are part of the bundle. - * - * The interface contract/protocol is dependent and defined by the chosen `type`. - * - * Whenever a client wants to consume a resource within a particular bundle, this endpoint can be called to obtain the credentials that this client can use. - * - * The returned credentials MUST be valid for all resources that are part of the respective bundle. - * The endpoint SHOULD return a different set of credentials on each invocation. - */ - callbackUrl?: string; + /** + * The type of credential exchange strategy. + */ + type: "custom"; + /** + * If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided. + * + * MUST be a valid [Specification ID](../index.md#specification-id). + * + * MUST only be provided if `type` is set to `custom`. + */ + customType?: string; + /** + * Human-readable description about how the credential exchange is achieved, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * MUST only be provided if `type` is set to `custom`. + */ + customDescription?: string; + /** + * [URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the credential exchange callback endpoint. + * + * This allows requesting a set of credentials that can be used for consuming all the APIs and Events that are part of the bundle. + * + * The interface contract/protocol is dependent and defined by the chosen `type`. + * + * Whenever a client wants to consume a resource within a particular bundle, this endpoint can be called to obtain the credentials that this client can use. + * + * The returned credentials MUST be valid for all resources that are part of the respective bundle. + * The endpoint SHOULD return a different set of credentials on each invocation. + */ + callbackUrl?: string; +} +/** + * Group (instance) that resources can be assigned to. + * + * Groups are a lightweight custom taxonomy concept. + * They express a "part of" relationship to the chosen group concept. + * If an "identity / equals" relationship needs to be expressed, use the `correlationIds` instead. + * + * To learn more about the concept, see [Group Concept Documentation](../concepts/grouping-and-bundling#Groups). + */ +export interface Group { + /** + * The Group ID consists of two [Concept IDs](../../spec-v1/#concept-id) separated by a `:`. + * + * The first two fragments MUST be equal to the used Group Type ID (`groupTypeId`). + * The last two fragments MUST be a valid [Concept ID](../../spec-v1/#concept-id), indicating the group instance assignment. + * + * The ID concept is a bit unusual, but it ensures globally unique and conflict free group assignments. + */ + groupId: string; + /** + * Group Type ID. + * + * MUST match with the first two fragments of the own `groupId`. + */ + groupTypeId: string; + /** + * Human readable title of the group assignment (for UI). + */ + title: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + [k: string]: any | undefined; +} +/** + * A Group Type defines the semantics of [group assignments](#group). + * What the Group Type means and how it is to be used correctly SHOULD be described in the `description` (which may include markdown links). + * + * Group Types can be defined centrally (ownership by authority namespace) or decentrally (defined by application / service itself). + * + * To learn more about the concept, see [Group Concept Documentation](../concepts/grouping-and-bundling#Groups). + */ +export interface GroupType { + /** + * GroupType ID, which MUST be a valid [Concept ID](../../spec-v1/#concept-id). + */ + groupTypeId: string; + /** + * Human readable title of the group type. + */ + title: string; + /** + * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description SHOULD not be excessive in length and is not meant to provide full documentation. + * Detailed documentation SHOULD be attached as (typed) links. + */ + description?: string; + [k: string]: any | undefined; } /** * A tombstone indicates that a previously published ORD resource or taxonomy has been removed / decommissioned. * This MUST be indicated explicitly, so ORD aggregators and consumers can learn about the removal. * + * Exactly one of the IDs MUST be provided to state which ORD resource or taxonomy item the Tombstone addresses. + * * It MUST be kept sufficiently long so that all ORD aggregators can learn about the tombstone. * After that it MAY be removed. */ export interface Tombstone { - /** - * [ORD ID](../index.md#ord-id) of the ORD resource/taxonomy that has been removed. - */ - ordId: string; - /** - * The date when the ORD resource/taxonomy was removed. - * This is related to the `sunsetDate` that can be set to announce a resource as deprecated *before* the removal and setting of a tombstone. - * - * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - */ - removalDate: string; - /** - * Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). - * - * The description of a Tombstone MAY be added to the changelog of the removed resource by an ORD aggregator. - */ - description?: string; - [k: string]: any | undefined; + /** + * [ORD ID](../index.md#ord-id) of the ORD resource/taxonomy that has been removed. + */ + ordId?: string; + /** + * Group ID of the group that has been removed. + */ + groupId?: string; + /** + * Group Type ID of the group type that has been removed. + */ + groupTypeId?: string; + /** + * The date when the ORD resource/taxonomy was removed. + * This is related to the `sunsetDate` that can be set to announce a resource as deprecated *before* the removal and setting of a tombstone. + * + * The date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). + */ + removalDate: string; + /** + * Optional description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown). + * + * The description of a Tombstone MAY be added to the changelog of the removed resource by an ORD aggregator. + */ + description?: string; + [k: string]: any | undefined; } diff --git a/docs/http/CRM_API.http b/docs/http/CRM_API.http index 53db757..ddf6409 100644 --- a/docs/http/CRM_API.http +++ b/docs/http/CRM_API.http @@ -88,4 +88,4 @@ content-type: application/json GET {{apiBasePath}}/crm/v1/openapi/oas3.json HTTP/1.1 content-type: application/json -sap-global-tenant-id: {{sapGlobalTenantId}} +global-tenant-id: {{sapGlobalTenantId}} diff --git a/docs/http/Events.http b/docs/http/Events.http index d5cba3d..721fecf 100644 --- a/docs/http/Events.http +++ b/docs/http/Events.http @@ -24,4 +24,4 @@ content-type: application/json GET {{apiBasePath}}/sap-events/v1/odm-finance-costobject.asyncapi2.json HTTP/1.1 content-type: application/json -sap-global-tenant-id: {{sapGlobalTenantId}} +global-tenant-id: {{sapGlobalTenantId}} diff --git a/docs/http/ORD_Document_API.http b/docs/http/ORD_Document_API.http index 3f9d2bb..1a1eb49 100644 --- a/docs/http/ORD_Document_API.http +++ b/docs/http/ORD_Document_API.http @@ -52,7 +52,7 @@ content-type: application/json # 2) Provide global tenant ID that needs to be mapped by this application to its local tenant id GET {{apiBasePath}}/open-resource-discovery/v1/documents/2 HTTP/1.1 content-type: application/json -sap-global-tenant-id: {{sapGlobalTenantId}} +global-tenant-id: {{sapGlobalTenantId}} ################################################################################# @@ -60,7 +60,7 @@ sap-global-tenant-id: {{sapGlobalTenantId}} GET {{apiBasePath}}/open-resource-discovery/v1/documents/2 HTTP/1.1 content-type: application/json -sap-local-tenant-id: {{localTenantId}} +local-tenant-id: {{localTenantId}} ################################################################################# @@ -76,7 +76,7 @@ content-type: application/json # * GET the resource definition file according to the `accessType` (here: `custom`) GET {{apiBasePath}}/crm/v1/openapi/oas3.json HTTP/1.1 content-type: application/json -sap-global-tenant-id: {{sapGlobalTenantId}} +global-tenant-id: {{sapGlobalTenantId}} ################################################################################# diff --git a/package-lock.json b/package-lock.json index b5959da..4c85f72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,44 +1,44 @@ { "name": "@sap/open-resource-discovery-reference-application", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sap/open-resource-discovery-reference-application", - "version": "1.0.0", + "version": "1.1.0", "dependencies": { - "@fastify/basic-auth": "5.1.1", - "@fastify/etag": "5.1.0", - "@fastify/static": "6.12.0", - "fastify": "^4.25.1", + "@fastify/basic-auth": "6.2.0", + "@fastify/etag": "6.0.3", + "@fastify/static": "8.1.1", + "fastify": "^5.3.2", "lodash": "^4.17.21", - "pino-pretty": "^10.3.0", - "uuid": "^9.0.1" + "pino-pretty": "^13.0.0", + "uuid": "^11.1.0" }, "devDependencies": { "@sap/open-resource-discovery": "./deps/open-resource-discovery", - "@tsconfig/node20": "20.1.2", + "@tsconfig/node20": "20.1.5", "@types/jest": "^29.5.14", "@types/json-schema": "^7.0.15", - "@types/lodash": "^4.14.202", - "@types/node": "^20.10.4", - "@types/pino": "^7.0.4", - "@types/uuid": "^9.0.7", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "eslint": "^8.55.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "3.6.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-prettier": "^5.0.1", + "@types/lodash": "^4.17.16", + "@types/node": "^22.15.17", + "@types/pino": "^7.0.5", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.32.0", + "@typescript-eslint/parser": "^8.32.0", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-import-resolver-typescript": "4.3.4", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.4.0", "jest": "^29.7.0", "openapi-types": "^12.1.3", - "prettier": "3.1.1", - "rimraf": "^5.0.5", - "ts-jest": "^29.2.5", - "tsx": "4.6.2", - "typescript": "~5.3.3" + "prettier": "3.5.3", + "rimraf": "^6.0.1", + "ts-jest": "^29.3.2", + "tsx": "4.19.4", + "typescript": "~5.8.3" }, "engines": { "node": ">=20.0.0", @@ -2957,392 +2957,543 @@ "node": ">=12" } }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3350,126 +3501,294 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", + "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@fastify/accept-negotiator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", - "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/accept-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", + "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/@fastify/ajv-compiler": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", - "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.2.tgz", + "integrity": "sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" } }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@fastify/ajv-compiler/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/@fastify/basic-auth": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@fastify/basic-auth/-/basic-auth-5.1.1.tgz", - "integrity": "sha512-L4b7EK5LKZnV6fdH1+rQbjhkKGXjCfiKJ0JkdGHZQPBMHMiXDZF8xbZsCakWGf9c7jDXJicP3FPcIXUPBkuSeQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fastify/basic-auth/-/basic-auth-6.2.0.tgz", + "integrity": "sha512-Ao9Jf8TyW8v7p3CPy++c+E3qcCDeWfAlSIfFo0CsKrfvm81i0OCpnobIMwaSSkg/At0rzsLzbJPDWrgNru0G1w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "@fastify/error": "^3.0.0", - "fastify-plugin": "^4.0.0" + "@fastify/error": "^4.0.0", + "fastify-plugin": "^5.0.0" } }, - "node_modules/@fastify/deepmerge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz", - "integrity": "sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==" - }, "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.1.0.tgz", + "integrity": "sha512-KeFcciOr1eo/YvIXHP65S94jfEEqn1RxTRBT1aJaHxY5FK0/GDXYozsQMMWlZoHgi8i0s+YtrLsgj/JkUUjSkQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/@fastify/etag": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@fastify/etag/-/etag-5.1.0.tgz", - "integrity": "sha512-j/huE8baxgF22idzY35a579b6uP+9ykE9Jt02xY4ZApELNr2KGZmQOKTQsZS94TfKMLfPHwkoM8FfZRq8OZDXg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@fastify/etag/-/etag-6.0.3.tgz", + "integrity": "sha512-pMXohCA6Bk9JBNLl/KhHkSCGN7PCbgwVqHydwMsd1sVKtV8YNuzRW7lEe1VYap/MTNOn/Q8OfcR667lyrNbT/A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "fastify-plugin": "^4.0.0" + "fastify-plugin": "^5.0.0" } }, "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz", + "integrity": "sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "fast-json-stringify": "^5.7.0" + "fast-json-stringify": "^6.0.0" } }, - "node_modules/@fastify/send": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", - "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", + "node_modules/@fastify/forwarded": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.0.0.tgz", + "integrity": "sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==", + "license": "MIT" + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz", + "integrity": "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "@lukeed/ms": "^2.0.1", - "escape-html": "~1.0.3", - "fast-decode-uri-component": "^1.0.1", - "http-errors": "2.0.0", - "mime": "^3.0.0" + "dequal": "^2.0.3" } }, - "node_modules/@fastify/static": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-6.12.0.tgz", - "integrity": "sha512-KK1B84E6QD/FcQWxDI2aiUCwHxMJBI1KeCUzm1BwYpPY1b742+jeKruGHP2uOluuM6OkBPI8CIANrXcCRtC2oQ==", - "dependencies": { - "@fastify/accept-negotiator": "^1.0.0", - "@fastify/send": "^2.0.0", - "content-disposition": "^0.5.3", - "fastify-plugin": "^4.0.0", - "glob": "^8.0.1", - "p-limit": "^3.1.0" + "node_modules/@fastify/proxy-addr": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.0.0.tgz", + "integrity": "sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==", + "license": "MIT", + "dependencies": { + "@fastify/forwarded": "^3.0.0", + "ipaddr.js": "^2.1.0" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { + "node_modules/@fastify/proxy-addr/node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@fastify/send": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-3.3.1.tgz", + "integrity": "sha512-6pofeVwaHN+E/MAofCwDqkWUliE3i++jlD0VH/LOfU8TJlCkMUSgKvA9bawDdVXxjve7XrdYMyDmkiYaoGWEtA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@lukeed/ms": "^2.0.2", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "^2.0.0", + "mime": "^3" + } + }, + "node_modules/@fastify/static": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-8.1.1.tgz", + "integrity": "sha512-TW9eyVHJLytZNpBlSIqd0bl1giJkEaRaPZG+5AT3L/OBKq9U8D7g/OYmc2NPQZnzPURGhMt3IAWuyVkvd2nOkQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/accept-negotiator": "^2.0.0", + "@fastify/send": "^3.2.0", + "content-disposition": "^0.5.4", + "fastify-plugin": "^5.0.0", + "fastq": "^1.17.1", + "glob": "^11.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", @@ -3478,18 +3797,42 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -3505,17 +3848,25 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3529,10 +3880,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -3544,7 +3895,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -4052,6 +4403,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "license": "MIT", "engines": { "node": ">=8" } @@ -4108,6 +4460,365 @@ "react": ">=16" } }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", + "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz", + "integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@tybys/wasm-util": "^0.9.0" + } + }, "node_modules/@node-rs/jieba": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.7.2.tgz", @@ -4379,34 +5090,17 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@pkgr/core": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pkgr" } }, "node_modules/@pnpm/config.env-replace": { @@ -4456,6 +5150,13 @@ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@sap/open-resource-discovery": { "resolved": "deps/open-resource-discovery", "link": true @@ -4821,10 +5522,22 @@ } }, "node_modules/@tsconfig/node20": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.2.tgz", - "integrity": "sha512-madaWq2k+LYMEhmcp0fs+OGaLFk0OenpHa4gmI4VEmCKX4PJntQ6fnnGADVFrVkBj0wIdAlQnK/MrlYTHsa1gQ==", - "dev": true + "version": "20.1.5", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.5.tgz", + "integrity": "sha512-Vm8e3WxDTqMGPU4GATF9keQAIy1Drd7bPwlgzKJnZtoOsTm1tduUTbDjg0W5qERvGuxPI2h9RbMufH0YdfBylA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } }, "node_modules/@types/acorn": { "version": "4.0.6", @@ -4944,10 +5657,11 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.3", @@ -5086,10 +5800,11 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", - "dev": true + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", + "dev": true, + "license": "MIT" }, "node_modules/@types/mdast": { "version": "4.0.3", @@ -5119,12 +5834,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "version": "22.15.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", + "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-forge": { @@ -5240,12 +5956,6 @@ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", @@ -5298,10 +6008,11 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", - "dev": true + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.10", @@ -5328,79 +6039,72 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.15.0.tgz", - "integrity": "sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", + "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/type-utils": "6.15.0", - "@typescript-eslint/utils": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/type-utils": "8.32.0", + "@typescript-eslint/utils": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.15.0.tgz", - "integrity": "sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", + "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/typescript-estree": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.15.0.tgz", - "integrity": "sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", + "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0" + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -5408,39 +6112,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.15.0.tgz", - "integrity": "sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", + "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.15.0", - "@typescript-eslint/utils": "6.15.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/utils": "8.32.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/types": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.15.0.tgz", - "integrity": "sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", + "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -5448,80 +6150,360 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.15.0.tgz", - "integrity": "sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", + "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/visitor-keys": "6.15.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/utils": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.15.0.tgz", - "integrity": "sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", + "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.15.0", - "@typescript-eslint/types": "6.15.0", - "@typescript-eslint/typescript-estree": "6.15.0", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.15.0.tgz", - "integrity": "sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", + "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.15.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.32.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.2.tgz", + "integrity": "sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.2.tgz", + "integrity": "sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.2.tgz", + "integrity": "sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.2.tgz", + "integrity": "sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.2.tgz", + "integrity": "sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.2.tgz", + "integrity": "sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.2.tgz", + "integrity": "sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.2.tgz", + "integrity": "sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.2.tgz", + "integrity": "sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.2.tgz", + "integrity": "sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.2.tgz", + "integrity": "sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.2.tgz", + "integrity": "sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.2.tgz", + "integrity": "sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.2.tgz", + "integrity": "sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.9" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.2.tgz", + "integrity": "sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.2.tgz", + "integrity": "sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.2.tgz", + "integrity": "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -5680,17 +6662,6 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/abstract-logging": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", @@ -5731,10 +6702,11 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5811,6 +6783,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, "dependencies": { "ajv": "^8.0.0" }, @@ -5827,6 +6800,7 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5841,7 +6815,8 @@ "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/ajv-keywords": { "version": "3.5.2", @@ -5958,7 +6933,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -5967,7 +6941,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -5991,11 +6964,6 @@ "node": ">= 8" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -6009,13 +6977,17 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6028,15 +7000,17 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -6056,16 +7030,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6111,18 +7088,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -6146,6 +7124,16 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -6159,6 +7147,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -6201,10 +7190,14 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6213,13 +7206,13 @@ } }, "node_modules/avvio": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.1.tgz", - "integrity": "sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", + "license": "MIT", "dependencies": { - "archy": "^1.0.0", - "debug": "^4.0.0", - "fastq": "^1.6.1" + "@fastify/error": "^4.0.0", + "fastq": "^1.17.1" } }, "node_modules/babel-jest": { @@ -6428,26 +7421,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/batch": { "version": "0.6.1", @@ -6455,15 +7429,6 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -6582,18 +7547,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6669,50 +7622,12 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -6762,14 +7677,50 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7213,7 +8164,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7224,8 +8174,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { "version": "2.9.3", @@ -7412,6 +8361,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -7530,6 +8480,20 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -7568,10 +8532,10 @@ } }, "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, + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7875,6 +8839,60 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -7890,11 +8908,13 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -7983,40 +9003,6 @@ "node": ">=0.10.0" } }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -8128,29 +9114,21 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -8239,7 +9217,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "engines": { "node": ">=6" } @@ -8367,18 +9344,6 @@ "node": ">=6" } }, - "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/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -8477,6 +9442,21 @@ "node": ">=8" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -8486,8 +9466,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ee-first": { "version": "1.1.1", @@ -8531,8 +9510,7 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/emojilib": { "version": "2.4.0", @@ -8611,50 +9589,63 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -8663,44 +9654,84 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -8710,40 +9741,44 @@ } }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escalade": { @@ -8785,68 +9820,80 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", + "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.26.0", + "@eslint/plugin-kit": "^0.2.8", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@modelcontextprotocol/sdk": "^1.8.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "zod": "^3.24.2" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", + "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -8872,35 +9919,45 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.4.tgz", + "integrity": "sha512-buzw5z5VtiQMysYLH9iW9BV04YyZebsw+gPi+c4FCjfS9i6COYOrEWw9t3m3wA9PFBfqcBCqWf32qrXLbwafDw==", "dev": true, + "license": "ISC", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.3" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^16.17.0 || >=18.6.0" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://opencollective.com/eslint-import-resolver-typescript" }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -8918,39 +9975,43 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -8984,24 +10045,25 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.1.tgz", - "integrity": "sha512-WQpV3mSmIobb77s4qiCZu3dBrZZ0rj8ckSfBtRrgNK9Wnh2s3eiaxNTWloz1LJ1WtvqZES/PAI7PLvsrGt/CEA==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", + "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "synckit": "^0.11.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -9014,16 +10076,17 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9041,18 +10104,45 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9240,14 +10330,6 @@ "node": ">= 0.8" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -9258,31 +10340,32 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "engines": { "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" } }, "node_modules/exit": { @@ -9352,6 +10435,22 @@ "node": ">= 0.10.0" } }, + "node_modules/express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "^4.11 || 5 || ^5.0.0-beta.1" + } + }, "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -9406,20 +10505,17 @@ "node": ">=0.10.0" } }, - "node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" - }, "node_modules/fast-copy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", - "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -9467,38 +10563,67 @@ "dev": true }, "node_modules/fast-json-stringify": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.9.1.tgz", - "integrity": "sha512-NMrf+uU9UJnTzfxaumMDXK1NWqtPCfGoM9DYIE+ESlaTQqjlANFBy0VAbsm6FB88Mx0nceyi18zTo5kIEUlzxg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.1.tgz", + "integrity": "sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "@fastify/deepmerge": "^1.0.0", - "ajv": "^8.10.0", - "ajv-formats": "^2.1.1", - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", - "json-schema-ref-resolver": "^1.0.1", + "@fastify/merge-json-schemas": "^0.2.0", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0", + "json-schema-ref-resolver": "^2.0.0", "rfdc": "^1.2.0" } }, "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/fast-json-stringify/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -9510,6 +10635,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } @@ -9528,9 +10654,20 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-uri": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", - "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fast-url-parser": { "version": "1.1.3", @@ -9548,37 +10685,65 @@ "dev": true }, "node_modules/fastify": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.25.1.tgz", - "integrity": "sha512-D8d0rv61TwqoAS7lom2tvIlgVMlx88lLsiwXyWNjA7CU/LC/mx/Gp2WAlC0S/ABq19U+y/aRvYFG5xLUu2aMrg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.3.2.tgz", + "integrity": "sha512-AIPqBgtqBAwkOkrnwesEE+dOyU30dQ4kh7udxeGVR05CRGwubZx+p2H8P0C4cRnQT0+EPK4VGea2DTL2RtWttg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", + "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", - "avvio": "^8.2.1", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^7.7.0", - "light-my-request": "^5.11.0", - "pino": "^8.17.0", - "process-warning": "^3.0.0", - "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", - "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", + "pino": "^9.0.0", + "process-warning": "^5.0.0", + "rfdc": "^1.3.1", + "secure-json-parse": "^4.0.0", + "semver": "^7.6.0", + "toad-cache": "^3.7.0" } }, "node_modules/fastify-plugin": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", - "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz", + "integrity": "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==", + "license": "MIT" + }, + "node_modules/fastify/node_modules/secure-json-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz", + "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -9630,15 +10795,16 @@ } }, "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==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-loader": { @@ -9780,16 +10946,17 @@ } }, "node_modules/find-my-way": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.7.0.tgz", - "integrity": "sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.3.0.tgz", + "integrity": "sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^2.0.0" + "safe-regex2": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/find-up": { @@ -9818,59 +10985,25 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "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" + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.3", @@ -9893,21 +11026,28 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -9921,7 +11061,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -10068,6 +11208,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -10117,7 +11258,8 @@ "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -10143,15 +11285,18 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -10165,6 +11310,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10188,15 +11334,25 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10217,6 +11373,20 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -10230,13 +11400,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10246,10 +11418,11 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", "dev": true, + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -10264,18 +11437,23 @@ "dev": true }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=12" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -10303,19 +11481,24 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/global-dirs": { @@ -10381,27 +11564,27 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -10431,12 +11614,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10550,10 +11734,14 @@ "dev": true }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10568,22 +11756,27 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -10592,10 +11785,11 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10604,12 +11798,13 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -10631,10 +11826,11 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -11155,15 +12351,6 @@ "node": ">=10.19.0" } }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -11188,30 +12375,12 @@ "postcss": "^8.1.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -11386,6 +12555,7 @@ "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" @@ -11409,14 +12579,15 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11444,6 +12615,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, "engines": { "node": ">= 0.10" } @@ -11473,14 +12645,18 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11492,13 +12668,37 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11517,13 +12717,14 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11532,11 +12733,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11557,24 +12769,48 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11593,21 +12829,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -11626,11 +12847,26 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -11644,6 +12880,25 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -11666,24 +12921,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -11700,11 +12937,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11734,12 +12972,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11796,6 +13036,13 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-reference": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", @@ -11806,13 +13053,16 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11839,37 +13089,44 @@ "node": ">=6" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11879,12 +13136,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11894,12 +13154,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -11914,13 +13175,47 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11966,13 +13261,13 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -12059,21 +13354,18 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=14" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jake": { @@ -12869,11 +14161,22 @@ "dev": true }, "node_modules/json-schema-ref-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-2.0.1.tgz", + "integrity": "sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" + "dequal": "^2.0.3" } }, "node_modules/json-schema-traverse": { @@ -12996,19 +14299,50 @@ } }, "node_modules/light-my-request": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.11.0.tgz", - "integrity": "sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz", + "integrity": "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", "dependencies": { - "cookie": "^0.5.0", - "process-warning": "^2.0.0", - "set-cookie-parser": "^2.4.1" + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" + } + }, + "node_modules/light-my-request/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" } }, "node_modules/light-my-request/node_modules/process-warning": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", - "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/lilconfig": { "version": "2.1.0", @@ -13148,14 +14482,12 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", "engines": { - "node": ">=10" + "node": "20 || >=22" } }, "node_modules/lunr": { @@ -13228,6 +14560,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdast-util-directive": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", @@ -15466,6 +16808,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -15494,18 +16837,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mimic-response": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", @@ -15564,10 +16895,10 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -15582,9 +16913,11 @@ } }, "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==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/multicast-dns": { "version": "7.2.5", @@ -15617,6 +16950,22 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-postinstall": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.3.tgz", + "integrity": "sha512-Mi7JISo/4Ij2tDZ2xBE2WH+/KvVlkhA6juEjpEeRAVPNCpN3nxJo/5FhDNKgBcdmcmhaH6JjgST4xY/23ZYK0w==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -15714,33 +17063,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", @@ -15769,10 +17091,14 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15787,14 +17113,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -15805,14 +17134,16 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15822,26 +17153,31 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15893,39 +17229,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", @@ -15958,6 +17261,24 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -15971,6 +17292,7 @@ "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" }, @@ -16051,6 +17373,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -16195,7 +17523,6 @@ "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" } @@ -16207,30 +17534,21 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", @@ -16285,53 +17603,54 @@ } }, "node_modules/pino": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.1.tgz", - "integrity": "sha512-YoN7/NJgnsJ+fkADZqjhRt96iepWBndQHeClmSBH0sQWCb8zGD74t00SK4eOtKFi/f8TUmQnfmgglEhd2kI1RQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz", + "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", "dependencies": { - "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "node_modules/pino-pretty": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.0.tgz", - "integrity": "sha512-JthvQW289q3454mhM3/38wFYGWPiBMR28T3CpDNABzoTQOje9UKS7XCJQSnjWF9LQGQkGd8D7h0oq+qwiM3jFA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.0.0.tgz", + "integrity": "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==", + "license": "MIT", "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", - "fast-copy": "^3.0.0", + "fast-copy": "^3.0.2", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.0.0", + "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", - "readable-stream": "^4.0.0", "secure-json-parse": "^2.4.0", - "sonic-boom": "^3.0.0", + "sonic-boom": "^4.0.1", "strip-json-comments": "^3.1.1" }, "bin": { @@ -16339,14 +17658,26 @@ } }, "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" }, "node_modules/pino/node_modules/process-warning": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", - "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/pirates": { "version": "4.0.6", @@ -16357,6 +17688,16 @@ "node": ">= 6" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-dir": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", @@ -16527,6 +17868,16 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.32", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", @@ -17169,10 +18520,11 @@ } }, "node_modules/prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", - "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -17268,14 +18620,6 @@ "node": ">=6" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -17283,9 +18627,20 @@ "dev": true }, "node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/prompts": { "version": "2.4.2", @@ -17331,6 +18686,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -17352,6 +18708,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -17752,21 +19109,6 @@ "react": ">=15" } }, - "node_modules/readable-stream": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.1.tgz", - "integrity": "sha512-uQjbf34vmf/asGnOHQEw07Q4llgMACQZTWWa4MmICS0IKJoHbLwKCy71H3eR99Dw5iYejc6W+pqZZEeqRtUFAw==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -17789,6 +19131,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -17817,6 +19160,29 @@ "node": ">=6.0.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -17851,14 +19217,18 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -18309,11 +19679,12 @@ } }, "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/retry": { @@ -18335,72 +19706,56 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, "node_modules/rimraf": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", - "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, + "license": "ISC", "dependencies": { - "glob": "^10.3.7" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=14" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 18" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/rtl-detect": { @@ -18427,110 +19782,6 @@ "node": ">=12.0.0" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/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/run-applescript/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/run-applescript/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/run-applescript/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/run-applescript/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/run-applescript/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/run-applescript/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/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -18555,14 +19806,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -18591,26 +19844,58 @@ } ] }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-regex2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", - "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.0.0.tgz", + "integrity": "sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", "dependencies": { - "ret": "~0.2.0" + "ret": "~0.5.0" } }, "node_modules/safe-stable-stringify": { @@ -18740,12 +20025,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -18819,12 +20102,6 @@ "node": ">=4" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/send/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -18968,34 +20245,55 @@ } }, "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -19028,7 +20326,6 @@ "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" }, @@ -19040,7 +20337,6 @@ "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" } @@ -19092,14 +20388,76 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19198,9 +20556,10 @@ } }, "node_modules/sonic-boom": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.7.0.tgz", - "integrity": "sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -19309,6 +20668,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -19338,6 +20698,13 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -19377,6 +20744,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -19398,7 +20766,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -19416,7 +20783,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19430,13 +20797,12 @@ "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 + "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -19448,7 +20814,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -19460,14 +20825,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -19477,28 +20847,37 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19536,7 +20915,6 @@ "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" }, @@ -19549,7 +20927,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -19575,18 +20953,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -19752,19 +21118,20 @@ } }, "node_modules/synckit": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", - "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", + "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", "dev": true, + "license": "MIT", "dependencies": { - "@pkgr/utils": "^2.4.2", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.3", + "tslib": "^2.8.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" } }, "node_modules/tapable": { @@ -19923,9 +21290,10 @@ "dev": true }, "node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } @@ -19948,16 +21316,49 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "dev": true }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/tmpl": { @@ -19979,9 +21380,10 @@ } }, "node_modules/toad-cache": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.4.1.tgz", - "integrity": "sha512-T0m3MxP3wcqW0LaV3dF1mHBU294sgYSm4FOpa5eEJaYO7PqJZBOjZEQI1y4YaKNnih1FXCEYTWDS9osCoTUefg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", "engines": { "node": ">=12" } @@ -20024,22 +21426,24 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", @@ -20048,7 +21452,8 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.1", + "type-fest": "^4.39.1", "yargs-parser": "^21.1.1" }, "bin": { @@ -20095,16 +21500,17 @@ "node": ">=6" } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tsconfig-paths": { @@ -20120,19 +21526,21 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/tsx": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.6.2.tgz", - "integrity": "sha512-QPpBdJo+ZDtqZgAnq86iY/PD2KYCUPSUGIunHdGwyII99GKH+f3z3FZ8XNFLSGQIA4I365ui8wnQpl8OKLqcsg==", + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "~0.18.20", - "get-tsconfig": "^4.7.2" + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" }, "bin": { "tsx": "dist/cli.mjs" @@ -20165,18 +21573,6 @@ "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/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -20212,29 +21608,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -20244,16 +21643,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -20263,14 +21665,21 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -20286,10 +21695,11 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -20299,25 +21709,30 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -20515,13 +21930,37 @@ "node": ">= 0.8" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "node_modules/unrs-resolver": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.2.tgz", + "integrity": "sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==", "dev": true, - "engines": { - "node": ">=8" + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.7.2", + "@unrs/resolver-binding-darwin-x64": "1.7.2", + "@unrs/resolver-binding-freebsd-x64": "1.7.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.7.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.7.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.7.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-x64-musl": "1.7.2", + "@unrs/resolver-binding-wasm32-wasi": "1.7.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.7.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.7.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.7.2" } }, "node_modules/update-browserslist-db": { @@ -20644,6 +22083,7 @@ "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" } @@ -20745,15 +22185,16 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-to-istanbul": { @@ -21299,7 +22740,6 @@ "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" }, @@ -21311,32 +22751,86 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -21370,7 +22864,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -21388,7 +22881,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -21405,13 +22898,13 @@ "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 + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -21425,7 +22918,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -21437,7 +22929,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -21449,7 +22940,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -21531,11 +23021,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -21596,6 +23081,7 @@ "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" }, @@ -21603,6 +23089,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index b7dc859..adb90f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sap/open-resource-discovery-reference-application", - "version": "1.0.0", + "version": "1.1.0", "description": "This is a reference application for the Open Resource Discovery protocol", "type": "module", "private": true, @@ -10,7 +10,7 @@ }, "scripts": { "build": "rimraf dist && tsc", - "start": "ls -la . && ls -la ./deps && ls -la ./node_modules && ls -la ./dist && node ./dist/src/server.js", + "start": "node ./dist/src/server.js", "dev": "tsx watch ./src/server.ts", "eslint": "eslint . --fix", "eslint:ci": "eslint .", @@ -26,36 +26,36 @@ }, "author": "SAP SE", "dependencies": { - "@fastify/basic-auth": "5.1.1", - "@fastify/etag": "5.1.0", - "@fastify/static": "6.12.0", - "fastify": "^4.25.1", + "@fastify/basic-auth": "6.2.0", + "@fastify/etag": "6.0.3", + "@fastify/static": "8.1.1", + "fastify": "^5.3.2", "lodash": "^4.17.21", - "pino-pretty": "^10.3.0", - "uuid": "^9.0.1" + "pino-pretty": "^13.0.0", + "uuid": "^11.1.0" }, "devDependencies": { "@sap/open-resource-discovery": "./deps/open-resource-discovery", - "@tsconfig/node20": "20.1.2", + "@tsconfig/node20": "20.1.5", "@types/jest": "^29.5.14", "@types/json-schema": "^7.0.15", - "@types/lodash": "^4.14.202", - "@types/node": "^20.10.4", - "@types/pino": "^7.0.4", - "@types/uuid": "^9.0.7", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "eslint": "^8.55.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "3.6.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-prettier": "^5.0.1", + "@types/lodash": "^4.17.16", + "@types/node": "^22.15.17", + "@types/pino": "^7.0.5", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.32.0", + "@typescript-eslint/parser": "^8.32.0", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-import-resolver-typescript": "4.3.4", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.4.0", "jest": "^29.7.0", "openapi-types": "^12.1.3", - "prettier": "3.1.1", - "rimraf": "^5.0.5", - "ts-jest": "^29.2.5", - "tsx": "4.6.2", - "typescript": "~5.3.3" + "prettier": "3.5.3", + "rimraf": "^6.0.1", + "ts-jest": "^29.3.2", + "tsx": "4.19.4", + "typescript": "~5.8.3" } } diff --git a/src/__tests__/server.integration.test.ts b/src/__tests__/server.integration.test.ts index 3b45798..c6a6254 100644 --- a/src/__tests__/server.integration.test.ts +++ b/src/__tests__/server.integration.test.ts @@ -150,24 +150,23 @@ describe('Server Integration Tests', () => { expect(body).toHaveProperty('openResourceDiscoveryV1') }) - it('should return ORD document 1', async () => { + it('should return static system-instance perspective ORD document', async () => { const response = await app.inject({ method: 'GET', - url: '/open-resource-discovery/v1/documents/1', + url: '/open-resource-discovery/v1/documents/system-version', }) expect(response.statusCode).toBe(200) const body = JSON.parse(response.payload) as Partial expect(body).toHaveProperty('openResourceDiscovery') - expect(body).toHaveProperty('policyLevel') }) - it('should return tenant-aware ORD document 2', async () => { + it('should return tenant-aware, system-instance ORD document', async () => { const response = await app.inject({ method: 'GET', - url: '/open-resource-discovery/v1/documents/2', + url: '/open-resource-discovery/v1/documents/system-instance', headers: { - 'sap-local-tenant-id': 'T1', + 'local-tenant-id': 'T1', }, }) @@ -196,7 +195,7 @@ describe('Server Integration Tests', () => { method: 'GET', url: '/sap-events/v1/odm-finance-costobject.asyncapi2.json', headers: { - 'sap-local-tenant-id': 'T1', + 'local-tenant-id': 'T1', }, }) diff --git a/src/api/open-resource-discovery/v1/data/configuration.ts b/src/api/open-resource-discovery/v1/data/configuration.ts index e05cf3d..d1f6222 100644 --- a/src/api/open-resource-discovery/v1/data/configuration.ts +++ b/src/api/open-resource-discovery/v1/data/configuration.ts @@ -4,14 +4,18 @@ import { customAccessStrategyLocalTenantId, customAccessStrategyGlobalTenantId, export const ordConfiguration: ORDConfiguration = { openResourceDiscoveryV1: { documents: [ + // Serve static metadata with open access strategy, ignore tenant headers { - url: '/open-resource-discovery/v1/documents/1', + url: '/open-resource-discovery/v1/documents/system-version', accessStrategies: [openAccessStrategy], + perspective: "system-version" }, + // Serve dynamic metadata, requires system / tenant headers and the correct access strategy { - url: '/open-resource-discovery/v1/documents/2', - accessStrategies: [customAccessStrategyGlobalTenantId, customAccessStrategyLocalTenantId, openAccessStrategy], - systemInstanceAware: true, + url: '/open-resource-discovery/v1/documents/system-instance', + accessStrategies: [customAccessStrategyGlobalTenantId, customAccessStrategyLocalTenantId], + perspective: "system-instance" + }, ], }, diff --git a/src/api/open-resource-discovery/v1/data/document-2.ts b/src/api/open-resource-discovery/v1/data/document-2.ts deleted file mode 100644 index 32f0954..0000000 --- a/src/api/open-resource-discovery/v1/data/document-2.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { APIResource, ORDDocument } from '@sap/open-resource-discovery' -import _ from 'lodash' -import { tenants } from '../../../../data/user/tenants.js' -import { crmV1ApiConfig } from '../../../crm/v1/config.js' -import { - appNamespace, - basicAuthConsumptionBundle, - customAccessStrategyGlobalTenantId, - customAccessStrategyLocalTenantId, - describedSystemInstance, - openAccessStrategy, - ordReferenceAppApiPackage, -} from './shared.js' - -const crmV1ApiResource: APIResource = { - ordId: `${appNamespace}:apiResource:${crmV1ApiConfig.apiNamespace}:${crmV1ApiConfig.apiMajorVersion}`, - title: crmV1ApiConfig.apiName, - shortDescription: 'The CRM API allows you to manage customers...', - description: 'This API is **protected** via BasicAuth and is tenant aware', - version: crmV1ApiConfig.apiVersion, - lastUpdate: new Date().toISOString(), - visibility: 'internal', - releaseStatus: 'beta', - systemInstanceAware: true, - partOfPackage: ordReferenceAppApiPackage.ordId, - partOfConsumptionBundles: [ - { - ordId: basicAuthConsumptionBundle.ordId, - }, - ], - apiProtocol: 'rest', - apiResourceLinks: [ - { - type: 'api-documentation', - url: '/swagger-ui.html?urls.primaryName=CRM%20V1%20API', - }, - ], - resourceDefinitions: [ - { - type: 'openapi-v3', - mediaType: 'application/json', - url: '/crm/v1/openapi/oas3.json', - accessStrategies: [customAccessStrategyGlobalTenantId, customAccessStrategyLocalTenantId, openAccessStrategy], - }, - ], - entryPoints: [`/${crmV1ApiConfig.apiEntryPoint}`], - extensible: { - supported: 'manual', - description: 'This API can be extended with custom fields.', - }, - changelogEntries: [ - { - version: '0.3.0', - date: '2021-05-25', - releaseStatus: 'beta', - }, - ], -} - -/** - * This is the complete ORD document that will be served through the ORD Document API - */ -const ordDocument2: ORDDocument = { - openResourceDiscovery: '1.6', - policyLevel: 'sap:core:v1', - description: 'This is an example ORD document which is protected and system instance aware (as are its resources).', - describedSystemInstance: describedSystemInstance, - apiResources: [crmV1ApiResource], - eventResources: [], - consumptionBundles: [basicAuthConsumptionBundle], -} - -/** - * As we want to demonstrate a tenant specific ORD Document, - * We'll return a different one per tenant, respecting some tenant configurations - */ -export function getOrdDocument2ForTenant(localTenantId?: string): ORDDocument { - const tenantSpecificOrdDocument1 = _.cloneDeep(ordDocument2) - - // If we don't provide a local tenant Id, we'll return the ORD document without tenant specific modifications - // An alternative to this could be to throw an invalid user input error and require to provide a tenant - if (!localTenantId) { - return tenantSpecificOrdDocument1 - } - tenantSpecificOrdDocument1.description += `\nThis ORD Document is specific to tenant "${localTenantId}"` - - const tenantConfig = tenants[localTenantId] - if (!tenantConfig.enabledApis.includes('crm')) { - // Do not describe the CRM V1 API if the tenant does not have it available - _.remove(tenantSpecificOrdDocument1.apiResources || [], { - ordId: crmV1ApiResource.ordId, - }) - } - - return tenantSpecificOrdDocument1 -} diff --git a/src/api/open-resource-discovery/v1/data/document-1.ts b/src/api/open-resource-discovery/v1/data/document.ts similarity index 55% rename from src/api/open-resource-discovery/v1/data/document-1.ts rename to src/api/open-resource-discovery/v1/data/document.ts index 7f373eb..92fa050 100644 --- a/src/api/open-resource-discovery/v1/data/document-1.ts +++ b/src/api/open-resource-discovery/v1/data/document.ts @@ -1,6 +1,8 @@ +import _ from 'lodash' import { APIResource, EntityType, EventResource, ORDDocument } from '@sap/open-resource-discovery' import { odmFinanceCostObjectEventConfig } from '../../../../event/odm-finance-costobject/v1/config.js' - +import { tenants } from '../../../../data/user/tenants.js' +import { crmV1ApiConfig } from '../../../crm/v1/config.js' import { astronomyV1ApiConfig } from '../../../astronomy/v1/config.js' import { describedSystemInstance, @@ -12,6 +14,8 @@ import { appNamespace, customAccessStrategyGlobalTenantId, customAccessStrategyLocalTenantId, + describedSystemVersion, + basicAuthConsumptionBundle, } from './shared.js' export const constellationEntityType: EntityType = { @@ -35,7 +39,6 @@ const astronomyV1ApiResource: APIResource = { lastUpdate: '2023-02-03T06:44:10Z', visibility: 'public', releaseStatus: 'active', - systemInstanceAware: false, partOfPackage: ordReferenceAppApiPackage.ordId, partOfConsumptionBundles: [{ ordId: noAuthConsumptionBundle.ordId }], apiProtocol: 'rest', @@ -68,6 +71,50 @@ const astronomyV1ApiResource: APIResource = { ], } +const crmV1ApiResource: APIResource = { + ordId: `${appNamespace}:apiResource:${crmV1ApiConfig.apiNamespace}:${crmV1ApiConfig.apiMajorVersion}`, + title: crmV1ApiConfig.apiName, + shortDescription: 'The CRM API allows you to manage customers...', + description: 'This API is **protected** via BasicAuth and is tenant aware', + version: crmV1ApiConfig.apiVersion, + lastUpdate: new Date().toISOString(), + visibility: 'internal', + releaseStatus: 'beta', + partOfPackage: ordReferenceAppApiPackage.ordId, + partOfConsumptionBundles: [ + { + ordId: basicAuthConsumptionBundle.ordId, + }, + ], + apiProtocol: 'rest', + apiResourceLinks: [ + { + type: 'api-documentation', + url: '/swagger-ui.html?urls.primaryName=CRM%20V1%20API', + }, + ], + resourceDefinitions: [ + { + type: 'openapi-v3', + mediaType: 'application/json', + url: '/crm/v1/openapi/oas3.json', + accessStrategies: [customAccessStrategyGlobalTenantId, customAccessStrategyLocalTenantId, openAccessStrategy], + }, + ], + entryPoints: [`/${crmV1ApiConfig.apiEntryPoint}`], + extensible: { + supported: 'manual', + description: 'This API can be extended with custom fields.', + }, + changelogEntries: [ + { + version: '0.3.0', + date: '2021-05-25', + releaseStatus: 'beta', + }, + ], +} + const odmFinanceCostObjectV1EventResource: EventResource = { ordId: `${appNamespace}:eventResource:${odmFinanceCostObjectEventConfig.eventResourceName}:${odmFinanceCostObjectEventConfig.eventResourceMajorVersion}`, title: odmFinanceCostObjectEventConfig.eventResourceTitle, @@ -103,15 +150,17 @@ const odmFinanceCostObjectV1EventResource: EventResource = { /** * This is the complete ORD document that will be served through the ORD Document API */ -export const ordDocument1: ORDDocument = { - openResourceDiscovery: '1.6', - policyLevel: 'sap:core:v1', - description: 'This is an example ORD document which is unprotected and openly accessible.', +export const ordDocument: ORDDocument = { + openResourceDiscovery: '1.10', + policyLevels: ['sap:core:v1'], + perspective: 'system-version', + describedSystemVersion: describedSystemVersion, + description: 'This is an example ORD document which describes the entire reference app in one document.', describedSystemInstance: describedSystemInstance, products: [product], packages: [ordReferenceAppApiPackage, ordReferenceAppEventsPackage], consumptionBundles: [noAuthConsumptionBundle], - apiResources: [astronomyV1ApiResource], + apiResources: [astronomyV1ApiResource, crmV1ApiResource], eventResources: [odmFinanceCostObjectV1EventResource], entityTypes: [constellationEntityType], tombstones: [ @@ -121,3 +170,36 @@ export const ordDocument1: ORDDocument = { }, ], } + +/** + * As we want to demonstrate a tenant specific ORD Document, + * We'll return a different one per tenant, respecting some tenant configurations + */ +export function getOrdDocumentForTenant(tenantId?: string): ORDDocument { + const tenantSpecificOrdDocument = _.cloneDeep(ordDocument) + + tenantSpecificOrdDocument.perspective = 'system-instance' + + // If we don't provide a local tenant Id, we'll return the ORD document without tenant specific modifications + // An alternative to this could be to throw an invalid user input error and require to provide a tenant + if (!tenantId) { + return tenantSpecificOrdDocument + } + + // Add describedSystemInstance with the local tenant ID + tenantSpecificOrdDocument.describedSystemInstance = { + localId: tenantId, + } + + tenantSpecificOrdDocument.description += `\nThis ORD Document is specific to tenant "${tenantId}"` + + const tenantConfig = tenants[tenantId] + if (!tenantConfig.enabledApis.includes('crm')) { + // Do not describe the CRM V1 API if the tenant does not have it available + _.remove(tenantSpecificOrdDocument.apiResources || [], { + ordId: crmV1ApiResource.ordId, + }) + } + + return tenantSpecificOrdDocument +} diff --git a/src/api/open-resource-discovery/v1/data/shared.ts b/src/api/open-resource-discovery/v1/data/shared.ts index e7aeed2..e942f4b 100644 --- a/src/api/open-resource-discovery/v1/data/shared.ts +++ b/src/api/open-resource-discovery/v1/data/shared.ts @@ -1,9 +1,17 @@ -import { AccessStrategy, ConsumptionBundle, Package, Product, SystemInstance } from '@sap/open-resource-discovery' +import { + AccessStrategy, + ConsumptionBundle, + Package, + Product, + SystemInstance, + SystemVersion, +} from '@sap/open-resource-discovery' import path from 'path' import { PUBLIC_URL } from '../../../../config.js' import { readFileSync } from 'fs' const packageJson = JSON.parse(readFileSync(path.resolve(process.cwd(), 'package.json'), 'utf-8')) as { + version: string description: string } @@ -21,6 +29,9 @@ const vendorSapReference = 'sap:vendor:SAP:' export const describedSystemInstance: SystemInstance = { baseUrl: PUBLIC_URL, } +export const describedSystemVersion: SystemVersion = { + version: packageJson.version, +} export const product: Product = { ordId: `${appNamespace}:product:ord-reference-app:`, diff --git a/src/api/open-resource-discovery/v1/index.ts b/src/api/open-resource-discovery/v1/index.ts index a287be0..52e81dd 100644 --- a/src/api/open-resource-discovery/v1/index.ts +++ b/src/api/open-resource-discovery/v1/index.ts @@ -4,8 +4,7 @@ import { globalTenantIdToLocalTenantIdMapping } from '../../../data/user/tenantM import { getTenantIdsFromHeader } from '../../shared/validateUserAuthorization.js' import { ordDocumentApiV1Config } from './config.js' import { ordConfiguration } from './data/configuration.js' -import { ordDocument1 } from './data/document-1.js' -import { getOrdDocument2ForTenant } from './data/document-2.js' +import { getOrdDocumentForTenant, ordDocument } from './data/document.js' export async function ordDocumentV1Api(fastify: FastifyInstance): Promise { fastify.log.info(`Registering ${ordDocumentApiV1Config.apiName}...`) @@ -21,30 +20,30 @@ export async function ordDocumentV1Api(fastify: FastifyInstance): Promise return ordConfiguration }) - // Serve the unprotected, system instance unaware ORD Document #1 - fastify.get(`/${ordDocumentApiV1Config.apiEntryPoint}/documents/1`, async () => { - return ordDocument1 + // Serve the unprotected, static "system-version" ORD document + fastify.get(`/${ordDocumentApiV1Config.apiEntryPoint}/documents/system-version`, async () => { + return ordDocument }) - // SYSTEM INSTANCE AWARE ORD information + // DYNAMIC (system instance perspective) ORD information // Serve the unprotected, but system instance aware ORD Document #2 // The result of this request will differ, depending on the tenant chosen // We'll implement this as an ORD access strategy, where the tenant ID is passed via Header // To show multiple options, we can offer both local tenant ID and global tenant ID for correlations - fastify.get(`/${ordDocumentApiV1Config.apiEntryPoint}/documents/2`, async (req: FastifyRequest) => { + fastify.get(`/${ordDocumentApiV1Config.apiEntryPoint}/documents/system-instance`, async (req: FastifyRequest) => { const tenantIds = getTenantIdsFromHeader(req) if (tenantIds.localTenantId) { // This is the `sap.foo.bar:open-local-tenant-id:v1` access strategy - return getOrdDocument2ForTenant(tenantIds.localTenantId) + return getOrdDocumentForTenant(tenantIds.localTenantId) } else if (tenantIds.sapGlobalTenantId) { // This is the `sap.foo.bar:open-global-tenant-id:v1` access strategy - return getOrdDocument2ForTenant(globalTenantIdToLocalTenantIdMapping[tenantIds.sapGlobalTenantId]) + return getOrdDocumentForTenant(globalTenantIdToLocalTenantIdMapping[tenantIds.sapGlobalTenantId]) } else { - // Return the ORD Document 2 without tenant specific modifications - // This is the `open` access strategy - return getOrdDocument2ForTenant() + throw new Error( + 'No tenant ID provided in the request header via local-tenant-id or global-tenant-id. Hint: for demo purposes it can be set in the query string as well, e.g. ?local-tenant-id=T1', + ) } }) } diff --git a/src/api/shared/validateUserAuthorization.ts b/src/api/shared/validateUserAuthorization.ts index 6dd2a38..b10e1fb 100644 --- a/src/api/shared/validateUserAuthorization.ts +++ b/src/api/shared/validateUserAuthorization.ts @@ -44,12 +44,19 @@ export function getTenantIdsFromHeader(req: FastifyRequest): { localTenantId: string | undefined sapGlobalTenantId: string | undefined } { - const localTenantId = _.isArray(req.headers['sap-local-tenant-id']) - ? req.headers['sap-local-tenant-id'].join() - : req.headers['sap-local-tenant-id'] - const sapGlobalTenantId = _.isArray(req.headers['sap-global-tenant-id']) - ? req.headers['sap-global-tenant-id'].join() - : req.headers['sap-global-tenant-id'] + let localTenantId = _.isArray(req.headers['local-tenant-id']) + ? req.headers['local-tenant-id'].join() + : req.headers['local-tenant-id'] + let sapGlobalTenantId = _.isArray(req.headers['global-tenant-id']) + ? req.headers['global-tenant-id'].join() + : req.headers['global-tenant-id'] + + if (req.query && (req.query as Record)['local-tenant-id']) { + localTenantId = (req.query as Record)['local-tenant-id'] + } + if (req.query && (req.query as Record)['global-tenant-id']) { + sapGlobalTenantId = (req.query as Record)['global-tenant-id'] + } return { localTenantId, diff --git a/static/index.html b/static/index.html index ebdeb7f..bc37bd8 100644 --- a/static/index.html +++ b/static/index.html @@ -135,11 +135,14 @@

@@ -154,4 +157,4 @@

- \ No newline at end of file +