diff --git a/hivemq-edge-openapi/.gitignore b/hivemq-edge-openapi/.gitignore new file mode 100644 index 0000000000..d39f1b5541 --- /dev/null +++ b/hivemq-edge-openapi/.gitignore @@ -0,0 +1,4 @@ +# Dir for bundles +.idea +node_modules +dist diff --git a/hivemq-edge-openapi/LICENSE b/hivemq-edge-openapi/LICENSE new file mode 100644 index 0000000000..d41b8bde4c --- /dev/null +++ b/hivemq-edge-openapi/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Ivan Goncharov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/hivemq-edge-openapi/README.md b/hivemq-edge-openapi/README.md new file mode 100644 index 0000000000..ba0c4f2423 --- /dev/null +++ b/hivemq-edge-openapi/README.md @@ -0,0 +1,286 @@ +# Edge OpenAPI Definition Starter + +## Working on the OpenAPI specs + +This project has been migrated to a [Redocly starter](https://redocly.com/docs/cli/openapi-starter), which provides a set of tools to help you work with OpenAPI definitions. +It is recommended to use `VSCode` with the [Redocly VS Code extension](https://redocly.com/docs/vscode) for the best experience. + +### Install + +1. Install [Node JS](https://nodejs.org/) and [pnpm](https://pnpm.io/installation) (or use `npm`). + - If you are using `npm`, you can run `npm install -g pnpm` to install `pnpm`. +2. Run `pnpm install` in the repo root. + +### Usage + +The `.redocly.yaml` controls settings for various tools including the lint tool and the reference +docs engine. Open it to find examples and [read the docs](https://redocly.com/docs/cli/configuration/) for more information. + +#### `pnpm dev:start` +Starts the reference docs preview server. + +#### `pnpm dev:build` +Bundles the definition to the dist folder. + +#### `pnpm dev:test` +Validates the definition. + +#### `pnpm prod:release` +Bundles the definition to the `./ext` folder of the Hive Edge repository. Ensure that the name of the output file matches the release version + +#### Other commands + +#### `redocly split /openAPI.yaml --outDir /` + + +## Contribution Guide + +Below is a sample contribution guide. + +The tools in the repository don't restrict you to any specific structure. Adjust the contribution guide to match your own structure. + +### Structure + +The main document has been split from the original source in order to reduce the size of a single document and to highlight individual points of concern. + +The original split was done automatically (using `redocly`) and the files reflect the automation. + +``` +openAPI +├── README.md +├── openapi.yaml // root document of the OpenAPI specs +├── paths // list of path files, organised by their route +│ ├── api_v1_auth_authenticate.yaml +│ ├── api_v1_auth_refresh-token.yaml +│ └── ... +│ +└── components // list of reusable definitions, grouped by type + ├── headers + │ ├── ETag.yaml + │ └── ... + ├── parameters + │ ├── CombinerId.yaml + │ └── ... + ├── schemas + │ ├── Adapter.yaml + │ └── ... + └── ... +``` + +There is no reason to maintain such naming convention as we manually add or edit the source. + +### Schemas + +#### Adding Schemas + +1. Navigate to the `openapi/components/schemas` folder. +2. Add a file named as you wish to name the schema. +3. Define the schema. +4. Refer to the schema using the `$ref` (see example below). + +##### Example Schema +This is a very simple schema example: +```yaml +type: string +description: The resource ID. Defaults to UUID v4 +maxLength: 50 +example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21 +``` +This is a more complex schema example: +```yaml +type: object +properties: + id: + description: The customer identifier string + readOnly: true + allOf: + - $ref: ./ResourceId.yaml + websiteId: + description: The website's ID + allOf: + - $ref: ./ResourceId.yaml + paymentToken: + type: string + writeOnly: true + description: | + A write-only payment token; if supplied, it will be converted into a + payment instrument and be set as the `defaultPaymentInstrument`. The + value of this property will override the `defaultPaymentInstrument` + in the case that both are supplied. The token may only be used once + before it is expired. + defaultPaymentInstrument: + $ref: ./PaymentInstrument.yaml + createdTime: + description: The customer created time + allOf: + - $ref: ./ServerTimestamp.yaml + updatedTime: + description: The customer updated time + allOf: + - $ref: ./ServerTimestamp.yaml + tags: + description: A list of customer's tags + readOnly: true + type: array + items: + $ref: ./Tags/Tag.yaml + revision: + description: > + The number of times the customer data has been modified. + + The revision is useful when analyzing webhook data to determine if the + change takes precedence over the current representation. + type: integer + readOnly: true + _links: + type: array + description: The links related to resource + readOnly: true + minItems: 3 + items: + anyOf: + - $ref: ./Links/SelfLink.yaml + - $ref: ./Links/NotesLink.yaml + - $ref: ./Links/DefaultPaymentInstrumentLink.yaml + - $ref: ./Links/LeadSourceLink.yaml + - $ref: ./Links/WebsiteLink.yaml + _embedded: + type: array + description: >- + Any embedded objects available that are requested by the `expand` + querystring parameter. + readOnly: true + minItems: 1 + items: + anyOf: + - $ref: ./Embeds/LeadSourceEmbed.yaml + +``` + +If you have an JSON example, you can convert it to JSON schema using Redocly's [JSON to JSON schema tool](https://redocly.com/tools/json-to-json-schema/). + +##### Using the `$ref` + +Notice in the complex example above the schema definition itself has `$ref` links to other schemas defined. + +Here is a small excerpt with an example: + +```yaml +defaultPaymentInstrument: + $ref: ./PaymentInstrument.yaml +``` + +The value of the `$ref` is the path to the other schema definition. + +You may use `$ref`s to compose schema from other existing schema to avoid duplication. + +You will use `$ref`s to reference schema from your path definitions. + +#### Editing Schemas + +1. Navigate to the `openapi/components/schemas` folder. +2. Open the file you wish to edit. +3. Edit. + +### Paths + +#### Adding a Path + +1. Navigate to the `openapi/paths` folder. +2. Add a new YAML file named like your URL endpoint except replacing `/` with `_` (or whichever character you prefer) and putting path parameters into curly braces like `{example}`. +3. Add the path and a ref to it inside of your `openapi.yaml` file inside of the `openapi` folder. + +Example addition to the `openapi.yaml` file: +```yaml +'/customers/{id}': + $ref: './paths/customers_{id}.yaml' +``` + +Here is an example of a YAML file named `customers_{id}.yaml` in the `paths` folder: + +```yaml +get: + tags: + - Customers + summary: Retrieve a list of customers + operationId: GetCustomerCollection + description: | + You can have a markdown description here. + parameters: + - $ref: ../components/parameters/collectionLimit.yaml + - $ref: ../components/parameters/collectionOffset.yaml + - $ref: ../components/parameters/collectionFilter.yaml + - $ref: ../components/parameters/collectionQuery.yaml + - $ref: ../components/parameters/collectionExpand.yaml + - $ref: ../components/parameters/collectionFields.yaml + responses: + '200': + description: A list of Customers was retrieved successfully + headers: + Rate-Limit-Limit: + $ref: ../components/headers/Rate-Limit-Limit.yaml + Rate-Limit-Remaining: + $ref: ../components/headers/Rate-Limit-Remaining.yaml + Rate-Limit-Reset: + $ref: ../components/headers/Rate-Limit-Reset.yaml + Pagination-Total: + $ref: ../components/headers/Pagination-Total.yaml + Pagination-Limit: + $ref: ../components/headers/Pagination-Limit.yaml + Pagination-Offset: + $ref: ../components/headers/Pagination-Offset.yaml + content: + application/json: + schema: + type: array + items: + $ref: ../components/schemas/Customer.yaml + text/csv: + schema: + type: array + items: + $ref: ../components/schemas/Customer.yaml + '401': + $ref: ../components/responses/AccessForbidden.yaml + x-code-samples: + - lang: PHP + source: + $ref: ../code_samples/PHP/customers/get.php +post: + tags: + - Customers + summary: Create a customer (without an ID) + operationId: PostCustomer + description: Another markdown description here. + requestBody: + $ref: ../components/requestBodies/Customer.yaml + responses: + '201': + $ref: ../components/responses/Customer.yaml + '401': + $ref: ../components/responses/AccessForbidden.yaml + '409': + $ref: ../components/responses/Conflict.yaml + '422': + $ref: ../components/responses/InvalidDataError.yaml + x-code-samples: + - lang: PHP + source: + $ref: ../code_samples/PHP/customers/post.php +``` + +You'll see extensive usage of `$ref`s in this example to different types of components including schemas. + +You'll also notice `$ref`s to code samples. + +### Code samples + +Automated code sample generations is enabled in the Redocly configuration file. Add manual code samples by the following process: + +1. Navigate to the `openapi/code_samples` folder. +2. Navigate to the `` (e.g. PHP) sub-folder. +3. Navigate to the `path` folder, and add ref to the code sample. + +You can add languages by adding new folders at the appropriate path level. + +More details inside the `code_samples` folder README. diff --git a/hivemq-edge-openapi/docs/favicon.png b/hivemq-edge-openapi/docs/favicon.png new file mode 100644 index 0000000000..b5c1a2d8b4 Binary files /dev/null and b/hivemq-edge-openapi/docs/favicon.png differ diff --git a/hivemq-edge-openapi/docs/index.html b/hivemq-edge-openapi/docs/index.html new file mode 100644 index 0000000000..629fd22853 --- /dev/null +++ b/hivemq-edge-openapi/docs/index.html @@ -0,0 +1,25 @@ + + + + + API Reference | ReDoc + + + + + + + {{{redocHead}}} + + + {{{redocHTML}}} + + diff --git a/hivemq-edge-openapi/openAPI/components/headers/ETag.yaml b/hivemq-edge-openapi/openAPI/components/headers/ETag.yaml new file mode 100644 index 0000000000..64a4e9b9c4 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/headers/ETag.yaml @@ -0,0 +1,3 @@ +description: Identifier for a specific version of a resource +schema: + type: string diff --git a/hivemq-edge-openapi/openAPI/components/parameters/CombinerId.yaml b/hivemq-edge-openapi/openAPI/components/parameters/CombinerId.yaml new file mode 100644 index 0000000000..809e3af443 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/parameters/CombinerId.yaml @@ -0,0 +1,7 @@ +name: combinerId +description: The unique id of the combiner to retrieve. +in: path +required: true +schema: + type: string + format: uuid diff --git a/hivemq-edge-openapi/openAPI/components/parameters/MappingId.yaml b/hivemq-edge-openapi/openAPI/components/parameters/MappingId.yaml new file mode 100644 index 0000000000..d0f43b6096 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/parameters/MappingId.yaml @@ -0,0 +1,7 @@ +name: mappingId +description: The unique id of the mapping to retrieve. +in: path +required: true +schema: + type: string + format: uuid diff --git a/hivemq-edge-openapi/openAPI/components/parameters/TopicFilterId.yaml b/hivemq-edge-openapi/openAPI/components/parameters/TopicFilterId.yaml new file mode 100644 index 0000000000..0e7a51a958 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/parameters/TopicFilterId.yaml @@ -0,0 +1,7 @@ +name: filter +description: The URL-encoded filter of the topic filter that should be deleted. +in: path +required: true +schema: + type: string + format: urlencoded diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Adapter.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Adapter.yaml new file mode 100644 index 0000000000..29df9fedb3 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Adapter.yaml @@ -0,0 +1,20 @@ +type: object +properties: + config: + $ref: ./JsonNode.yaml + id: + type: string + format: string + description: >- + The adapter id, must be unique and only contain alpha numeric characters + with spaces and hyphens. + maxLength: 500 + minLength: 1 + pattern: ^([a-zA-Z_0-9-_])*$ + status: + $ref: ./Status.yaml + type: + type: string + description: The adapter type associated with this instance +required: + - id diff --git a/hivemq-edge-openapi/openAPI/components/schemas/AdapterConfig.yaml b/hivemq-edge-openapi/openAPI/components/schemas/AdapterConfig.yaml new file mode 100644 index 0000000000..2acfa3f68c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/AdapterConfig.yaml @@ -0,0 +1,19 @@ +type: object +properties: + config: + $ref: ./Adapter.yaml + northboundMappings: + type: array + description: The northbound mappings for this adapter + items: + $ref: ./NorthboundMapping.yaml + southboundMappings: + type: array + description: The southbound mappings for this adapter + items: + $ref: ./SouthboundMapping.yaml + tags: + type: array + description: The tags defined for this adapter + items: + $ref: ./DomainTag.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/AdaptersList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/AdaptersList.yaml new file mode 100644 index 0000000000..717900e862 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/AdaptersList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Adapter.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ApiBearerToken.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ApiBearerToken.yaml new file mode 100644 index 0000000000..b92985ae1c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ApiBearerToken.yaml @@ -0,0 +1,5 @@ +type: object +properties: + token: + type: string + description: The token associated a set of authenticated credentials diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicy.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicy.yaml new file mode 100644 index 0000000000..2012a8a71a --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicy.yaml @@ -0,0 +1,34 @@ +type: object +description: >- + A policy which is used to validate and execute certain actions based on the + validation result. +properties: + behavior: + $ref: ./BehaviorPolicyBehavior.yaml + createdAt: + type: string + format: date-time + description: The formatted UTC timestamp indicating when the policy was created. + readOnly: true + deserialization: + $ref: ./BehaviorPolicyDeserialization.yaml + id: + type: string + description: The unique identifier of the policy. + lastUpdatedAt: + type: string + format: date-time + description: >- + The formatted UTC timestamp indicating when the policy was updated the + last time. + readOnly: true + matching: + $ref: ./BehaviorPolicyMatching.yaml + onTransitions: + type: array + items: + $ref: ./BehaviorPolicyOnTransition.yaml +required: + - behavior + - id + - matching diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyBehavior.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyBehavior.yaml new file mode 100644 index 0000000000..a2b9cdeeb0 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyBehavior.yaml @@ -0,0 +1,11 @@ +type: object +description: The behavior referenced by the policy, that is validated by the policy. +properties: + arguments: + type: object + description: The arguments that the referenced validator type requires. + id: + type: string + description: The unique identifier of a pre-defined behavior. +required: + - id diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyDeserialization.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyDeserialization.yaml new file mode 100644 index 0000000000..045ddb4910 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyDeserialization.yaml @@ -0,0 +1,9 @@ +type: object +description: >- + The deserializers used by the policy for particular message and/or payload + types. +properties: + publish: + $ref: ./BehaviorPolicyDeserializer.yaml + will: + $ref: ./BehaviorPolicyDeserializer.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyDeserializer.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyDeserializer.yaml new file mode 100644 index 0000000000..cdb203de35 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyDeserializer.yaml @@ -0,0 +1,7 @@ +type: object +description: The deserializer applied to a particular message or payload type. +properties: + schema: + $ref: ./SchemaReference.yaml +required: + - schema diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyList.yaml new file mode 100644 index 0000000000..fd09a5f182 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyList.yaml @@ -0,0 +1,10 @@ +type: object +description: A listing of behavior policies. +properties: + _links: + $ref: ./PaginationCursor.yaml + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./BehaviorPolicy.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyMatching.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyMatching.yaml new file mode 100644 index 0000000000..d370a53eb3 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyMatching.yaml @@ -0,0 +1,8 @@ +type: object +description: The matching rules the policy applies. +properties: + clientIdRegex: + type: string + description: The regex pattern to match the client id against. +required: + - clientIdRegex diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyOnEvent.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyOnEvent.yaml new file mode 100644 index 0000000000..0e467d38d9 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyOnEvent.yaml @@ -0,0 +1,11 @@ +type: object +description: >- + One or more operations that are triggered on the event. When this field is + empty, the transition does not trigger any operations. +properties: + pipeline: + type: array + items: + $ref: ./PolicyOperation.yaml +required: + - pipeline diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyOnTransition.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyOnTransition.yaml new file mode 100644 index 0000000000..578bcbfa89 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BehaviorPolicyOnTransition.yaml @@ -0,0 +1,28 @@ +type: object +description: The actions that are executed for the specified transition. +properties: + Connection.OnDisconnect: + $ref: ./BehaviorPolicyOnEvent.yaml + Event.OnAny: + $ref: ./BehaviorPolicyOnEvent.yaml + Mqtt.OnInboundConnect: + $ref: ./BehaviorPolicyOnEvent.yaml + Mqtt.OnInboundDisconnect: + $ref: ./BehaviorPolicyOnEvent.yaml + Mqtt.OnInboundPublish: + $ref: ./BehaviorPolicyOnEvent.yaml + Mqtt.OnInboundSubscribe: + $ref: ./BehaviorPolicyOnEvent.yaml + fromState: + type: string + description: >- + The exact state from which the transition happened. Alternatively a state + filter can be used. + toState: + type: string + description: >- + The exact state to which the transition happened. Alternatively a state + filter can be used. +required: + - fromState + - toState diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Bridge.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Bridge.yaml new file mode 100644 index 0000000000..8eadac86f8 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Bridge.yaml @@ -0,0 +1,103 @@ +type: object +properties: + cleanStart: + type: boolean + format: boolean + default: true + description: The cleanStart value associated the the MQTT connection. + clientId: + type: string + format: string + description: The client identifier associated the the MQTT connection. + example: my-example-client-id + maxLength: 65535 + nullable: true + host: + type: string + description: >- + The host the bridge connects to - a well formed hostname, ipv4 or ipv6 + value. + maxLength: 255 + id: + type: string + format: string + description: >- + The bridge id, must be unique and only contain alpha numeric characters + with spaces and hyphens. + maxLength: 500 + minLength: 1 + pattern: ^([a-zA-Z_0-9-_])*$ + keepAlive: + type: integer + format: int32 + default: 240 + description: The keepAlive associated the the MQTT connection. + maximum: 65535 + minimum: 0 + localSubscriptions: + type: array + description: localSubscriptions associated with the bridge + items: + $ref: ./LocalBridgeSubscription.yaml + loopPreventionEnabled: + type: boolean + format: boolean + default: true + description: Is loop prevention enabled on the connection + loopPreventionHopCount: + type: integer + format: int32 + default: 1 + description: Loop prevention hop count + maximum: 100 + minimum: 0 + password: + type: string + format: string + description: The password value associated the the MQTT connection. + maxLength: 65535 + nullable: true + persist: + type: boolean + description: >- + If this flag is set to true, any outgoing mqtt messages with QoS-1 or + QoS-2 will be persisted on disc in case disc persistence is active.If this + flag is set to false, the QoS of any outgoing mqtt messages will be set to + QoS-0 and no traffic will be persisted on disc. + nullable: true + port: + type: integer + format: int32 + description: The port number to connect to + maximum: 65535 + minimum: 1 + remoteSubscriptions: + type: array + description: remoteSubscriptions associated with the bridge + items: + $ref: ./BridgeSubscription.yaml + sessionExpiry: + type: integer + format: int64 + default: 3600 + description: The sessionExpiry associated the the MQTT connection. + minimum: 0 + status: + $ref: ./Status.yaml + tlsConfiguration: + $ref: ./TlsConfiguration.yaml + username: + type: string + format: string + description: The username value associated the the MQTT connection. + maxLength: 65535 + nullable: true + websocketConfiguration: + $ref: ./WebsocketConfiguration.yaml +required: + - cleanStart + - host + - id + - keepAlive + - port + - sessionExpiry diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BridgeCustomUserProperty.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BridgeCustomUserProperty.yaml new file mode 100644 index 0000000000..1e158beb4f --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BridgeCustomUserProperty.yaml @@ -0,0 +1,14 @@ +type: object +description: The customUserProperties for this subscription +properties: + key: + type: string + format: string + description: The key the from the property + value: + type: string + format: string + description: The value the from the property +required: + - key + - value diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BridgeList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BridgeList.yaml new file mode 100644 index 0000000000..354e199285 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BridgeList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Bridge.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/BridgeSubscription.yaml b/hivemq-edge-openapi/openAPI/components/schemas/BridgeSubscription.yaml new file mode 100644 index 0000000000..eef6e1c655 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/BridgeSubscription.yaml @@ -0,0 +1,38 @@ +type: object +description: remoteSubscriptions associated with the bridge +properties: + customUserProperties: + type: array + description: The customUserProperties for this subscription + items: + $ref: ./BridgeCustomUserProperty.yaml + destination: + type: string + description: The destination topic for this filter set. + example: some/topic/value + filters: + type: array + description: The filters for this subscription. + example: some/topic/value + items: + type: string + description: The filters for this subscription. + example: some/topic/value + maxQoS: + type: integer + format: int32 + default: 0 + description: The maxQoS for this subscription. + enum: + - 0 + - 1 + - 2 + maximum: 2 + minimum: 0 + preserveRetain: + type: boolean + description: The preserveRetain for this subscription +required: + - destination + - filters + - maxQoS diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Capability.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Capability.yaml new file mode 100644 index 0000000000..8da07dd85c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Capability.yaml @@ -0,0 +1,18 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + description: + type: string + description: A description for the capability + displayName: + type: string + description: A human readable name, intended to be used to display at front end. + id: + type: string + enum: + - config-writeable + - bi-directional protocol adapters + - control-plane-connectivity + - data-hub + - mqtt-persistence + description: The identifier of this capability diff --git a/hivemq-edge-openapi/openAPI/components/schemas/CapabilityList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/CapabilityList.yaml new file mode 100644 index 0000000000..29ddce6f93 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/CapabilityList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Capability.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Combiner.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Combiner.yaml new file mode 100644 index 0000000000..33c40be13b --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Combiner.yaml @@ -0,0 +1,24 @@ +type: object +description: >- + A data combiner, bringing tags (adapters) and topic filters (bridges) together + for further northbound data mapping +properties: + id: + type: string + format: uuid + description: The unique id of the data combiner + name: + type: string + description: The user-facing name of the combiner + description: + type: string + description: The user-facing description of the combiner + sources: + $ref: ./EntityReferenceList.yaml + mappings: + $ref: ./DataCombiningList.yaml +required: + - id + - name + - sources + - mappings diff --git a/hivemq-edge-openapi/openAPI/components/schemas/CombinerList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/CombinerList.yaml new file mode 100644 index 0000000000..019f612e38 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/CombinerList.yaml @@ -0,0 +1,9 @@ +type: object +description: The list of Combiner defined in this Edge instance +properties: + items: + type: array + items: + $ref: ./Combiner.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataCombining.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataCombining.yaml new file mode 100644 index 0000000000..eba842473b --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataCombining.yaml @@ -0,0 +1,46 @@ +type: object +description: >- + Define individual rules for data combining, based on the entities selected in + the Orchestrator +properties: + id: + type: string + format: uuid + description: The unique id of the data combining mapping + sources: + type: object + required: + - primary + properties: + primary: + $ref: ./DataIdentifierReference.yaml + tags: + type: array + description: The list of tags (names) used in the data combining + items: + type: string + topicFilters: + type: array + description: The list of topic filters (names) used in the data combining + items: + type: string + destination: + type: object + properties: + topic: + type: string + format: mqtt-topic + schema: + type: string + format: data-url + description: The optional json schema for this topic filter in the data uri format. + instructions: + type: array + description: List of instructions to be applied to incoming data + items: + $ref: ./Instruction.yaml +required: + - id + - instructions + - destination + - sources diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataCombiningList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataCombiningList.yaml new file mode 100644 index 0000000000..5bcd738663 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataCombiningList.yaml @@ -0,0 +1,8 @@ +type: object +properties: + items: + type: array + items: + $ref: ./DataCombining.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataIdentifierReference.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataIdentifierReference.yaml new file mode 100644 index 0000000000..12d82a0445 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataIdentifierReference.yaml @@ -0,0 +1,14 @@ +type: object +description: A reference to one of the data identifiers (topic filter or tag) in Edge +required: + - id + - type +properties: + id: + type: string + description: The name (segmented) of the tag or topic filter + type: + type: string + enum: + - TAG + - TOPIC_FILTER diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPoint.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPoint.yaml new file mode 100644 index 0000000000..d582b8a515 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPoint.yaml @@ -0,0 +1,11 @@ +type: object +properties: + sampleTime: + type: string + format: date-time + description: Time the data-point was generated + nullable: true + value: + type: integer + format: int64 + description: The value of the data point diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPolicy.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicy.yaml new file mode 100644 index 0000000000..e185ebc03e --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicy.yaml @@ -0,0 +1,31 @@ +type: object +description: >- + A data policy which is used to validate and execute certain actions based on + the validation result. +properties: + createdAt: + type: string + format: date-time + description: The formatted UTC timestamp indicating when the policy was created. + readOnly: true + id: + type: string + description: The unique identifier of the policy. + lastUpdatedAt: + type: string + format: date-time + description: >- + The formatted UTC timestamp indicating when the policy was updated the + last time. + readOnly: true + matching: + $ref: ./DataPolicyMatching.yaml + onFailure: + $ref: ./DataPolicyAction.yaml + onSuccess: + $ref: ./DataPolicyAction.yaml + validation: + $ref: ./DataPolicyValidation.yaml +required: + - id + - matching diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyAction.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyAction.yaml new file mode 100644 index 0000000000..630a6ff1fa --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyAction.yaml @@ -0,0 +1,13 @@ +type: object +description: >- + One or more operations the outcome of the validation triggers. When this + field is empty, the outcome of the policy validation does not trigger any + operations. +properties: + pipeline: + type: array + description: >- + The pipeline to execute, when this action is triggered. The operations in + the pipeline are executed in-order. + items: + $ref: ./PolicyOperation.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyList.yaml new file mode 100644 index 0000000000..5c7fa2c03b --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyList.yaml @@ -0,0 +1,10 @@ +type: object +description: A listing of data policies. +properties: + _links: + $ref: ./PaginationCursor.yaml + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./DataPolicy.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyMatching.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyMatching.yaml new file mode 100644 index 0000000000..a41218cf46 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyMatching.yaml @@ -0,0 +1,8 @@ +type: object +description: The matching rules the policy applies. +properties: + topicFilter: + type: string + description: The topic filter for which the policy is matched. +required: + - topicFilter diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyValidation.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyValidation.yaml new file mode 100644 index 0000000000..69d823703a --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyValidation.yaml @@ -0,0 +1,11 @@ +type: object +description: >- + The section of the policy that defines how incoming MQTT messages are + validated. If this section is empty, the result of the policy validation is + always successful. +properties: + validators: + type: array + description: The validators of the policy. + items: + $ref: ./DataPolicyValidator.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyValidator.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyValidator.yaml new file mode 100644 index 0000000000..816b939e92 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DataPolicyValidator.yaml @@ -0,0 +1,14 @@ +type: object +description: A policy validator which executes the defined validation. +properties: + arguments: + type: object + description: The required arguments of the referenced validator type. + type: + type: string + description: The type of the validator. + enum: + - SCHEMA +required: + - arguments + - type diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DomainTag.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DomainTag.yaml new file mode 100644 index 0000000000..25d31b66bc --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DomainTag.yaml @@ -0,0 +1,15 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + definition: + $ref: ./JsonNode.yaml + description: + type: string + description: A user created description for this tag. + name: + type: string + format: mqtt-tag + description: The name of the tag that identifies it within this edge instance. +required: + - definition + - name diff --git a/hivemq-edge-openapi/openAPI/components/schemas/DomainTagList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/DomainTagList.yaml new file mode 100644 index 0000000000..7677253e36 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/DomainTagList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./DomainTag.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/EntityReference.yaml b/hivemq-edge-openapi/openAPI/components/schemas/EntityReference.yaml new file mode 100644 index 0000000000..f52de00d22 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/EntityReference.yaml @@ -0,0 +1,13 @@ +type: object +description: >- + A reference to one of the main entities in Edge (e.g. device, adapter, edge + broker, bridge host) +properties: + type: + $ref: ./EntityType.yaml + id: + description: The id of the entity being references in the combiner + type: string +required: + - id + - type diff --git a/hivemq-edge-openapi/openAPI/components/schemas/EntityReferenceList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/EntityReferenceList.yaml new file mode 100644 index 0000000000..019c2a6033 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/EntityReferenceList.yaml @@ -0,0 +1,8 @@ +type: object +properties: + items: + type: array + items: + $ref: ./EntityReference.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/EntityType.yaml b/hivemq-edge-openapi/openAPI/components/schemas/EntityType.yaml new file mode 100644 index 0000000000..66ee2b45c1 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/EntityType.yaml @@ -0,0 +1,7 @@ +type: string +description: These are the prime entities owning tags and topic filters +enum: + - ADAPTER + - DEVICE + - BRIDGE + - EDGE_BROKER diff --git a/hivemq-edge-openapi/openAPI/components/schemas/EnvironmentProperties.yaml b/hivemq-edge-openapi/openAPI/components/schemas/EnvironmentProperties.yaml new file mode 100644 index 0000000000..90d754e525 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/EnvironmentProperties.yaml @@ -0,0 +1,10 @@ +type: object +description: A map of properties relating to the installation +nullable: true +properties: + properties: + type: object + additionalProperties: + type: string + description: Map of properties that are returned by this endpoint + description: Map of properties that are returned by this endpoint diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Error.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Error.yaml new file mode 100644 index 0000000000..3122f7f6ce --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Error.yaml @@ -0,0 +1,10 @@ +type: object +properties: + detail: + type: string + description: Detailed contextual description of this error + parameter: + type: string + description: The parameter causing the issue +required: + - detail diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Errors.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Errors.yaml new file mode 100644 index 0000000000..91bf3091f7 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Errors.yaml @@ -0,0 +1 @@ +type: object diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Event.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Event.yaml new file mode 100644 index 0000000000..e0c0c7e9e1 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Event.yaml @@ -0,0 +1,38 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + associatedObject: + $ref: ./TypeIdentifier.yaml + created: + type: string + format: date-time + description: Time the event was in date format + identifier: + $ref: ./TypeIdentifier.yaml + message: + type: string + description: >- + The message associated with the event. A message will be no more than 1024 + characters in length + payload: + $ref: ./Payload.yaml + severity: + type: string + description: The severity that this log is considered to be + enum: + - INFO + - WARN + - ERROR + - CRITICAL + source: + $ref: ./TypeIdentifier.yaml + timestamp: + type: integer + format: int64 + description: Time the event was generated in epoch format +required: + - created + - identifier + - message + - severity + - timestamp diff --git a/hivemq-edge-openapi/openAPI/components/schemas/EventList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/EventList.yaml new file mode 100644 index 0000000000..6984f74459 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/EventList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Event.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Extension.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Extension.yaml new file mode 100644 index 0000000000..2a5376e9c8 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Extension.yaml @@ -0,0 +1,29 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + author: + type: string + description: The extension author + description: + type: string + description: The extension description + nullable: true + id: + type: string + description: A mandatory ID associated with the Extension + installed: + type: boolean + description: Is the extension installed + nullable: true + link: + $ref: ./Link.yaml + name: + type: string + description: The extension name + priority: + type: integer + format: int32 + description: The extension priority + version: + type: string + description: The extension version diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ExtensionList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ExtensionList.yaml new file mode 100644 index 0000000000..3942f52398 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ExtensionList.yaml @@ -0,0 +1,10 @@ +type: object +description: The extensions available for installation +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Extension.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/FieldMapping.yaml b/hivemq-edge-openapi/openAPI/components/schemas/FieldMapping.yaml new file mode 100644 index 0000000000..0bc55e0bec --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/FieldMapping.yaml @@ -0,0 +1,10 @@ +type: object +description: Defines how incoming data should be transformed before being sent out. +properties: + instructions: + type: array + description: List of instructions to be applied to incoming data + items: + $ref: ./Instruction.yaml +required: + - instructions diff --git a/hivemq-edge-openapi/openAPI/components/schemas/FirstUseInformation.yaml b/hivemq-edge-openapi/openAPI/components/schemas/FirstUseInformation.yaml new file mode 100644 index 0000000000..17c9942377 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/FirstUseInformation.yaml @@ -0,0 +1,24 @@ +type: object +description: Information relating to the firstuse experience +properties: + firstUse: + type: boolean + description: A mandatory Boolean indicating if the gateway is in firstUse mode + firstUseDescription: + type: string + description: A description string to use when firstUse = true. + nullable: true + firstUseTitle: + type: string + description: A header string to use when firstUse = true. + nullable: true + prefillPassword: + type: string + description: A String indicating if the prefill data for the username/password page. + nullable: true + prefillUsername: + type: string + description: A String indicating if the prefill data for the username/password page. + nullable: true +required: + - firstUse diff --git a/hivemq-edge-openapi/openAPI/components/schemas/FsmStateInformationItem.yaml b/hivemq-edge-openapi/openAPI/components/schemas/FsmStateInformationItem.yaml new file mode 100644 index 0000000000..878cc83c39 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/FsmStateInformationItem.yaml @@ -0,0 +1,26 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + arguments: + $ref: ./JsonNode.yaml + behaviorId: + type: string + description: The unique identifier of the policy. + firstSetAt: + type: string + description: The timestamp when this state was set the first time. + policyId: + type: string + description: The unique identifier of the policy. + stateName: + type: string + description: The name of the fsm state. + stateType: + type: string + description: The type of the fsm state. + variables: + type: object + additionalProperties: + type: string + description: The variables for this fsm. + description: The variables for this fsm. diff --git a/hivemq-edge-openapi/openAPI/components/schemas/FsmStatesInformationListItem.yaml b/hivemq-edge-openapi/openAPI/components/schemas/FsmStatesInformationListItem.yaml new file mode 100644 index 0000000000..c572c19087 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/FsmStatesInformationListItem.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./FsmStateInformationItem.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/GatewayConfiguration.yaml b/hivemq-edge-openapi/openAPI/components/schemas/GatewayConfiguration.yaml new file mode 100644 index 0000000000..23327287f9 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/GatewayConfiguration.yaml @@ -0,0 +1,26 @@ +type: object +properties: + cloudLink: + $ref: ./Link.yaml + ctas: + $ref: ./LinkList.yaml + documentationLink: + $ref: ./Link.yaml + environment: + $ref: ./EnvironmentProperties.yaml + extensions: + $ref: ./ExtensionList.yaml + firstUseInformation: + $ref: ./FirstUseInformation.yaml + gitHubLink: + $ref: ./Link.yaml + hivemqId: + type: string + description: The current id of hivemq edge. Changes at restart. + modules: + $ref: ./ModuleList.yaml + resources: + $ref: ./LinkList.yaml + trackingAllowed: + type: boolean + description: Is the tracking of user actions allowed. diff --git a/hivemq-edge-openapi/openAPI/components/schemas/HealthStatus.yaml b/hivemq-edge-openapi/openAPI/components/schemas/HealthStatus.yaml new file mode 100644 index 0000000000..cf11e31838 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/HealthStatus.yaml @@ -0,0 +1,4 @@ +type: object +properties: + status: + type: string diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ISA95ApiBean.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ISA95ApiBean.yaml new file mode 100644 index 0000000000..16a8ea309c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ISA95ApiBean.yaml @@ -0,0 +1,33 @@ +type: object +properties: + area: + type: string + description: The area + nullable: true + pattern: ^[a-zA-Z0-9 -_]*$ + enabled: + type: boolean + description: Should UNS be available + enterprise: + type: string + description: The enterprise + nullable: true + pattern: ^[a-zA-Z0-9 -_]* + prefixAllTopics: + type: boolean + description: Should all topics be prefixed with UNS placeholders + productionLine: + type: string + description: The productionLine + nullable: true + pattern: ^[a-zA-Z0-9 -_]*$ + site: + type: string + description: The site + nullable: true + pattern: ^[a-zA-Z0-9 -_]*$ + workCell: + type: string + description: The workCell + nullable: true + pattern: ^[a-zA-Z0-9 -_]*$ diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Instruction.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Instruction.yaml new file mode 100644 index 0000000000..b0edcfad95 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Instruction.yaml @@ -0,0 +1,14 @@ +type: object +description: List of instructions to be applied to incoming data +properties: + sourceRef: + $ref: ./DataIdentifierReference.yaml + destination: + type: string + description: The field in the output object where the data will be written to + source: + type: string + description: The field in the input object where the data will be read from +required: + - destination + - source diff --git a/hivemq-edge-openapi/openAPI/components/schemas/JsonNode.yaml b/hivemq-edge-openapi/openAPI/components/schemas/JsonNode.yaml new file mode 100644 index 0000000000..a1a1369787 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/JsonNode.yaml @@ -0,0 +1,2 @@ +type: object +description: The arguments of the fsm derived from the behavior policy. diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Link.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Link.yaml new file mode 100644 index 0000000000..7f6c1ef2fd --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Link.yaml @@ -0,0 +1,30 @@ +type: object +description: An associated link +nullable: true +properties: + description: + type: string + description: The optional link display description + nullable: true + displayText: + type: string + description: The link display text + nullable: true + external: + type: boolean + description: >- + A mandatory Boolean indicating if the link is internal to the context or + an external webLink + imageUrl: + type: string + description: An optional imageUrl associated with the Link + nullable: true + target: + type: string + description: An optional target associated with the Link + nullable: true + url: + type: string + description: A mandatory URL associated with the Link +required: + - url diff --git a/hivemq-edge-openapi/openAPI/components/schemas/LinkList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/LinkList.yaml new file mode 100644 index 0000000000..2f2cf03ff2 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/LinkList.yaml @@ -0,0 +1,10 @@ +type: object +description: A list of resources to render +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Link.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Listener.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Listener.yaml new file mode 100644 index 0000000000..5b02dd07a2 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Listener.yaml @@ -0,0 +1,36 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + description: + type: string + description: The extension description + nullable: true + externalHostname: + type: string + description: The external hostname + nullable: true + hostName: + type: string + description: A mandatory ID hostName with the Listener + name: + type: string + description: The listener name + port: + type: integer + format: int32 + description: The listener port + protocol: + type: string + description: A protocol that this listener services + nullable: true + transport: + type: string + description: The underlying transport that this listener uses + enum: + - TCP + - UDP + - DCCP + - SCTP + - RSVP + - QUIC + nullable: true diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ListenerList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ListenerList.yaml new file mode 100644 index 0000000000..56e33677b5 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ListenerList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Listener.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/LocalBridgeSubscription.yaml b/hivemq-edge-openapi/openAPI/components/schemas/LocalBridgeSubscription.yaml new file mode 100644 index 0000000000..93f2a42d1d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/LocalBridgeSubscription.yaml @@ -0,0 +1,51 @@ +type: object +description: localSubscriptions associated with the bridge +properties: + customUserProperties: + type: array + description: The customUserProperties for this subscription + items: + $ref: ./BridgeCustomUserProperty.yaml + destination: + type: string + description: The destination topic for this filter set. + example: some/topic/value + excludes: + type: array + description: The exclusion patterns + items: + type: string + description: The exclusion patterns + nullable: true + nullable: true + filters: + type: array + description: The filters for this subscription. + example: some/topic/value + items: + type: string + description: The filters for this subscription. + example: some/topic/value + maxQoS: + type: integer + format: int32 + default: 0 + description: The maxQoS for this subscription. + enum: + - 0 + - 1 + - 2 + maximum: 2 + minimum: 0 + preserveRetain: + type: boolean + description: The preserveRetain for this subscription + queueLimit: + type: integer + format: int64 + description: The limit of this bridge for QoS-1 and QoS-2 messages. + nullable: true +required: + - destination + - filters + - maxQoS diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Metric.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Metric.yaml new file mode 100644 index 0000000000..9c09aa0237 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Metric.yaml @@ -0,0 +1,6 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + name: + type: string + description: The name of the metric diff --git a/hivemq-edge-openapi/openAPI/components/schemas/MetricList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/MetricList.yaml new file mode 100644 index 0000000000..8cb1d31612 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/MetricList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Metric.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Module.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Module.yaml new file mode 100644 index 0000000000..a491975435 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Module.yaml @@ -0,0 +1,37 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + author: + type: string + description: The module author + description: + type: string + description: The module description + nullable: true + documentationLink: + $ref: ./Link.yaml + id: + type: string + description: A mandatory ID associated with the Module + installed: + type: boolean + description: Is the module installed + nullable: true + logoUrl: + $ref: ./Link.yaml + moduleType: + type: string + description: The type of the module + nullable: true + name: + type: string + description: The module name + priority: + type: integer + format: int32 + description: The module priority + provisioningLink: + $ref: ./Link.yaml + version: + type: string + description: The module version diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ModuleList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ModuleList.yaml new file mode 100644 index 0000000000..3be90355b1 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ModuleList.yaml @@ -0,0 +1,10 @@ +type: object +description: The modules available for installation +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Module.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/MqttUserProperty.yaml b/hivemq-edge-openapi/openAPI/components/schemas/MqttUserProperty.yaml new file mode 100644 index 0000000000..0a69b8c6e1 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/MqttUserProperty.yaml @@ -0,0 +1,10 @@ +type: object +description: User properties to be added to each outgoing mqtt message. +properties: + name: + type: string + value: + type: string +required: + - name + - value diff --git a/hivemq-edge-openapi/openAPI/components/schemas/NorthboundMapping.yaml b/hivemq-edge-openapi/openAPI/components/schemas/NorthboundMapping.yaml new file mode 100644 index 0000000000..4ddfb6db34 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/NorthboundMapping.yaml @@ -0,0 +1,33 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + includeTagNames: + type: boolean + description: Should tag names be included when sent out. + default: false + includeTimestamp: + type: boolean + description: Should the timestamp be included when sent out. + default: false + maxQoS: + $ref: ./QoS.yaml + messageExpiryInterval: + type: integer + format: int64 + description: The message expiry interval. + default: 9007199254740991L + tagName: + type: string + format: mqtt-tag + description: The tag for which values hould be collected and sent out. + topic: + type: string + description: The target mqtt topic where received tags should be sent to. + userProperties: + type: array + description: User properties to be added to each outgoing mqtt message. + items: + $ref: ./MqttUserProperty.yaml +required: + - tagName + - topic diff --git a/hivemq-edge-openapi/openAPI/components/schemas/NorthboundMappingList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/NorthboundMappingList.yaml new file mode 100644 index 0000000000..68455318db --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/NorthboundMappingList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./NorthboundMapping.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Notification.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Notification.yaml new file mode 100644 index 0000000000..946867e3e1 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Notification.yaml @@ -0,0 +1,19 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + description: + type: string + description: The notification description + nullable: true + level: + type: string + description: The notification level + enum: + - NOTICE + - WARNING + - ERROR + link: + $ref: ./Link.yaml + title: + type: string + description: The notification title diff --git a/hivemq-edge-openapi/openAPI/components/schemas/NotificationList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/NotificationList.yaml new file mode 100644 index 0000000000..0c35d14275 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/NotificationList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Notification.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ObjectNode.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ObjectNode.yaml new file mode 100644 index 0000000000..faf2d5079e --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ObjectNode.yaml @@ -0,0 +1,23 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + children: + type: array + items: + $ref: ./ObjectNode.yaml + description: + type: string + id: + type: string + name: + type: string + nodeType: + type: string + enum: + - FOLDER + - OBJECT + - VALUE + selectable: + type: boolean + value: + type: string diff --git a/hivemq-edge-openapi/openAPI/components/schemas/PaginationCursor.yaml b/hivemq-edge-openapi/openAPI/components/schemas/PaginationCursor.yaml new file mode 100644 index 0000000000..360c833caf --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/PaginationCursor.yaml @@ -0,0 +1,6 @@ +type: object +description: Links for pagination +nullable: true +properties: + next: + type: string diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Payload.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Payload.yaml new file mode 100644 index 0000000000..2bb5ae0b6c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Payload.yaml @@ -0,0 +1,16 @@ +type: object +description: Object to denote the payload of the event +properties: + content: + type: string + description: The content of the payload encoded as a string + contentType: + type: string + description: The content type of the payload that the event contains + enum: + - JSON + - PLAIN_TEXT + - XML + - CSV +required: + - contentType diff --git a/hivemq-edge-openapi/openAPI/components/schemas/PayloadSample.yaml b/hivemq-edge-openapi/openAPI/components/schemas/PayloadSample.yaml new file mode 100644 index 0000000000..c589a6be47 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/PayloadSample.yaml @@ -0,0 +1,10 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + payload: + type: string + description: >- + The payload of the sample. The bytes are base64 encoded to ensure + compatibility even if the payload is a arbitrary byte sequence. +required: + - payload diff --git a/hivemq-edge-openapi/openAPI/components/schemas/PayloadSampleList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/PayloadSampleList.yaml new file mode 100644 index 0000000000..a9d8c41970 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/PayloadSampleList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./PayloadSample.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/PolicyOperation.yaml b/hivemq-edge-openapi/openAPI/components/schemas/PolicyOperation.yaml new file mode 100644 index 0000000000..ae6aba34a9 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/PolicyOperation.yaml @@ -0,0 +1,18 @@ +type: object +description: >- + The pipeline to execute when this action is triggered. The operations in the + pipeline are executed in order. +properties: + arguments: + type: object + description: The required arguments of the referenced function. + functionId: + type: string + description: The unique id of the referenced function to execute in this operation. + id: + type: string + description: The unique id of the operation in the pipeline. +required: + - arguments + - functionId + - id diff --git a/hivemq-edge-openapi/openAPI/components/schemas/PolicySchema.yaml b/hivemq-edge-openapi/openAPI/components/schemas/PolicySchema.yaml new file mode 100644 index 0000000000..65e6b21100 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/PolicySchema.yaml @@ -0,0 +1,30 @@ +type: object +properties: + arguments: + type: object + additionalProperties: + type: string + description: The schema type dependent arguments. + description: The schema type dependent arguments. + createdAt: + type: string + description: The formatted UTC timestamp when the schema was created. + readOnly: true + id: + type: string + description: The unique identifier of the schema. + schemaDefinition: + type: string + description: The base64 encoded schema definition. + type: + type: string + description: The type of the schema. + version: + type: integer + format: int32 + description: The version of the schema. + readOnly: true +required: + - id + - schemaDefinition + - type diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ProblemDetails.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ProblemDetails.yaml new file mode 100644 index 0000000000..b28f26b508 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ProblemDetails.yaml @@ -0,0 +1,21 @@ +type: object +properties: + code: + type: string + description: Correlation id + detail: + type: string + errors: + type: array + items: + $ref: ./Error.yaml + status: + type: integer + format: int32 + title: + type: string + type: + type: string + format: uri +required: + - title diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdapter.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdapter.yaml new file mode 100644 index 0000000000..b445829879 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdapter.yaml @@ -0,0 +1,57 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + author: + type: string + description: The author of the adapter + capabilities: + type: array + description: The capabilities of this adapter + items: + type: string + description: The capabilities of this adapter + enum: + - READ + - DISCOVER + - WRITE + - COMBINE + uniqueItems: true + category: + $ref: ./ProtocolAdapterCategory.yaml + configSchema: + $ref: ./JsonNode.yaml + description: + type: string + description: The description + id: + type: string + description: The id assigned to the protocol adapter type + installed: + type: boolean + description: Is the adapter installed? + logoUrl: + type: string + description: The logo of the adapter + name: + type: string + description: The name of the adapter + protocol: + type: string + description: The supported protocol + provisioningUrl: + type: string + description: The provisioning url of the adapter + tags: + type: array + description: The search tags associated with this adapter + items: + type: string + description: The search tags associated with this adapter + uiSchema: + $ref: ./JsonNode.yaml + url: + type: string + description: The url of the adapter + version: + type: string + description: The installed version of the adapter diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdapterCategory.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdapterCategory.yaml new file mode 100644 index 0000000000..a6912a01f0 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdapterCategory.yaml @@ -0,0 +1,26 @@ +type: object +description: The category of the adapter +properties: + description: + type: string + format: string + description: The description associated with the category. + displayName: + type: string + format: string + description: The display name of the category to be used in HCIs. + minLength: 1 + image: + type: string + format: string + description: The image associated with the category. + name: + type: string + format: string + description: The unique name of the category to be used in API communication. + maxLength: 256 + minLength: 1 + pattern: ^[A-Za-z0-9-_](?:[A-Za-z0-9_ -]*[A-Za-z0-9_-])$ +required: + - displayName + - name diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdaptersList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdaptersList.yaml new file mode 100644 index 0000000000..eae9297a06 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ProtocolAdaptersList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./ProtocolAdapter.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/QoS.yaml b/hivemq-edge-openapi/openAPI/components/schemas/QoS.yaml new file mode 100644 index 0000000000..18e4ea3cb6 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/QoS.yaml @@ -0,0 +1,7 @@ +type: string +description: The maximum MQTT-QoS for the outgoing messages. +enum: + - AT_MOST_ONCE + - AT_LEAST_ONCE + - EXACTLY_ONCE +default: EXACTLY_ONCE diff --git a/hivemq-edge-openapi/openAPI/components/schemas/SchemaList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/SchemaList.yaml new file mode 100644 index 0000000000..fdbce4d318 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/SchemaList.yaml @@ -0,0 +1,10 @@ +type: object +description: A listing of schemas. +properties: + _links: + $ref: ./PaginationCursor.yaml + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./PolicySchema.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/SchemaReference.yaml b/hivemq-edge-openapi/openAPI/components/schemas/SchemaReference.yaml new file mode 100644 index 0000000000..832a40103d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/SchemaReference.yaml @@ -0,0 +1,14 @@ +type: object +description: A schema reference is a unique identifier for a schema. +properties: + schemaId: + type: string + description: The identifier of the schema. + version: + type: string + description: >- + The version of the schema. The value "latest" may be used to always refer + to the latest schema. +required: + - schemaId + - version diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Script.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Script.yaml new file mode 100644 index 0000000000..bf0c24d72d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Script.yaml @@ -0,0 +1,29 @@ +type: object +properties: + createdAt: + type: string + description: The formatted UTC timestamp when the script was created. + readOnly: true + description: + type: string + description: A string of free-form text describing the function. + functionType: + type: string + description: The type of the function. + enum: + - TRANSFORMATION + id: + type: string + description: The unique identifier of the script. + source: + type: string + description: The base64 encoded function source code. + version: + type: integer + format: int32 + description: The version of the script. + readOnly: true +required: + - functionType + - id + - source diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ScriptList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ScriptList.yaml new file mode 100644 index 0000000000..6b51b7a29a --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ScriptList.yaml @@ -0,0 +1,10 @@ +type: object +description: A listing of scripts. +properties: + _links: + $ref: ./PaginationCursor.yaml + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Script.yaml diff --git a/hivemq-edge-openapi/openAPI/components/schemas/SouthboundMapping.yaml b/hivemq-edge-openapi/openAPI/components/schemas/SouthboundMapping.yaml new file mode 100644 index 0000000000..0356b75501 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/SouthboundMapping.yaml @@ -0,0 +1,15 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + fieldMapping: + $ref: ./FieldMapping.yaml + tagName: + type: string + format: mqtt-tag + description: The tag for which values hould be collected and sent out. + topicFilter: + type: string + description: The filter defining what topics we will receive messages from. +required: + - tagName + - topicFilter diff --git a/hivemq-edge-openapi/openAPI/components/schemas/SouthboundMappingList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/SouthboundMappingList.yaml new file mode 100644 index 0000000000..e2f7848438 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/SouthboundMappingList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./SouthboundMapping.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/Status.yaml b/hivemq-edge-openapi/openAPI/components/schemas/Status.yaml new file mode 100644 index 0000000000..5d7372bfc4 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/Status.yaml @@ -0,0 +1,35 @@ +type: object +description: Information associated with the runtime of this adapter +properties: + connection: + type: string + description: A mandatory connection status field. + enum: + - CONNECTED + - DISCONNECTED + - STATELESS + - UNKNOWN + - ERROR + id: + type: string + description: The identifier of the object + lastActivity: + type: string + format: date-time + description: The datetime of the last activity through this connection + message: + type: string + description: A message associated with the state of a connection + runtime: + type: string + description: A object status field. + enum: + - STARTED + - STOPPED + startedAt: + type: string + format: date-time + description: The datetime the object was 'started' in the system. + type: + type: string + description: The type of the object diff --git a/hivemq-edge-openapi/openAPI/components/schemas/StatusList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/StatusList.yaml new file mode 100644 index 0000000000..4df6e77fc7 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/StatusList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./Status.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/StatusTransitionCommand.yaml b/hivemq-edge-openapi/openAPI/components/schemas/StatusTransitionCommand.yaml new file mode 100644 index 0000000000..bd1992c253 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/StatusTransitionCommand.yaml @@ -0,0 +1,9 @@ +type: object +properties: + command: + type: string + description: The command to perform on the target connection. + enum: + - START + - STOP + - RESTART diff --git a/hivemq-edge-openapi/openAPI/components/schemas/StatusTransitionResult.yaml b/hivemq-edge-openapi/openAPI/components/schemas/StatusTransitionResult.yaml new file mode 100644 index 0000000000..8b7fde649d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/StatusTransitionResult.yaml @@ -0,0 +1,22 @@ +type: object +properties: + callbackTimeoutMillis: + type: integer + format: int32 + description: >- + The callback timeout specifies the minimum amount of time (in + milliseconds) that the API advises the client to backoff before rechecking + the (runtime or connection) status of this object. This is only applicable + when the status is 'PENDING'. + identifier: + type: string + description: The identifier of the object in transition + status: + type: string + description: The status to perform on the target connection. + enum: + - PENDING + - COMPLETE + type: + type: string + description: The type of the object in transition diff --git a/hivemq-edge-openapi/openAPI/components/schemas/TagSchema.yaml b/hivemq-edge-openapi/openAPI/components/schemas/TagSchema.yaml new file mode 100644 index 0000000000..95dbf8e7d5 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/TagSchema.yaml @@ -0,0 +1,7 @@ +type: object +properties: + configSchema: + $ref: ./JsonNode.yaml + protocolId: + type: string + description: The id assigned to the protocol adapter type diff --git a/hivemq-edge-openapi/openAPI/components/schemas/TlsConfiguration.yaml b/hivemq-edge-openapi/openAPI/components/schemas/TlsConfiguration.yaml new file mode 100644 index 0000000000..5edf03c50f --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/TlsConfiguration.yaml @@ -0,0 +1,50 @@ +type: object +description: tlsConfiguration associated with the bridge +nullable: true +properties: + cipherSuites: + type: array + description: The cipherSuites from the config + items: + type: string + description: The cipherSuites from the config + enabled: + type: boolean + description: If TLS is used + handshakeTimeout: + type: integer + format: int32 + description: The handshakeTimeout from the config + keystorePassword: + type: string + description: The keystorePassword from the config + keystorePath: + type: string + description: The keystorePath from the config + nullable: true + keystoreType: + type: string + description: The keystoreType from the config + privateKeyPassword: + type: string + description: The privateKeyPassword from the config + protocols: + type: array + description: The protocols from the config + items: + type: string + description: The protocols from the config + truststorePassword: + type: string + description: The truststorePassword from the config + truststorePath: + type: string + description: The truststorePath from the config + nullable: true + truststoreType: + type: string + description: The truststoreType from the config + verifyHostname: + type: boolean + default: false + description: The verifyHostname from the config diff --git a/hivemq-edge-openapi/openAPI/components/schemas/TopicFilter.yaml b/hivemq-edge-openapi/openAPI/components/schemas/TopicFilter.yaml new file mode 100644 index 0000000000..add3332b38 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/TopicFilter.yaml @@ -0,0 +1,16 @@ +type: object +description: List of result items that are returned by this endpoint +properties: + description: + type: string + description: The name for this topic filter. + schema: + type: string + format: data-url + description: The optional json schema for this topic filter in the data uri format. + topicFilter: + type: string + format: mqtt-topic-filter + description: The topic filter according to the MQTT specification. +required: + - topicFilter diff --git a/hivemq-edge-openapi/openAPI/components/schemas/TopicFilterList.yaml b/hivemq-edge-openapi/openAPI/components/schemas/TopicFilterList.yaml new file mode 100644 index 0000000000..1ca3fffe8c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/TopicFilterList.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./TopicFilter.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/TypeIdentifier.yaml b/hivemq-edge-openapi/openAPI/components/schemas/TypeIdentifier.yaml new file mode 100644 index 0000000000..5579a77611 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/TypeIdentifier.yaml @@ -0,0 +1,24 @@ +type: object +description: The unique id of the event object +properties: + fullQualifiedIdentifier: + type: string + identifier: + type: string + description: >- + The identifier associated with the object, a combination of type and + identifier is used to uniquely identify an object in the system + type: + type: string + description: The type of the associated object/entity + enum: + - BRIDGE + - ADAPTER + - ADAPTER_TYPE + - EVENT + - USER + - DATA_COMBINING + - COMBINER + - EDGE +required: + - type diff --git a/hivemq-edge-openapi/openAPI/components/schemas/UsernamePasswordCredentials.yaml b/hivemq-edge-openapi/openAPI/components/schemas/UsernamePasswordCredentials.yaml new file mode 100644 index 0000000000..7fd9e1fc4a --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/UsernamePasswordCredentials.yaml @@ -0,0 +1,8 @@ +type: object +properties: + password: + type: string + description: The password associated with the user + userName: + type: string + description: The userName associated with the user diff --git a/hivemq-edge-openapi/openAPI/components/schemas/ValuesTree.yaml b/hivemq-edge-openapi/openAPI/components/schemas/ValuesTree.yaml new file mode 100644 index 0000000000..b7398fa008 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/ValuesTree.yaml @@ -0,0 +1,9 @@ +type: object +properties: + items: + type: array + description: List of result items that are returned by this endpoint + items: + $ref: ./ObjectNode.yaml +required: + - items diff --git a/hivemq-edge-openapi/openAPI/components/schemas/WebsocketConfiguration.yaml b/hivemq-edge-openapi/openAPI/components/schemas/WebsocketConfiguration.yaml new file mode 100644 index 0000000000..be50ba400a --- /dev/null +++ b/hivemq-edge-openapi/openAPI/components/schemas/WebsocketConfiguration.yaml @@ -0,0 +1,20 @@ +type: object +description: websocketConfiguration associated with the bridge +nullable: true +properties: + enabled: + type: boolean + default: false + description: If Websockets are used + serverPath: + type: string + default: /mqtt + description: >- + The server path used by the bridge client. This must be setup as path at + the remote broker + subProtocol: + type: string + default: mqtt + description: >- + The sub-protocol used by the bridge client. This must be supported by the + remote broker diff --git a/hivemq-edge-openapi/openAPI/openapi.yaml b/hivemq-edge-openapi/openAPI/openapi.yaml new file mode 100644 index 0000000000..e0a15735c5 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/openapi.yaml @@ -0,0 +1,274 @@ +openapi: 3.0.1 +info: + contact: + url: https://www.hivemq.com + description: > + # Introduction + + HiveMQ Edge's REST API provides endpoints for the following use cases: + + - Authentication + + - Health Checking + + - Exploring Configuration + + ## Errors + + Conventional HTTP response codes are used to indicate the success or failure + of an API request. Codes in the 2xx range generally indicate success. Codes + in the 4xx range indicate an error that failed given the information + provided (e.g., a required parameter was omitted). Codes in the 5xx range + indicate an error on the server side. + + For all errors a JSON response with additional details is returned in the + format [Problem JSON](https://tools.ietf.org/html/rfc7807). + + ## OpenAPI + + HiveMQ's REST API provides an OpenAPI 3.0 schema definition that can + imported into popular API tooling (e.g. Postman) or can be used to generate + client-code for multiple programming languages. + title: HiveMQ Edge REST API + version: 2025.4-SNAPSHOT + x-logo: + url: https://www.hivemq.com/img/svg/hivemq-bee.svg +tags: + - description: Services to obtain and validate security tokens with the HiveMQ Edge API. + name: Authentication Endpoint + - description: Explore and interact with the Bridges configured on your Gateway. + name: Bridges + - description: Interact with the system event sub-system. + name: Events + - description: Services relating to the use of the portal. + name: Frontend + - description: Services to interact with the gateway configuration. + name: Gateway Endpoint + - description: Gain insight and system metrics. + name: Metrics Endpoint + - description: Interact with protocol adapters. + name: Protocol Adapters + - description: Manage samples of payloads. + name: Payload Sampling + - description: Interact with topic filters. + name: Topic Filters + - description: Configure Unified Namespace. + name: UNS + - description: >- + This resource bundles endpoints for the available Finite State Machines + (FSMs) for Behavior Policies for the HiveMQ Data Hub. Currently this is + limited to getting the available FSMs. + name: Data Hub - FSM + - description: >- + This resource bundles endpoints for the available Functions for the HiveMQ + Data Hub. Currently this is limited to getting the available Functions. + name: Data Hub - Functions + - description: >- + Policies describe how you want the HiveMQ broker to validate the behavior + of MQTT clients. + + Each policy has four sections: + + + - Matching: Specifies which clients the policy engine validates. + + - Deserialization: Specifies deserializers for different message payloads. + + - Behavior: Specifies the behavior that is considered valid for matched + clients. + + - onTransitions: Specifies custom actions that are executed when a client + transitions to a different state within the specified behavior model that + is valid for that client. + + These endpoints can be used to create, update, delete, and list behavior + policies. + + + For more information on all capabilities the HiveMQ Data Hub offers, see + the [HiveMQ + documentation](https://docs.hivemq.com/hivemq/latest/data-hub/index.html). + name: Data Hub - Behavior Policies + - description: >- + Data Policies describe how you want the HiveMQ broker to apply schemas to + incoming MQTT message payload data and act on the validation results. + + Each policy has four sections: + + + - Matching: Specifies which packets the policy engine validates. + + - Validation: Specifies how the packets are validated. For example, based + on a JSON Schema. + + - OnSuccess: Defines which actions are executed when the outcome of a + validation is successful. + + - OnFailure: Defines which actions are executed when the validation fails. + + + These endpoints can be used to create, update, delete, and list data + policies. + + + For more information on all capabilities the HiveMQ Data Hub offers, see + the [HiveMQ + documentation](https://docs.hivemq.com/hivemq/latest/data-hub/index.html). + name: Data Hub - Data Policies + - description: >- + A schema defines the expected structure and format of incoming MQTT + message payload data. + + + This endpoint can be used to create, get, and delete schemas. + + + Schemas can be enforced with the use of a policy. + + + Currently, the following schema definitions are supported: + + + - [JSON Schema](https://json-schema.org/) + + - [Protocol Buffers (Protobuf)](https://protobuf.dev/) + + + For more information on how to define and use a schema in HiveMQ, see + [Schemas](https://docs.hivemq.com/hivemq/latest/data-hub/schemas.html). + name: Data Hub - Schemas + - description: >- + A script represents custom logic that can be executed in response to MQTT + messages. + + + This endpoint can be used to create, get, and delete scripts. + + + For more information on how to define and use a script in HiveMQ, see + [Scripts](https://docs.hivemq.com/hivemq/latest/data-hub/scripts.html). + name: Data Hub - Scripts + - description: >+ + These endpoints can be used to retrieve states of clients for the Data + Hub. + + name: Data Hub - State +paths: + /: + $ref: paths/root.yaml + /api/v1/auth/authenticate: + $ref: paths/api_v1_auth_authenticate.yaml + /api/v1/auth/refresh-token: + $ref: paths/api_v1_auth_refresh-token.yaml + /api/v1/auth/validate-token: + $ref: paths/api_v1_auth_validate-token.yaml + /api/v1/data-hub/behavior-validation/policies: + $ref: paths/api_v1_data-hub_behavior-validation_policies.yaml + /api/v1/data-hub/behavior-validation/policies/{policyId}: + $ref: paths/api_v1_data-hub_behavior-validation_policies_{policyId}.yaml + /api/v1/data-hub/behavior-validation/states/{clientId}: + $ref: paths/api_v1_data-hub_behavior-validation_states_{clientId}.yaml + /api/v1/data-hub/data-validation/policies: + $ref: paths/api_v1_data-hub_data-validation_policies.yaml + /api/v1/data-hub/data-validation/policies/{policyId}: + $ref: paths/api_v1_data-hub_data-validation_policies_{policyId}.yaml + /api/v1/data-hub/fsm: + $ref: paths/api_v1_data-hub_fsm.yaml + /api/v1/data-hub/functions: + $ref: paths/api_v1_data-hub_functions.yaml + /api/v1/data-hub/schemas: + $ref: paths/api_v1_data-hub_schemas.yaml + /api/v1/data-hub/schemas/{schemaId}: + $ref: paths/api_v1_data-hub_schemas_{schemaId}.yaml + /api/v1/data-hub/scripts: + $ref: paths/api_v1_data-hub_scripts.yaml + /api/v1/data-hub/scripts/{scriptId}: + $ref: paths/api_v1_data-hub_scripts_{scriptId}.yaml + /api/v1/frontend/capabilities: + $ref: paths/api_v1_frontend_capabilities.yaml + /api/v1/frontend/configuration: + $ref: paths/api_v1_frontend_configuration.yaml + /api/v1/frontend/notifications: + $ref: paths/api_v1_frontend_notifications.yaml + /api/v1/gateway/configuration: + $ref: paths/api_v1_gateway_configuration.yaml + /api/v1/gateway/listeners: + $ref: paths/api_v1_gateway_listeners.yaml + /api/v1/health/liveness: + $ref: paths/api_v1_health_liveness.yaml + /api/v1/health/readiness: + $ref: paths/api_v1_health_readiness.yaml + /api/v1/management/bridges: + $ref: paths/api_v1_management_bridges.yaml + /api/v1/management/bridges/status: + $ref: paths/api_v1_management_bridges_status.yaml + /api/v1/management/bridges/{bridgeId}: + $ref: paths/api_v1_management_bridges_{bridgeId}.yaml + /api/v1/management/bridges/{bridgeId}/connection-status: + $ref: paths/api_v1_management_bridges_{bridgeId}_connection-status.yaml + /api/v1/management/bridges/{bridgeId}/status: + $ref: paths/api_v1_management_bridges_{bridgeId}_status.yaml + /api/v1/management/events: + $ref: paths/api_v1_management_events.yaml + /api/v1/management/protocol-adapters/adapterconfigs/{adaptertype}/{adaptername}: + $ref: paths/api_v1_management_protocol-adapters_adapterconfigs_{adaptertype}_{adaptername}.yaml + /api/v1/management/protocol-adapters/adapters: + $ref: paths/api_v1_management_protocol-adapters_adapters.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}/discover: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}_discover.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}/northboundMappings: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}_northboundMappings.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}/southboundMappings: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}_southboundMappings.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}/status: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}_status.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}/tags: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags.yaml + /api/v1/management/protocol-adapters/adapters/{adapterId}/tags/{tagName}: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags_{tagName}.yaml + /api/v1/management/protocol-adapters/adapters/{adapterType}: + $ref: paths/api_v1_management_protocol-adapters_adapters_{adapterType}.yaml + /api/v1/management/protocol-adapters/northboundMappings: + $ref: paths/api_v1_management_protocol-adapters_northboundMappings.yaml + /api/v1/management/protocol-adapters/southboundMappings: + $ref: paths/api_v1_management_protocol-adapters_southboundMappings.yaml + /api/v1/management/protocol-adapters/status: + $ref: paths/api_v1_management_protocol-adapters_status.yaml + /api/v1/management/protocol-adapters/tag-schemas/{protocolId}: + $ref: paths/api_v1_management_protocol-adapters_tag-schemas_{protocolId}.yaml + /api/v1/management/protocol-adapters/tags: + $ref: paths/api_v1_management_protocol-adapters_tags.yaml + /api/v1/management/protocol-adapters/tags/{tagName}: + $ref: paths/api_v1_management_protocol-adapters_tags_{tagName}.yaml + /api/v1/management/protocol-adapters/types: + $ref: paths/api_v1_management_protocol-adapters_types.yaml + /api/v1/management/protocol-adapters/types/{adapterType}: + $ref: paths/api_v1_management_protocol-adapters_types_{adapterType}.yaml + /api/v1/management/protocol-adapters/writing-schema/{adapterId}/{tagName}: + $ref: paths/api_v1_management_protocol-adapters_writing-schema_{adapterId}_{tagName}.yaml + /api/v1/management/sampling/schema/{topic}: + $ref: paths/api_v1_management_sampling_schema_{topic}.yaml + /api/v1/management/sampling/topic/{topic}: + $ref: paths/api_v1_management_sampling_topic_{topic}.yaml + /api/v1/management/topic-filters: + $ref: paths/api_v1_management_topic-filters.yaml + /api/v1/management/topic-filters/{filter}: + $ref: paths/api_v1_management_topic-filters_{filter}.yaml + /api/v1/management/topic-filters/{filter}/schema: + $ref: paths/api_v1_management_topic-filters_{filter}_schema.yaml + /api/v1/management/uns/isa95: + $ref: paths/api_v1_management_uns_isa95.yaml + /api/v1/metrics: + $ref: paths/api_v1_metrics.yaml + /api/v1/metrics/{metricName}/latest: + $ref: paths/api_v1_metrics_{metricName}_latest.yaml + /api/v1/management/combiners: + $ref: paths/api_v1_management_combiners.yaml + /api/v1/management/combiners/{combinerId}: + $ref: paths/api_v1_management_combiners_{combinerId}.yaml + /api/v1/management/combiners/{combinerId}/mappings: + $ref: paths/api_v1_management_combiners_{combinerId}_mappings.yaml + /api/v1/management/combiners/{combinerId}/mappings/{mappingId}/instructions: + $ref: paths/api_v1_management_combiners_{combinerId}_mappings_{mappingId}_instructions.yaml diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_auth_authenticate.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_auth_authenticate.yaml new file mode 100644 index 0000000000..33d2372fb6 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_auth_authenticate.yaml @@ -0,0 +1,38 @@ +post: + description: Authorize the presented user to obtain a secure token for use on the API. + operationId: authenticate + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/UsernamePasswordCredentials.yaml + responses: + '200': + content: + application/json: + examples: + example-authentication: + description: Example Authentication configuration. + summary: Example authentication + value: + token: >- + eyJraWQiOiIwMDAwMSIsImFsZyI6IlJTMjU2In0.eyJqdGkiOiJpb09YbmdWQW1ncl9rSGxZMlRPNWx3IiwiaWF0IjoxNjg3OTQ2MzkwLCJhdWQiOiJIaXZlTVEtRWRnZS1BcGkiLCJpc3MiOiJIaXZlTVEtRWRnZSIsImV4cCI6MTY4Nzk0ODE5MCwibmJmIjoxNjg3OTQ2MjcwLCJzdWIiOiJhZG1pbiIsInJvbGVzIjpbImFkbWluIl19.F4fCJcLobUJXR8rcER_sXVR2l6LhGc6LrnpDlBfuCmVQI22UjLjh-GBYPJV_VF17at_ChBS0UePN9dF4U0i5SsuLcLbrl6QMyI3kmiDxvZCKPWPJGJfiqljVysbQS5vK2F8eJmVFWr0Bb5rXjTtClLIfDGTLEoETbUOMfmic5EzPdWwLN7i3NbuE3xl9u0RepJwVNf0eZrvwIQjpeLZ8vNx9eIVUeMhXpylrQGlDeikJn_F6K89hc1igl2hzN4aU9oT-WOLeQ82oRq7IhL1Rzi1K9NdKMS_xrpV951basq_419oyGyQ6zcxORyC7vsGLZPGi0sHsSJdQ-j12xhPsMg + schema: + $ref: ../components/schemas/ApiBearerToken.yaml + description: Username & Password Credentials to Authenticate as. + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Error in request. + '401': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: The requested credentials could not be authenticated. + summary: Authorize the presented user to obtain a secure token for use on the API. + tags: + - Authentication + - Authentication Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_auth_refresh-token.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_auth_refresh-token.yaml new file mode 100644 index 0000000000..65231cb73b --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_auth_refresh-token.yaml @@ -0,0 +1,27 @@ +post: + description: Authorize the presented user to obtain a secure token for use on the API. + operationId: refresh-token + responses: + '200': + content: + application/json: + examples: + example-authentication: + description: Example Authentication configuration. + summary: Example authentication + value: + token: >- + eyJraWQiOiIwMDAwMSIsImFsZyI6IlJTMjU2In0.eyJqdGkiOiJpb09YbmdWQW1ncl9rSGxZMlRPNWx3IiwiaWF0IjoxNjg3OTQ2MzkwLCJhdWQiOiJIaXZlTVEtRWRnZS1BcGkiLCJpc3MiOiJIaXZlTVEtRWRnZSIsImV4cCI6MTY4Nzk0ODE5MCwibmJmIjoxNjg3OTQ2MjcwLCJzdWIiOiJhZG1pbiIsInJvbGVzIjpbImFkbWluIl19.F4fCJcLobUJXR8rcER_sXVR2l6LhGc6LrnpDlBfuCmVQI22UjLjh-GBYPJV_VF17at_ChBS0UePN9dF4U0i5SsuLcLbrl6QMyI3kmiDxvZCKPWPJGJfiqljVysbQS5vK2F8eJmVFWr0Bb5rXjTtClLIfDGTLEoETbUOMfmic5EzPdWwLN7i3NbuE3xl9u0RepJwVNf0eZrvwIQjpeLZ8vNx9eIVUeMhXpylrQGlDeikJn_F6K89hc1igl2hzN4aU9oT-WOLeQ82oRq7IhL1Rzi1K9NdKMS_xrpV951basq_419oyGyQ6zcxORyC7vsGLZPGi0sHsSJdQ-j12xhPsMg + schema: + $ref: ../components/schemas/ApiBearerToken.yaml + description: Obtain a new JWT from a previously authentication token. + '401': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: The requested credentials could not be authenticated. + summary: Obtain a fresh JWT for the previously authenticated user. + tags: + - Authentication + - Authentication Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_auth_validate-token.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_auth_validate-token.yaml new file mode 100644 index 0000000000..e61e42abae --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_auth_validate-token.yaml @@ -0,0 +1,21 @@ +post: + description: Authorize the presented user to obtain a secure token for use on the API. + operationId: validate-token + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/ApiBearerToken.yaml + responses: + '200': + description: The token was valid + '401': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: The token was invalid + summary: Authorize the presented user to obtain a secure token for use on the API. + tags: + - Authentication + - Authentication Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_policies.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_policies.yaml new file mode 100644 index 0000000000..0ca3ca0e99 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_policies.yaml @@ -0,0 +1,301 @@ +get: + description: |- + Get all policies. + + This endpoint returns the content of the policies with the content-type `application/json`. + + + operationId: getAllBehaviorPolicies + parameters: + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, createdAt, lastUpdatedAt, deserialization, matching, + behavior, onTransitions + example: id,createdAt + in: query + name: fields + schema: + type: string + - description: >- + Comma-separated list of policy ids used for filtering. Multiple filters + can be applied together. + example: policy1,policy2 + in: query + name: policyIds + schema: + type: string + - description: >- + Comma-separated list of MQTT client identifiers that are used for + filtering. Client identifiers are matched by the retrieved policies. + Multiple filters can be applied together. + example: client1,client2 + in: query + name: clientIds + schema: + type: string + - description: >- + Specifies the page size for the returned results. Has to be between 10 + and 500. Default page size is 50. Limit is ignored if the 'topic' query + parameter is set. + example: 100 + in: query + name: limit + schema: + type: integer + format: int32 + - description: >- + The cursor that has been returned by the previous result page. Do not + pass this parameter if you want to fetch the first page. + in: query + name: cursor + schema: + type: string + responses: + '200': + content: + application/json: + examples: + list-response-a: + description: Example response with multiple policies. No more pages left + summary: Multiple results, last page + value: + items: + - id: P18 + createdAt: '2023-07-28T07:27:24.531Z' + lastUpdatedAt: '2023-07-28T07:27:24.531Z' + matching: + clientIdRegex: .* + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + - id: P19 + createdAt: '2023-07-28T07:27:24.532Z' + lastUpdatedAt: '2023-07-28T07:27:24.532Z' + matching: + clientIdRegex: .* + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + list-response-b: + description: Example response with multiple policies. More pages left + summary: Multiple results, more pages left + value: + items: + - id: P0 + createdAt: '2023-07-28T07:44:35.382Z' + lastUpdatedAt: '2023-07-28T07:44:35.382Z' + matching: + clientIdRegex: .* + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + - id: P1 + createdAt: '2023-07-28T07:44:35.405Z' + lastUpdatedAt: '2023-07-28T07:44:35.405Z' + matching: + clientIdRegex: .* + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + _links: + next: >- + /api/v1/data-hub/behavior-validation/policies?cursor=a-Wva-QBoB5yAX_HJ0WRQ8ng==&limit=2 + list-response-c: + description: >- + Example response with requested fields and multiple policies. + More pages left + summary: Multiple results, requested 'id' field + value: + items: + - id: P0 + - id: P1 + _links: + next: >- + /api/v1/data-hub/behavior-validation/policies?cursor=a-Wva-QBoB5yAX_HZxWBM9mQ==&limit=2&fields=id + list-response-d: + description: Example response with a single policy + summary: Single Result + value: + items: + - id: policy1 + createdAt: '2023-07-28T07:34:14.150Z' + lastUpdatedAt: '2023-07-28T07:34:14.150Z' + matching: + clientIdRegex: .* + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + schema: + $ref: ../components/schemas/BehaviorPolicyList.yaml + description: Success + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporarily not available + summary: Get all policies + tags: + - Data Hub - Behavior Policies +post: + description: |+ + Create a behavior policy + + operationId: createBehaviorPolicy + requestBody: + content: + application/json: + example: + id: wildcardLogBehaviorPolicy + createdAt: '2023-08-23T10:14:38.447Z' + matching: + clientIdRegex: .* + deserialization: + publish: + schema: + schemaId: schema + version: latest + will: + schema: + schemaId: schema + version: latest + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + schema: + $ref: ../components/schemas/BehaviorPolicy.yaml + description: The policy that should be created. + required: true + responses: + '201': + content: + application/json: + examples: + response-example: + description: Example response. + summary: Policy was created successfully + value: + id: wildcardLogBehaviorPolicy + createdAt: '2023-08-23T10:14:38.447Z' + lastUpdatedAt: '2023-08-23T10:14:38.447Z' + matching: + clientIdRegex: .* + deserialization: + publish: + schema: + schemaId: schema + version: latest + will: + schema: + schemaId: schema + version: latest + arguments: {} + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + schema: + $ref: ../components/schemas/BehaviorPolicy.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Policy creation failed + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Already exists + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporarily unavailable + '507': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Insufficient storage error + summary: Create a new policy + tags: + - Data Hub - Behavior Policies diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_policies_{policyId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_policies_{policyId}.yaml new file mode 100644 index 0000000000..afd96ea8d4 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_policies_{policyId}.yaml @@ -0,0 +1,272 @@ +delete: + description: |- + Deletes an existing policy. + + + operationId: deleteBehaviorPolicy + parameters: + - description: The identifier of the policy to delete. + example: policy1 + in: path + name: policyId + required: true + schema: + type: string + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + responses: + '204': + description: Success, no response body + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: URL parameter missing + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Policy not found + '412': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Precondition failed + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporarily not available + summary: Delete a behavior policy + tags: + - Data Hub - Behavior Policies +get: + description: |- + Get a specific policy. + + This endpoint returns the content of the policy with the content-type `application/json`. + + + operationId: getBehaviorPolicy + parameters: + - description: The identifier of the policy. + example: policy1 + in: path + name: policyId + required: true + schema: + type: string + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, createdAt, lastUpdatedAt, deserialization, matching, + behavior, onTransitions + example: id,createdAt + in: query + name: fields + schema: + type: string + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get Policy + summary: Get Policy + value: + id: wildcardLogBehaviorPolicy + createdAt: '2023-08-23T10:14:38.447Z' + lastUpdatedAt: '2023-08-23T10:14:38.447Z' + matching: + clientIdRegex: .* + deserialization: + publish: + schema: + schemaId: schema + version: latest + will: + schema: + schemaId: schema + version: latest + arguments: {} + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + schema: + $ref: ../components/schemas/BehaviorPolicy.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Invalid query parameter + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Policy not found + summary: Get a policy + tags: + - Data Hub - Behavior Policies +put: + description: >- + Update a behavior policy + + + The path parameter 'policyId' must match the 'id' of the policy in the + request body. + + operationId: updateBehaviorPolicy + parameters: + - description: The identifier of the policy. + example: policy1 + in: path + name: policyId + required: true + schema: + type: string + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + requestBody: + content: + application/json: + example: + id: wildcardLogBehaviorPolicy + createdAt: '2023-08-23T10:14:38.447Z' + matching: + clientIdRegex: .* + deserialization: + publish: + schema: + schemaId: schema + version: latest + will: + schema: + schemaId: schema + version: latest + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + schema: + $ref: ../components/schemas/BehaviorPolicy.yaml + description: The policy that should be updated. + required: true + responses: + '200': + content: + application/json: + examples: + response-example: + description: Example response. + summary: Policy was updated successfully + value: + id: wildcardLogBehaviorPolicy + createdAt: '2023-08-23T10:14:38.447Z' + lastUpdatedAt: '2023-09-26T11:17:22.311Z' + matching: + clientIdRegex: .* + deserialization: + publish: + schema: + schemaId: schema + version: latest + will: + schema: + schemaId: schema + version: latest + arguments: {} + behavior: + id: Mqtt.events + arguments: {} + onTransitions: + - fromState: Any.* + toState: Any.* + Event.OnAny: + pipeline: + - id: log1 + functionId: System.log + arguments: + level: INFO + message: transition happened + schema: + $ref: ../components/schemas/BehaviorPolicy.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Policy creation failed + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Policy not found + '412': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Precondition failed + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporarily unavailable + '507': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Insufficient storage error + summary: Update an existing policy + tags: + - Data Hub - Behavior Policies diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_states_{clientId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_states_{clientId}.yaml new file mode 100644 index 0000000000..8b6f8439fd --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_behavior-validation_states_{clientId}.yaml @@ -0,0 +1,59 @@ +get: + description: |+ + Use this endpoint to get the stored state of a client for DataHub. + + operationId: getClientState + parameters: + - description: The client identifier. + example: client1 + in: path + name: clientId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get client State + summary: Get the state of a client + value: + items: + - policyId: reallyCoolBehaviorPolicy + behaviorId: Publish.quota + stateType: INTERMEDIATE + stateName: Connected + firstSetAt: '2023-09-05T09:46:47.854Z' + arguments: + minPublishes: 5 + maxPublishes: 10 + variables: + minPublishes: '5' + publishCount: '0' + maxPublishes: '10' + schema: + $ref: ../components/schemas/FsmStatesInformationListItem.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: URL parameter missing + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Client is disconnected + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server error + summary: Get the state of a client + tags: + - Data Hub - State diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_data-validation_policies.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_data-validation_policies.yaml new file mode 100644 index 0000000000..4e05623e21 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_data-validation_policies.yaml @@ -0,0 +1,430 @@ +get: + description: |- + Get all data policies. + + This endpoint returns the content of the policies with the content-type `application/json`. + + + operationId: getAllDataPolicies + parameters: + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, createdAt, lastUpdatedAt, matching, validation, + onSuccess, onFailure + example: id,createdAt + in: query + name: fields + schema: + type: string + - description: >- + Comma-separated list of policy IDs used for filtering. Multiple filters + can be applied together. + example: policy1,policy2 + in: query + name: policyIds + schema: + type: string + - description: >- + Comma-separated list of schema IDs used for filtering. Multiple filters + can be applied together. + example: schema1,schema2 + in: query + name: schemaIds + schema: + type: string + - description: >- + MQTT topic string that the retrieved policies must match. Returned + policies are sorted in the same way as they are applied to matching + publishes. 'topic' filtering does not support pagination + example: topic/my-topic + in: query + name: topic + schema: + type: string + - description: >- + Specifies the page size for the returned results. The value must be + between 10 and 500. The default page size is 50. The limit is ignored if + the 'topic' query parameter is set. + example: 100 + in: query + name: limit + schema: + type: integer + format: int32 + - description: >- + The cursor that has been returned by the previous result page. Do not + pass this parameter if you want to fetch the first page. + in: query + name: cursor + schema: + type: string + responses: + '200': + content: + application/json: + examples: + list-response-a: + description: Example response with multiple policies. No more pages left + summary: Multiple results, last page + value: + items: + - id: policy1 + createdAt: '2023-04-26T13:32:47.032Z' + lastUpdatedAt: '2023-04-26T13:32:47.032Z' + matching: + topicFilter: topic1 + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' + with result '${validationResult}' + onFailure: + pipeline: + - id: logFailureOperation + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic + '${topic}' with result '${validationResult}' + - id: policy2 + createdAt: '2023-04-26T13:32:47.049Z' + lastUpdatedAt: '2023-04-26T13:32:47.049Z' + matching: + topicFilter: topic2 + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' + with result '${validationResult}' + onFailure: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic + '${topic}' with result '${validationResult}' + list-response-b: + description: Example response with multiple policies. More pages left + summary: Multiple results, more pages left + value: + items: + - id: policy1 + createdAt: '2023-04-26T13:32:47.032Z' + lastUpdatedAt: '2023-04-26T13:32:47.032Z' + matching: + topicFilter: topic1 + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: DEBUG + message: >- + $clientId sent a publish on topic '$topic' with + result '$validationResult' + onFailure: + pipeline: + - id: logFailureOperation + functionId: System.log + arguments: + level: WARN + message: >- + $clientId sent an invalid publish on topic + '$topic' with result '$validationResult' + - id: policy2 + createdAt: '2023-04-26T13:32:47.049Z' + lastUpdatedAt: '2023-04-26T13:32:47.049Z' + matching: + topicFilter: topic2 + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: DEBUG + message: >- + $clientId sent a publish on topic '$topic' with + result '$validationResult' + onFailure: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: WARN + message: >- + $clientId sent an invalid publish on topic + '$topic' with result '$validationResult' + - id: policy3 + createdAt: '2023-04-26T13:32:47.049Z' + lastUpdatedAt: '2023-04-26T13:32:47.049Z' + matching: + topicFilter: topic3 + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: DEBUG + message: >- + $clientId sent a publish on topic '$topic' with + result '$validationResult' + onFailure: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: WARN + message: >- + $clientId sent an invalid publish on topic + '$topic' with result '$validationResult' + _links: + next: >- + /api/v1/data-validation/policies?cursor=a-eqj-GE9B5DkV-nhwVBk-nTL807ty&limit=3 + list-response-c: + description: >- + Example response with requested fields and multiple policies. + More pages left + summary: Multiple results, requested 'id' field + value: + items: + - id: policy1 + - id: policy2 + - id: policy3 + _links: + next: >- + /api/v1/data-validation/policies?cursor=a-eqj-GE9B5DkV-nhwVBk-nTL807ty&limit=3&fields=id + list-response-d: + description: Example response with a single policy + summary: Single Result + value: + items: + - id: policy1 + createdAt: '2023-04-26T13:32:47.032Z' + lastUpdatedAt: '2023-04-26T13:32:47.032Z' + matching: + topicFilter: topic1 + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logSuccessOperation + functionId: System.log + arguments: + level: DEBUG + message: >- + $clientId sent a publish on topic '$topic' with + result '$validationResult' + onFailure: + pipeline: + - id: logFailureOperation + functionId: System.log + arguments: + level: WARN + message: >- + $clientId sent an invalid publish on topic + '$topic' with result '$validationResult' + schema: + $ref: ../components/schemas/DataPolicyList.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: URL parameter missing + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: DataPolicy not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Request resource temporary unavailable + summary: Get all data policies + tags: + - Data Hub - Data Policies +post: + description: |+ + Create a data policy + + operationId: createDataPolicy + requestBody: + content: + application/json: + example: + id: policy1 + matching: + topicFilter: topic/+ + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logOperationSuccess + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' with result + '${validationResult}' + onFailure: + pipeline: + - id: logOperationFailure + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic '${topic}' with + result '${validationResult}' + schema: + $ref: ../components/schemas/DataPolicy.yaml + description: The data policy to create. + required: true + responses: + '201': + content: + application/json: + examples: + response-example: + description: Example response. + summary: Policy was created successfully + value: + id: policy1 + createdAt: '2023-04-19T13:35:00.930Z' + lastUpdatedAt: '2023-04-19T13:35:00.930Z' + matching: + topicFilter: topic/+ + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema1 + version: '1' + onSuccess: + pipeline: + - id: logOperationSuccess + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' with + result '${validationResult}' + onFailure: + pipeline: + - id: logOperationFailure + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic + '${topic}' with result '${validationResult}' + schema: + $ref: ../components/schemas/DataPolicy.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: DataPolicy creation failed + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: DataPolicy already present + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Request resource temporary unavailable + '507': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Insufficient storage + summary: Create a new data policy + tags: + - Data Hub - Data Policies diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_data-validation_policies_{policyId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_data-validation_policies_{policyId}.yaml new file mode 100644 index 0000000000..9b83209505 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_data-validation_policies_{policyId}.yaml @@ -0,0 +1,286 @@ +delete: + description: |- + Deletes an existing data policy. + + + operationId: deleteDataPolicy + parameters: + - description: The identifier of the data policy to delete. + example: policy1 + in: path + name: policyId + required: true + schema: + type: string + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + responses: + '204': + description: Success, no response body + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: URL parameter missing + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: DataPolicy not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Request resource temporary unavailable + summary: Delete a data policy + tags: + - Data Hub - Data Policies +get: + description: |- + Get a specific data policy. + + This endpoint returns the content of the policy with the content-type `application/json`. + + + operationId: getDataPolicy + parameters: + - description: The identifier of the policy. + example: policy1 + in: path + name: policyId + required: true + schema: + type: string + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, createdAt, lastUpdatedAt, matching, validation, + onSuccess, onFailure + example: id,createdAt + in: query + name: fields + schema: + type: string + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get Policy + summary: Get Policy + value: + id: policy1 + createdAt: '2023-04-19T13:35:00.930Z' + lastUpdatedAt: '2023-04-19T13:35:00.930Z' + matching: + topicFilter: topic/+ + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema1 + version: '1' + onSuccess: + pipeline: + - id: logOperationSuccess + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' with + result '${validationResult}' + onFailure: + pipeline: + - id: logOperationFailure + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic + '${topic}' with result '${validationResult}' + schema: + $ref: ../components/schemas/DataPolicy.yaml + description: Success + '400': + content: + application/json: + examples: + param-missing: + description: Example response when a required parameter is missing. + summary: Required URL parameter missing + value: + errors: + - title: Required parameter missing + detail: Required URL parameter 'parameterName' is missing + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bad request + '404': + content: + application/json: + examples: + not-found: + description: Policy not found + summary: Not found + value: + errors: + - title: Resource not found + detail: Resource with id 'my-resource-id' not found + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Resource not found + summary: Get a data policy + tags: + - Data Hub - Data Policies +put: + description: >- + Update a data policy + + + The path parameter 'policyId' must match the 'id' of the policy in the + request body. + The matching part of policies cannot be changed with an update. + + operationId: updateDataPolicy + parameters: + - description: The identifier of the policy. + example: policy1 + in: path + name: policyId + required: true + schema: + type: string + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + requestBody: + content: + application/json: + example: + id: policy1 + matching: + topicFilter: topic/+ + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema + version: '1' + onSuccess: + pipeline: + - id: logOperationSuccess + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' with result + '${validationResult}' + onFailure: + pipeline: + - id: logOperationFailure + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic '${topic}' with + result '${validationResult}' + schema: + $ref: ../components/schemas/DataPolicy.yaml + description: The data policy that should be updated. + required: true + responses: + '200': + content: + application/json: + examples: + response-example: + description: Example response. + summary: Policy was updated successfully + value: + id: policy1 + createdAt: '2023-04-19T13:35:00.930Z' + lastUpdatedAt: '2023-09-26T11:17:22.311Z' + matching: + topicFilter: topic/+ + validation: + validators: + - type: schema + arguments: + strategy: ALL_OF + schemas: + - schemaId: schema1 + version: '1' + onSuccess: + pipeline: + - id: logOperationSuccess + functionId: System.log + arguments: + level: DEBUG + message: >- + ${clientId} sent a publish on topic '${topic}' with + result '${validationResult}' + onFailure: + pipeline: + - id: logOperationFailure + functionId: System.log + arguments: + level: WARN + message: >- + ${clientId} sent an invalid publish on topic + '${topic}' with result '${validationResult}' + schema: + $ref: ../components/schemas/DataPolicy.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: DataPolicy creation failed + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: DataPolicy not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Request resource temporary unavailable + '507': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Insufficient storage + summary: Update an existing data policy + tags: + - Data Hub - Data Policies diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_fsm.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_fsm.yaml new file mode 100644 index 0000000000..a7b849a4bc --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_fsm.yaml @@ -0,0 +1,99 @@ +get: + description: >- + This endpoints provides the means to get information on the available Finite + State Machines (FSMs) for Behavior Policies for the HiveMQ Data Hub. The + information is provided in form of a Json Schema. + operationId: getFsms + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get FSMs + summary: Get schema + value: + type: object + required: + - model + properties: + model: + title: Behavior Model + default: Mqtt.events + enum: + - Publish.quota + - Mqtt.events + - Publish.duplicate + allOf: + - if: + type: object + properties: + model: + const: Publish.quota + then: + type: object + properties: + arguments: + title: Publish.quota options + description: >- + When you configure a publish-quota model, at least + one of the available arguments must be present. Data + Hub uses the default value for the missing + parameter.\nThe default value for minimum is 0. The + default value for maxPublishes is UNLIMITED. + type: object + required: + - minPublishes + properties: + minPublishes: + type: number + title: minPublishes + description: >- + Defines the minimal number of published messages + that must be reached + maxPublishes: + type: number + title: maxPublishes + description: >- + Defines the maximum number of published messages + that must be reached + - if: + type: object + properties: + model: + const: Mqtt.events + then: + type: object + properties: + arguments: + title: Mqtt.events + description: This FSM does not require any arguments. + type: object + required: [] + properties: {} + - if: + type: object + properties: + model: + const: Publish.duplicate + then: + type: object + properties: + arguments: + title: Publish.duplicate options + description: This FSM does not require any arguments. + type: object + required: [] + properties: {} + schema: + $ref: ../components/schemas/JsonNode.yaml + description: Success + '500': + content: + application/json: + schema: + $ref: ../components/schemas/Errors.yaml + description: Internal server error + summary: Get all FSMs as a JSON Schema + tags: + - Data Hub - FSM diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_functions.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_functions.yaml new file mode 100644 index 0000000000..08e6de6bac --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_functions.yaml @@ -0,0 +1,193 @@ +get: + description: >- + This endpoints provides the means to get information on the available + Functions for the HiveMQ Data Hub. The information is provided in form of a + Json Schema. + operationId: getFunctions + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get Functions + summary: Get Functions + value: + anyOf: + - title: Mqtt.UserProperties.add + description: Adds a user property to the MQTT message. + type: object + required: + - name + - value + metaData: + isTerminal: false + isDataOnly: false + hasArguments: true + properties: + name: + type: string + title: name + description: >- + Specifies the name of the user property. Multiple user + properties with the same name are allowed. + value: + type: string + title: value + description: Specifies the value of the user property. + - title: Delivery.redirectTo + description: Redirects an MQTT PUBLISH message to a specified topic + type: object + required: + - topic + metaData: + isTerminal: true + isDataOnly: true + hasArguments: true + properties: + topic: + type: string + title: topic + description: >- + The destination MQTT topic according to MQTT + specification + applyPolicies: + type: string + title: applyPolicies + description: >- + Defines whether policies are executed after publishing + to a different topic. + - title: Mqtt.drop + description: Drops the MQTT packet that is currently processed + type: object + required: [] + metaData: + isTerminal: false + isDataOnly: false + hasArguments: true + properties: + reasonString: + type: string + title: reasonString + description: >- + Specifies the reason string that is responded to MQTT5 + clients. + - title: System.log + description: Logs a message on the given level + type: object + required: + - level + - message + metaData: + isTerminal: false + isDataOnly: false + hasArguments: true + properties: + level: + type: string + title: Log Level + description: >- + Specifies the log level of the function in the + hivemq.log file + message: + type: string + title: Message + description: >- + Adds a user-defined string that prints to the log + file. For more information, see Example log message + - title: Mqtt.disconnect + description: Disconnects the client + type: object + required: [] + metaData: + isTerminal: true + isDataOnly: false + hasArguments: false + properties: {} + - title: Serdes.deserialize + description: >- + Deserializes a binary MQTT message payload into a data + object based on the configured JSON Schema or Protobuf + schema. + type: object + required: + - schemaId + - schemaVersion + metaData: + isTerminal: false + isDataOnly: false + hasArguments: true + properties: + schemaId: + type: string + title: schemaId + description: >- + The identifier of the JSON Schema to be used for + deserialization. + schemaVersion: + type: string + title: schemaVersion + description: >- + The version of the schema to be used for + deserialization. + - title: Metrics.Counter.increment + description: >- + Increments a metric of type counter, which can be accessed + with monitoring + type: object + required: + - metricName + - incrementBy + metaData: + isTerminal: false + isDataOnly: false + hasArguments: true + properties: + metricName: + type: string + title: metricName + description: Specifies the name of the metric to be incremented. + incrementBy: + type: string + title: incrementBy + description: >- + Specifies the amount by which the counter should be + incremented. Negative values are supported. + - title: Serdes.serialize + description: >- + Serializes a data object into a binary MQTT message + payload based on the configured JSON Schema (PROTOBUF + currently not supported). + type: object + required: + - schemaId + - schemaVersion + metaData: + isTerminal: false + isDataOnly: true + hasArguments: true + properties: + schemaId: + type: string + title: schemaId + description: >- + The identifier of the JSON Schema to be used for + serialization + schemaVersion: + type: string + title: schemaVersion + description: >- + The version of the schema to be used for + serialization. + schema: + $ref: ../components/schemas/JsonNode.yaml + description: Success + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + summary: Get all functions as a JSON Schema + tags: + - Data Hub - Functions diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_schemas.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_schemas.yaml new file mode 100644 index 0000000000..557fe41de4 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_schemas.yaml @@ -0,0 +1,237 @@ +get: + description: |- + Get all schemas. + + This endpoint returns the content of the schemas with the content-type `application/json`. + + + operationId: getAllSchemas + parameters: + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, type, schemaDefinition, createdAt + example: id,createdAt + in: query + name: fields + schema: + type: string + - description: >- + Comma-separated list of schema types used for filtering. Multiple + filters can be applied together. + example: JSON,PROTOBUF + in: query + name: types + schema: + type: string + - description: >- + Comma-separated list of schema ids used for filtering. Multiple filters + can be applied together. + example: schema1,schema2 + in: query + name: schemaIds + schema: + type: string + - description: >- + Specifies the page size for the returned results. Has to be between 10 + and 500. Default page size is 50. + example: 100 + in: query + name: limit + schema: + type: integer + format: int32 + - description: >- + The cursor that has been returned by the previous result page. Do not + pass this parameter if you want to fetch the first page. + in: query + name: cursor + schema: + type: string + responses: + '200': + content: + application/json: + examples: + list-response-a: + description: Example response with multiple schemas. No more pages left + summary: Multiple results, last page + value: + items: + - id: schema1 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:28:35.164Z' + - id: schema2 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:38:35.164Z' + - id: schema3 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:48:35.164Z' + list-response-b: + description: Example response with multiple schemas. More pages left + summary: Multiple results, more pages left + value: + items: + - id: schema1 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:28:35.164Z' + - id: schema2 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:38:35.164Z' + - id: schema3 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:48:35.164Z' + _links: + next: >- + /api/v1/data-hub/schemas?cursor=a-eqj-GE9B5DkV-nhwVBk-nTL807ty&limit=3 + list-response-c: + description: >- + Example response with requested fields and multiple schemas. + More pages left + summary: Multiple results, requested 'id' field + value: + items: + - id: schema1 + - id: schema2 + - id: schema3 + _links: + next: >- + /api/v1/data-hub/schemas?cursor=a-eqj-GE9B5DkV-nhwVBk-nTL807ty&limit=3&fields=id + list-response-d: + description: Example response with a single schema + summary: Single Result + value: + items: + - id: schema1 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:28:35.164Z' + list-response-e: + description: Example response with all versions of specific schema id. + summary: List versions of one schema, last page + value: + items: + - id: schema1 + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:28:35.164Z' + - id: schema1 + version: 2 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:38:35.164Z' + - id: schema1 + version: 3 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:48:35.164Z' + schema: + $ref: ../components/schemas/SchemaList.yaml + description: Success + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Request resource temporary unavailable + summary: Get all schemas + tags: + - Data Hub - Schemas +post: + description: |+ + Creates a schema + + operationId: createSchema + parameters: + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + requestBody: + content: + application/json: + example: + id: schema + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + schema: + $ref: ../components/schemas/PolicySchema.yaml + description: The schema that should be created. + required: true + responses: + '201': + content: + application/json: + examples: + response-example: + description: Example response. + summary: Schema was created successfully + value: + id: schema + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:28:35.164Z' + schema: + $ref: ../components/schemas/PolicySchema.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Schema could not be validatetd + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Schema already exists + '412': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Mismatch between schema and etag + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '507': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Insufficient storage + summary: Create a new schema + tags: + - Data Hub - Schemas diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_schemas_{schemaId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_schemas_{schemaId}.yaml new file mode 100644 index 0000000000..7a3a82ec52 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_schemas_{schemaId}.yaml @@ -0,0 +1,119 @@ +delete: + description: |- + Deletes the selected schema and all associated versions of the schema. + + + operationId: deleteSchema + parameters: + - description: The schema identifier of the schema versions to delete. + example: schema1 + in: path + name: schemaId + required: true + schema: + type: string + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + responses: + '204': + description: Success, no response body + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Schema referenced + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Schema not found + '412': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Mismatch between schema and etag + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Request resource temporary unavailable + summary: Delete all versions of the schema + tags: + - Data Hub - Schemas +get: + description: |- + Get a specific schema. + + This endpoint returns the content of the latest version of the schema with the content-type `application/json`. + + + operationId: getSchema + parameters: + - description: The identifier of the schema. + example: schema1 + in: path + name: schemaId + required: true + schema: + type: string + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, type, schemaDefinition, createdAt + example: id,type + in: query + name: fields + schema: + type: string + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get schema + summary: Get schema + value: + id: schema + version: 1 + type: JSON + schemaDefinition: >- + ewogICIkaWQiOiAiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZGRyZXNzLmpzb24iLAogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIiwKICAidHlwZSI6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIjogewogICAgInN0cmVldF9hZGRyZXNzIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCiAgICAiY2l0eSI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAogICAgInN0YXRlIjogeyAidHlwZSI6ICJzdHJpbmciIH0KICB9LAogICJyZXF1aXJlZCI6IFsic3RyZWV0X2FkZHJlc3MiLCAiY2l0eSIsICJzdGF0ZSJdCn0= + createdAt: '2023-03-01T13:28:35.164Z' + schema: + $ref: ../components/schemas/PolicySchema.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: A url parameter is missing + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Schema not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + summary: Get a schema + tags: + - Data Hub - Schemas diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_scripts.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_scripts.yaml new file mode 100644 index 0000000000..ec5233fc39 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_scripts.yaml @@ -0,0 +1,230 @@ +get: + description: Get all scripts. + operationId: getAllScripts + parameters: + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, version, description, runtime, functionType, createdAt + example: id,createdAt,source + in: query + name: fields + schema: + type: string + - description: >- + Comma-separated list of function types used for filtering. Multiple + filters can be applied together. + example: TRANSFORMATION + in: query + name: functionTypes + schema: + type: string + - description: >- + Comma-separated list of script ids used for filtering. Multiple filters + can be applied together. + example: script1,script2 + in: query + name: scriptIds + schema: + type: string + - description: >- + Specifies the page size for the returned results. Has to be between 10 + and 500. Default page size is 50. + example: 100 + in: query + name: limit + schema: + type: integer + format: int32 + - description: >- + The cursor that has been returned by the previous result page. Do not + pass this parameter if you want to fetch the first page. + in: query + name: cursor + schema: + type: string + responses: + '200': + content: + application/json: + examples: + list-response-1: + description: Example response with a single script + summary: Single Result + value: + items: + - id: my-transform.js + version: 1 + createdAt: '2023-11-21T13:08:09.898Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + list-response-b: + description: Example response with multiple sripts. More pages left + summary: Multiple results, more pages left + value: + items: + - id: my-transform.js + version: 1 + createdAt: '2023-11-21T13:08:09.898Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + - id: my-transform-new.js + version: 1 + createdAt: '2023-11-21T13:17:53.085Z' + description: >- + This script adds the user property ('foo', 'bar') to a + publish + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsgcHVibGlzaC51c2VyUHJvcGVydGllcy5wdXNoKHtuYW1lOiAnZm9vJywgdmFsdWU6ICdiYXInfSk7IHJldHVybiBwdWJsaXNoOyB9 + _links: + next: /api/v1/data-hub/scripts?cursor=a-WfW-QB4L4Q==&limit=3 + list-response-c: + description: >- + Example response with requested fields and multiple scripts. + More pages left + summary: Multiple results, requested 'id' field + value: + items: + - id: script1 + - id: script2 + - id: script3 + _links: + next: >- + /api/v1/data-hub/scripts?cursor=a-eqj-GE9B5DkV-nhwVBk-nTL807ty&limit=3&fields=id + list-response-e: + description: Example response with all versions of specific script id. + summary: List versions of one script, last page + value: + items: + - id: my-transform.js + version: 1 + createdAt: '2023-11-21T13:08:09.898Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + - id: my-transform.js + version: 2 + createdAt: '2023-11-21T13:17:53.085Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsgcHVibGlzaC51c2VyUHJvcGVydGllcy5wdXNoKHtuYW1lOiAnZm9vJywgdmFsdWU6ICdiYXInfSk7IHJldHVybiBwdWJsaXNoOyB9 + list-response-many: + description: Example response with multiple scripts + summary: Multiple results + value: + items: + - id: my-transform.js + version: 1 + createdAt: '2023-11-21T13:08:09.898Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + - id: my-transform-new.js + version: 1 + createdAt: '2023-11-21T13:17:53.085Z' + description: >- + This script adds the user property ('foo', 'bar') to a + publish + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsgcHVibGlzaC51c2VyUHJvcGVydGllcy5wdXNoKHtuYW1lOiAnZm9vJywgdmFsdWU6ICdiYXInfSk7IHJldHVybiBwdWJsaXNoOyB9 + schema: + $ref: ../components/schemas/ScriptList.yaml + description: Success + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporary not available + summary: Get all scripts + tags: + - Data Hub - Scripts +post: + description: Creates a script + operationId: createScript + parameters: + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + requestBody: + content: + application/json: + example: + id: my-transform.js + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + schema: + $ref: ../components/schemas/Script.yaml + description: The script that should be created. + required: true + responses: + '201': + content: + application/json: + examples: + response-example: + description: Example response. + summary: Script was created successfully + value: + id: my-transform.js + version: 1 + createdAt: '2023-11-21T13:08:09.898Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + schema: + $ref: ../components/schemas/Script.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script is invalid + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script is already present + '412': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script doesn't match etag + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporary not available + '507': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Insufficient storage + summary: Create a new script + tags: + - Data Hub - Scripts diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_scripts_{scriptId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_scripts_{scriptId}.yaml new file mode 100644 index 0000000000..8e1f08c279 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_data-hub_scripts_{scriptId}.yaml @@ -0,0 +1,118 @@ +delete: + description: Deletes the selected script. + operationId: deleteScript + parameters: + - description: The script identifier of the script to delete. + example: hello_world_function + in: path + name: scriptId + required: true + schema: + type: string + - description: The entity tag + in: header + name: If-Match + required: false + schema: + type: string + responses: + '204': + description: Success, no response body + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script is referenced + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script not found + '412': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script doesn't match etag + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporary not available + summary: Delete a script + tags: + - Data Hub - Scripts +get: + description: Get a specific script. + operationId: getScript + parameters: + - description: The identifier of the script. + example: hello_world_function + in: path + name: scriptId + required: true + schema: + type: string + - description: >- + Comma-separated list of fields to include in the response. Allowed + values are: id, version, description, runtime, functionType, createdAt + example: id,createdAt,source + in: query + name: fields + schema: + type: string + responses: + '200': + content: + application/json: + examples: + get-response: + description: Get script + summary: Get script + value: + id: my-transform.js + version: 1 + createdAt: '2023-11-21T13:08:09.898Z' + description: This script prefixes topics with 'transformed/' + functionType: TRANSFORMATION + source: >- + ZnVuY3Rpb24gdHJhbnNmb3JtKHB1Ymxpc2gsIGNvbnRleHQpIHsKICAgcHVibGlzaC50b3BpYyA9ICJ0cmFuc2Zvcm1lZC8iICsgcHVibGlzaC50b3BpYzsKICAgcmV0dXJuIHB1Ymxpc2g7Cn0= + schema: + $ref: ../components/schemas/Script.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: URL parameter missing + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Script not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server error + '503': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Temporary not available + summary: Get a script + tags: + - Data Hub - Scripts diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_capabilities.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_capabilities.yaml new file mode 100644 index 0000000000..81ac8a6192 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_capabilities.yaml @@ -0,0 +1,27 @@ +get: + description: Obtain gateway capabilities. + operationId: get-capabilities + responses: + '200': + content: + application/json: + examples: + capabilities: + description: An example capability list. + summary: Example capabilities + value: |- + { + "items": [ + { + "id": "test-capability" + "displayName": "Super useful Capability" + "description": "This capability is really useful for so many reasons." + } + ] + } + schema: + $ref: ../components/schemas/CapabilityList.yaml + description: Success + summary: Obtain Capabilities of the HiveMQ Edge Installation + tags: + - Frontend diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_configuration.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_configuration.yaml new file mode 100644 index 0000000000..870dd06c5d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_configuration.yaml @@ -0,0 +1,122 @@ +get: + description: Obtain configuration. + operationId: get-configuration + responses: + '200': + content: + application/json: + examples: + default-configuration: + description: An example default gateway configuration. + summary: Example gateway configuration + value: + environment: + properties: + environment-type: TEST + cloudLink: + displayText: HiveMQ Cloud + url: https://hivemq.com/cloud + description: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna + aliquyam erat, sed diam voluptua. At vero eos et accusam et + justo duo dolores et ea rebum. Stet clita kasd gubergren, + external: true + gitHubLink: + displayText: GitHub + url: https://github.com/hivemq/hivemq-edge + description: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna + aliquyam erat, sed diam voluptua. At vero eos et accusam et + justo duo dolores et ea rebum. Stet clita kasd gubergren, + external: true + documentationLink: + displayText: Documentation + url: https://github.com/hivemq/hivemq-edge/README.MD + description: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna + aliquyam erat, sed diam voluptua. At vero eos et accusam et + justo duo dolores et ea rebum. Stet clita kasd gubergren, + external: true + firstUseInformation: + firstUse: false + prefillUsername: admin + prefillPassword: password + firstUseTitle: Welcome To HiveMQ Edge + firstUseDescription: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna + aliquyam erat, sed diam voluptua. At vero eos et accusam et + justo duo dolores et ea rebum. Stet clita kasd gubergren, no + sea takimata sanctus est Lorem ipsum dolor sit amet. + ctas: + items: + - displayText: Connect My First Device + url: ./protocol-adapters?from=dashboard-cta + description: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. At vero + eos et accusam et justo duo dolores et ea rebum. Stet + clita kasd gubergren, + external: false + - displayText: Connect To My MQTT Broker + url: ./bridges?from=dashboard-cta + description: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. At vero + eos et accusam et justo duo dolores et ea rebum. Stet + clita kasd gubergren, + external: false + - displayText: Learn More + url: resources?from=dashboard-cta + description: >- + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et + dolore magna aliquyam erat, sed diam voluptua. At vero + eos et accusam et justo duo dolores et ea rebum. Stet + clita kasd gubergren, + external: false + resources: + items: + - displayText: Power Of Smart Manufacturing + url: >- + https://www.hivemq.com/articles/power-of-iot-data-management-in-smart-manufacturing/ + description: '' + target: '' + imageUrl: '' + external: true + - displayText: Power Of Smart Manufacturing + url: >- + https://www.hivemq.com/articles/power-of-iot-data-management-in-smart-manufacturing/ + description: '' + target: '' + imageUrl: '' + external: true + modules: + items: [] + extensions: + items: + - id: extension-1 + version: 1.0.0 + name: My First Extension + description: >- + Some extension description here which could span + multiple lines + author: HiveMQ + priority: 0 + - id: hivemq-allow-all-extension + version: 1.0.0 + name: Allow All Extension + author: HiveMQ + priority: 0 + installed: true + schema: + $ref: ../components/schemas/GatewayConfiguration.yaml + description: Success + summary: Obtain frontend configuration + tags: + - Frontend diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_notifications.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_notifications.yaml new file mode 100644 index 0000000000..76a55e758c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_frontend_notifications.yaml @@ -0,0 +1,26 @@ +get: + description: Obtain gateway notifications. + operationId: get-notifications + responses: + '200': + content: + application/json: + examples: + notifications: + description: An example notification list. + summary: Example notifications + value: + items: + - level: WARNING + title: Default Credentials Need Changing! + description: >- + Your gateway access is configured to use the default + username/password combination. This is a security risk. + Please ensure you modify your access credentials in your + configuration.xml file. + schema: + $ref: ../components/schemas/NotificationList.yaml + description: Success + summary: Obtain Notifications + tags: + - Frontend diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_gateway_configuration.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_gateway_configuration.yaml new file mode 100644 index 0000000000..932a2de14c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_gateway_configuration.yaml @@ -0,0 +1,19 @@ +get: + description: Obtain gateway configuration. + operationId: get-xml-configuration + responses: + '200': + content: + application/xml: + schema: + type: string + description: Success + '405': + content: + application/xml: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Error - function not supported + summary: Obtain HiveMQ Edge Configuration + tags: + - Gateway Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_gateway_listeners.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_gateway_listeners.yaml new file mode 100644 index 0000000000..162b32664e --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_gateway_listeners.yaml @@ -0,0 +1,25 @@ +get: + description: Obtain listener. + operationId: get-listeners + responses: + '200': + content: + application/json: + examples: + listener-configuration: + description: A list of listeners configured in the gateway + summary: Listener configuration + value: + items: + - name: tcp-listener-1883 + hostName: localhost + port: 1883 + - name: udp-listener-2442 + hostName: localhost + port: 2442 + schema: + $ref: ../components/schemas/ListenerList.yaml + description: Success + summary: 'Obtain the listeners configured ' + tags: + - Gateway Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_health_liveness.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_health_liveness.yaml new file mode 100644 index 0000000000..3fd92c094f --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_health_liveness.yaml @@ -0,0 +1,18 @@ +get: + description: Endpoint to determine whether the gateway is considered UP. + operationId: liveness + responses: + '200': + content: + application/json: + examples: + success-health: + description: An example success health response. + value: + status: UP + schema: + $ref: ../components/schemas/HealthStatus.yaml + description: Success + summary: Endpoint to determine whether the gateway is considered UP + tags: + - Health Check Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_health_readiness.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_health_readiness.yaml new file mode 100644 index 0000000000..ebca607f5d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_health_readiness.yaml @@ -0,0 +1,18 @@ +get: + description: Endpoint to determine whether the gateway is considered ready. + operationId: readiness + responses: + '200': + content: + application/json: + examples: + success-health: + description: An example success health response. + value: + status: UP + schema: + $ref: ../components/schemas/HealthStatus.yaml + description: Success + summary: Endpoint to determine whether the gateway is considered ready + tags: + - Health Check Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges.yaml new file mode 100644 index 0000000000..34cf2936d0 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges.yaml @@ -0,0 +1,79 @@ +get: + description: Get all bridges configured in the system. + operationId: getBridges + responses: + '200': + content: + application/json: + examples: + bridge-list-result: + description: Example response with several bridges. + summary: Bridge List result + value: + items: + - id: cloud + host: REDACTED.cloud + port: 8883 + clientId: cloud + keepAlive: 60 + sessionExpiry: 3600 + cleanStart: false + username: username + password: '*****' + loopPreventionEnabled: true + loopPreventionHopCount: 1 + remoteSubscriptions: [] + localSubscriptions: + - filters: + - '#' + destination: prefix/{#}/bridge/${bridge.name} + excludes: [] + customUserProperties: + - key: test1 + value: test2 + preserveRetain: true + maxQoS: 0 + tlsConfiguration: + enabled: true + keystorePassword: '' + privateKeyPassword: '' + truststorePassword: '' + protocols: [] + cipherSuites: [] + keystoreType: JKS + truststoreType: JKS + verifyHostname: true + handshakeTimeout: 10 + bridgeRuntimeInformation: + connectionStatus: + status: CONNECTED + id: cloud + type: bridge + schema: + $ref: ../components/schemas/BridgeList.yaml + description: Success + summary: List all bridges in the system + tags: + - Bridges +post: + description: Add bridge configured in the system. + operationId: addBridge + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/Bridge.yaml + description: The new bridge. + required: true + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bridge is invalid + summary: Add a new Bridge + tags: + - Bridges diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_status.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_status.yaml new file mode 100644 index 0000000000..add9162468 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_status.yaml @@ -0,0 +1,22 @@ +get: + description: Obtain the details. + operationId: get-bridges-status + responses: + '200': + content: + application/json: + examples: + example-connection-status: + description: Example connection status list. + summary: Example connection status + value: + items: + - status: CONNECTED + id: cloud + type: bridge + schema: + $ref: ../components/schemas/StatusList.yaml + description: The Connection Details Verification Result. + summary: Get the status of all the bridges in the system. + tags: + - Bridges diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}.yaml new file mode 100644 index 0000000000..5a48dbd8cf --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}.yaml @@ -0,0 +1,136 @@ +delete: + description: Remove bridge configured in the system. + operationId: removeBridge + parameters: + - description: The id of the bridge to delete. + in: path + name: bridgeId + required: true + schema: + type: string + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Query parameters invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bridge not found + summary: Remove a Bridge + tags: + - Bridges +get: + description: Get a bridge by ID. + operationId: getBridgeByName + parameters: + - description: The id of the bridge to query. + in: path + name: bridgeId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + bridge-get-result: + description: Example Bridge. + summary: Get Bridge Result + value: + id: cloud + host: REDACTED.cloud + port: 8883 + clientId: cloud + keepAlive: 60 + sessionExpiry: 3600 + cleanStart: false + username: username + password: password + loopPreventionEnabled: true + loopPreventionHopCount: 1 + remoteSubscriptions: [] + localSubscriptions: + - filters: + - '#' + destination: prefix/{#}/bridge/${bridge.name} + excludes: [] + customUserProperties: + - key: test1 + value: test2 + preserveRetain: true + maxQoS: 0 + tlsConfiguration: + enabled: true + keystorePassword: '' + privateKeyPassword: '' + truststorePassword: '' + protocols: [] + cipherSuites: [] + keystoreType: JKS + truststoreType: JKS + verifyHostname: true + handshakeTimeout: 10 + bridgeRuntimeInformation: + connectionStatus: + status: CONNECTED + id: simons-cloud + type: bridge + schema: + $ref: ../components/schemas/Bridge.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Query parameters invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bridge not found + summary: Get a bridge by ID + tags: + - Bridges +put: + description: Update bridge configured in the system. + operationId: updateBridge + parameters: + - description: The bridge to update. + in: path + name: bridgeId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/Bridge.yaml + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Query parameters invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bridge not found + summary: Update a Bridge + tags: + - Bridges diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}_connection-status.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}_connection-status.yaml new file mode 100644 index 0000000000..c18979a988 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}_connection-status.yaml @@ -0,0 +1,40 @@ +get: + description: Get the up to date status of a bridge. + operationId: get-bridge-status + parameters: + - description: The name of the bridge to query. + in: path + name: bridgeId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + bridge-connection-status-result: + description: Example response with CONNECTED status. + summary: Bridge Connection Status Result + value: + status: CONNECTED + id: cloud + type: bridge + schema: + $ref: ../components/schemas/Status.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Query parameters invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bridge not found + summary: Get the up to date status of a bridge + tags: + - Bridges diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}_status.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}_status.yaml new file mode 100644 index 0000000000..779957fa06 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_bridges_{bridgeId}_status.yaml @@ -0,0 +1,46 @@ +put: + description: Transition the connection status of a bridge. + operationId: transition-bridge-status + parameters: + - description: The id of the bridge whose runtime-status will change. + in: path + name: bridgeId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/StatusTransitionCommand.yaml + description: The command to transition the bridge runtime status. + required: true + responses: + '200': + content: + application/json: + examples: + transition-status-result: + description: Example response with PENDING status. + summary: Bridge Connection Transition Result + value: + status: PENDING + callbackTimeoutMillis: 1000 + schema: + $ref: ../components/schemas/StatusTransitionResult.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Query parameters invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Bridge not found + summary: Transition the runtime status of a bridge + tags: + - Bridges diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners.yaml new file mode 100644 index 0000000000..077a18bd29 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners.yaml @@ -0,0 +1,35 @@ +get: + description: Get all combiners + summary: Get all combiners + operationId: get-combiners + tags: + - Combiners + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/CombinerList.yaml + description: Success +post: + description: Add a new combiner. + summary: Add a new combiner + operationId: add-combiner + tags: + - Combiners + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/Combiner.yaml + description: The combiner to add + required: true + responses: + '200': + description: Success + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Combiner already exists diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}.yaml new file mode 100644 index 0000000000..9bcd2a9a8d --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}.yaml @@ -0,0 +1,62 @@ +get: + description: Get a combiner by its unique Id. + summary: Get a combiner + operationId: getCombinersById + tags: + - Combiners + parameters: + - $ref: ../components/parameters/CombinerId.yaml + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/Combiner.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Combiner not found +delete: + description: Delete the specified combiner. + summary: Delete a combiner + operationId: delete-combiner + tags: + - Combiners + parameters: + - $ref: ../components/parameters/CombinerId.yaml + responses: + '200': + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Combiner not found +put: + description: Update a combiner. + summary: Update a combiner + operationId: update-combiner + tags: + - Combiners + parameters: + - $ref: ../components/parameters/CombinerId.yaml + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/Combiner.yaml + description: The new content of the combiner + required: true + responses: + '200': + description: Success + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Combiner already exists diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}_mappings.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}_mappings.yaml new file mode 100644 index 0000000000..ccb85e3c04 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}_mappings.yaml @@ -0,0 +1,21 @@ +get: + description: Get all data combining mappings for the given combiner + summary: Get all mappings + operationId: getCombinerMappings + tags: + - Combiners + parameters: + - $ref: ../components/parameters/CombinerId.yaml + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/DataCombiningList.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Combiner not found diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}_mappings_{mappingId}_instructions.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}_mappings_{mappingId}_instructions.yaml new file mode 100644 index 0000000000..3c89e3add0 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_combiners_{combinerId}_mappings_{mappingId}_instructions.yaml @@ -0,0 +1,25 @@ +get: + description: Get all the instructions for a designated mapping + summary: Get all instructions + operationId: getMappingInstructions + tags: + - Combiners + parameters: + - $ref: ../components/parameters/CombinerId.yaml + - $ref: ../components/parameters/MappingId.yaml + responses: + '200': + content: + application/json: + schema: + type: array + description: List of instructions to be applied to incoming data + items: + $ref: ../components/schemas/Instruction.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Combiner not found diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_events.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_events.yaml new file mode 100644 index 0000000000..a6b9cf3f27 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_events.yaml @@ -0,0 +1,32 @@ +get: + description: Get all bridges configured in the system. + operationId: getEvents + parameters: + - description: Obtain all events since the specified epoch. + in: query + name: limit + schema: + type: integer + format: int32 + default: 100 + - description: Obtain all events since the specified epoch. + in: query + name: since + schema: + type: integer + format: int64 + responses: + '200': + content: + application/json: + examples: + event-list-result: + description: Example response with several events. + summary: Event List result + value: {} + schema: + $ref: ../components/schemas/EventList.yaml + description: Success + summary: List most recent events in the system + tags: + - Events diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapterconfigs_{adaptertype}_{adaptername}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapterconfigs_{adaptertype}_{adaptername}.yaml new file mode 100644 index 0000000000..7908ae8084 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapterconfigs_{adaptertype}_{adaptername}.yaml @@ -0,0 +1,47 @@ +put: + description: Add an adapter and all related parts like e.g. tags to the system. + operationId: create-complete-adapter + parameters: + - description: The adapter type. + in: path + name: adaptertype + required: true + schema: + type: string + - description: The adapter name. + in: path + name: adaptername + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/AdapterConfig.yaml + description: The new adapter. + required: true + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter failed validation + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter type not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Add a new Adapter and all related parts like e.g. tags + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters.yaml new file mode 100644 index 0000000000..48449d831f --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters.yaml @@ -0,0 +1,36 @@ +get: + description: Obtain a list of configured adapters. + operationId: getAdapters + responses: + '200': + content: + application/json: + examples: + adapter-list: + description: An example adapter list. + value: + items: + - id: test-simulation-server + type: simulation + config: + id: test-simulation-server + port: 5021 + host: 127.0.0.1 + pollingIntervalMillis: 1000 + subscriptions: + - filter: my-simulation-server/my-simulation-path-100 + destination: test + qos: 0 + adapterRuntimeInformation: + lastStartedAttemptTime: '2023-06-28T10:57:18.707+01' + numberOfDaemonProcesses: 1 + connectionStatus: + status: CONNECTED + id: test-simulation-server + type: adapter + schema: + $ref: ../components/schemas/AdaptersList.yaml + description: Success + summary: Obtain a list of configured adapters + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}.yaml new file mode 100644 index 0000000000..4bc13ec0dd --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}.yaml @@ -0,0 +1,109 @@ +delete: + description: Delete adapter configured in the system. + operationId: deleteAdapter + parameters: + - description: The adapter Id. + in: path + name: adapterId + required: true + schema: + type: string + responses: + '200': + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Delete an adapter + tags: + - Protocol Adapters +get: + description: Obtain the details for a configured adapter for the specified type". + operationId: getAdapter + parameters: + - description: The adapter Id. + in: path + name: adapterId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + adapter: + description: An example adapter. + value: + id: test-simulation-server + type: simulation + config: + id: test-simulation-server + port: 5021 + host: 127.0.0.1 + pollingIntervalMillis: 1000 + subscriptions: + - filter: my-simulation-server/my-simulation-path-100 + destination: test + qos: 0 + adapterRuntimeInformation: + lastStartedAttemptTime: '2023-06-28T10:57:18.707+01' + numberOfDaemonProcesses: 1 + connectionStatus: + status: CONNECTED + id: test-simulation-server + type: adapter + schema: + $ref: ../components/schemas/Adapter.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Obtain the details for a configured adapter for the specified type + tags: + - Protocol Adapters +put: + description: Update adapter configured in the system. + operationId: updateAdapter + parameters: + - description: The adapter Id. + in: path + name: adapterId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/Adapter.yaml + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter is invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update an adapter + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_discover.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_discover.yaml new file mode 100644 index 0000000000..d66c9f7036 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_discover.yaml @@ -0,0 +1,72 @@ +get: + description: Obtain a list of available values accessible via this protocol adapter. + operationId: discoverDataPoints + parameters: + - description: The adapter Id. + in: path + name: adapterId + required: true + schema: + type: string + - description: The root to browse. + in: query + name: root + schema: + type: string + - description: The recursive depth to include. Must be larger than 0. + in: query + name: depth + schema: + type: integer + format: int32 + responses: + '200': + content: + application/json: + examples: + discover: + description: An example discovery request. + value: + items: + - id: holding-registers + name: Holding Registers + description: Holding Registers + nodeType: FOLDER + selectable: false + children: + - id: grouping-1 + name: Addresses 1-16 + description: '' + nodeType: FOLDER + selectable: false + children: + - id: address-location-1 + name: '1' + description: '' + nodeType: VALUE + selectable: true + children: [] + schema: + $ref: ../components/schemas/ValuesTree.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Protocol adapter does not support discovery + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Discover a list of available data points + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_northboundMappings.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_northboundMappings.yaml new file mode 100644 index 0000000000..73bfbbb739 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_northboundMappings.yaml @@ -0,0 +1,65 @@ +get: + description: Get the northbound mappings of the adapter. + operationId: get-adapter-northboundMappings + parameters: + - description: The adapter id. + in: path + name: adapterId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/NorthboundMappingList.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Get the mappings for northbound messages. + tags: + - Protocol Adapters +put: + description: Update all northbound mappings of an adapter. + operationId: update-adapter-northboundMappings + parameters: + - description: The id of the adapter whose northbound mappings will be updated. + in: path + name: adapterId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/NorthboundMappingList.yaml + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Missing tags + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update the from mappings of an adapter. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_southboundMappings.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_southboundMappings.yaml new file mode 100644 index 0000000000..f2e5ed8089 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_southboundMappings.yaml @@ -0,0 +1,65 @@ +get: + description: Get the southbound mappings. + operationId: get-adapter-southboundMappings + parameters: + - description: The adapter id. + in: path + name: adapterId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/SouthboundMappingList.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Get the southbound mappings. + tags: + - Protocol Adapters +put: + description: Update all southbound mappings of an adapter. + operationId: update-adapter-southboundMappings + parameters: + - description: The id of the adapter whose southbound mappings will be updated. + in: path + name: adapterId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/SouthboundMappingList.yaml + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Missing tags + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update the to southbound mappings of an adapter. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_status.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_status.yaml new file mode 100644 index 0000000000..6bdcce404b --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_status.yaml @@ -0,0 +1,86 @@ +get: + description: Get the up to date status an adapter. + operationId: get-adapter-status + parameters: + - description: The name of the adapter to query. + in: path + name: adapterId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + example-connection-status: + description: Example connection status. + summary: Example connection status + value: + status: CONNECTED + id: cloud + type: bridge + schema: + $ref: ../components/schemas/Status.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter is invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Get the up to date status of an adapter + tags: + - Protocol Adapters +put: + description: Transition the runtime status of an adapter. + operationId: transition-adapter-status + parameters: + - description: The id of the adapter whose runtime status will change. + in: path + name: adapterId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/StatusTransitionCommand.yaml + description: The command to transition the adapter runtime status. + required: true + responses: + '200': + content: + application/json: + examples: + transition-status-result: + description: Example response with PENDING status. + summary: Adapter Connection Transition Result + value: + status: PENDING + callbackTimeoutMillis: 1000 + schema: + $ref: ../components/schemas/StatusTransitionResult.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter is invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Transition the runtime status of an adapter + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags.yaml new file mode 100644 index 0000000000..18a684e14c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags.yaml @@ -0,0 +1,112 @@ +get: + description: Get the domain tags for the device connected through this adapter. + operationId: get-adapter-domainTags + parameters: + - description: The adapter id. + in: path + name: adapterId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + opc ua domain tags example: + description: An example for domain tags in opc ua + summary: 'Example for domain tags for opc ua ' + value: + items: + - definition: + node: ns=2;i=test + name: tag1 + - definition: + node: ns=2;i=test2 + name: tag2 + schema: + $ref: ../components/schemas/DomainTagList.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + summary: Get the domain tags for the device connected through this adapter. + tags: + - Protocol Adapters +post: + description: Add a new domain tag to the specified adapter. + operationId: add-adapter-domainTags + parameters: + - description: The adapter id. + in: path + name: adapterId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/DomainTag.yaml + description: The domain tag. + required: true + responses: + '200': + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '409': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Tag already exists + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Add a new domain tag to the specified adapter + tags: + - Protocol Adapters +put: + description: Update all domain tags of an adapter. + operationId: update-adapter-domainTags + parameters: + - description: The id of the adapter whose domain tags will be updated. + in: path + name: adapterId + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/DomainTagList.yaml + responses: + '200': + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update the domain tag of an adapter. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags_{tagName}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags_{tagName}.yaml new file mode 100644 index 0000000000..58d300f5a0 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterId}_tags_{tagName}.yaml @@ -0,0 +1,81 @@ +delete: + description: Delete the specified domain tag on the given adapter. + operationId: delete-adapter-domainTags + parameters: + - description: The adapter Id. + in: path + name: adapterId + required: true + schema: + type: string + - description: The domain tag Id. + in: path + name: tagName + required: true + schema: + type: string + format: urlencoded + responses: + '200': + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Tag not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Delete an domain tag + tags: + - Protocol Adapters +put: + description: Update the domain tag of an adapter. + operationId: update-adapter-domainTag + parameters: + - description: The id of the adapter whose domain tag will be updated. + in: path + name: adapterId + required: true + schema: + type: string + - description: The name (urlencoded) of the domain tag that will be changed. + in: path + name: tagName + required: true + schema: + type: string + format: urlencoded + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/DomainTag.yaml + responses: + '200': + description: Success + '403': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Tag not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update the domain tag of an adapter. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterType}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterType}.yaml new file mode 100644 index 0000000000..e158414ff0 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_adapters_{adapterType}.yaml @@ -0,0 +1,35 @@ +post: + description: Add adapter to the system. + operationId: addAdapter + parameters: + - description: The adapter type. + in: path + name: adapterType + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/Adapter.yaml + description: The new adapter. + required: true + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter is invalid + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter type not found + summary: Add a new Adapter + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_northboundMappings.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_northboundMappings.yaml new file mode 100644 index 0000000000..499e5a2aba --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_northboundMappings.yaml @@ -0,0 +1,13 @@ +get: + description: Get all northbound mappings + operationId: get-northboundMappings + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/NorthboundMappingList.yaml + description: Success + summary: Get the mappings for northbound messages. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_southboundMappings.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_southboundMappings.yaml new file mode 100644 index 0000000000..756647b9ec --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_southboundMappings.yaml @@ -0,0 +1,13 @@ +get: + description: Get all southbound mappings. + operationId: get-southboundMappings + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/SouthboundMappingList.yaml + description: Success + summary: Get all southbound mappings. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_status.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_status.yaml new file mode 100644 index 0000000000..f9c6430215 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_status.yaml @@ -0,0 +1,22 @@ +get: + description: Obtain the details. + operationId: get-adapters-status + responses: + '200': + content: + application/json: + examples: + example-connection-status: + description: Example connection status list. + summary: Example connection status + value: + items: + - status: CONNECTED + id: cloud + type: bridge + schema: + $ref: ../components/schemas/StatusList.yaml + description: The Connection Details Verification Result. + summary: Get the status of all the adapters in the system. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tag-schemas_{protocolId}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tag-schemas_{protocolId}.yaml new file mode 100644 index 0000000000..c6b37ddb15 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tag-schemas_{protocolId}.yaml @@ -0,0 +1,26 @@ +get: + description: Obtain the tag schema for a specific portocol adapter. + operationId: getTagSchema + parameters: + - description: The protocol id. + in: path + name: protocolId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/TagSchema.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter type not found + summary: Obtain the JSON schema for a tag for a specific protocol adapter. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tags.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tags.yaml new file mode 100644 index 0000000000..be90ff235f --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tags.yaml @@ -0,0 +1,25 @@ +get: + description: Get the list of all domain tags created in this Edge instance + operationId: get-domain-tags + responses: + '200': + content: + application/json: + examples: + opc ua domain tags example: + description: An example for domain tags in opc ua + summary: 'Example for domain tags for opc ua ' + value: + items: + - definition: + node: ns=2;i=test + name: tag1 + - definition: + node: ns=2;i=test2 + name: tag2 + schema: + $ref: ../components/schemas/DomainTagList.yaml + description: Success + summary: Get the list of all domain tags created in this Edge instance + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tags_{tagName}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tags_{tagName}.yaml new file mode 100644 index 0000000000..56b4c4a53c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_tags_{tagName}.yaml @@ -0,0 +1,39 @@ +get: + description: Get a domain tag created in this Edge instance + operationId: get-domain-tag + parameters: + - description: The tag name (urlencoded). + in: path + name: tagName + required: true + schema: + type: string + format: urlencoded + responses: + '200': + content: + application/json: + examples: + opc ua domain tags example: + description: An example for domain tags in opc ua + summary: 'Example for domain tags for opc ua ' + value: + items: + - definition: + node: ns=2;i=test + name: tag1 + - definition: + node: ns=2;i=test2 + name: tag2 + schema: + $ref: ../components/schemas/DomainTag.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Tag not found + summary: Get the domain tag with the given name in this Edge instance + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_types.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_types.yaml new file mode 100644 index 0000000000..4b0783ba22 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_types.yaml @@ -0,0 +1,13 @@ +get: + description: Obtain a list of available protocol adapter types. + operationId: getAdapterTypes + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/ProtocolAdaptersList.yaml + description: Success + summary: Obtain a list of available protocol adapter types + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_types_{adapterType}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_types_{adapterType}.yaml new file mode 100644 index 0000000000..3743f51dee --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_types_{adapterType}.yaml @@ -0,0 +1,49 @@ +get: + description: Obtain a list of configured adapters for the specified type. + operationId: getAdaptersForType + parameters: + - description: The adapter type. + in: path + name: adapterType + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + filtered-adapters: + description: An example filtered adapter list. + value: + items: + - id: test-simulation-server + type: simulation + config: + id: test-simulation-server + port: 5021 + host: 127.0.0.1 + pollingIntervalMillis: 1000 + subscriptions: + - filter: my-simulation-server/my-simulation-path-100 + destination: test + qos: 0 + adapterRuntimeInformation: + lastStartedAttemptTime: '2023-06-28T10:57:18.707+01' + numberOfDaemonProcesses: 1 + connectionStatus: + status: CONNECTED + id: test-simulation-server + type: adapter + schema: + $ref: ../components/schemas/AdaptersList.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter type not found + summary: Obtain a list of configured adapters for the specified type + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_writing-schema_{adapterId}_{tagName}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_writing-schema_{adapterId}_{tagName}.yaml new file mode 100644 index 0000000000..8391eae53c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_protocol-adapters_writing-schema_{adapterId}_{tagName}.yaml @@ -0,0 +1,59 @@ +get: + description: >- + Get a json schema that explains the json schema that is used to write to a + PLC for the given tag name." + operationId: get-writing-schema + parameters: + - description: >- + The id of the adapter for which the Json Schema for writing to a PLC + gets created. + in: path + name: adapterId + required: true + schema: + type: string + - description: >- + The tag name (urlencoded) for which the Json Schema for writing to a PLC + gets created. + in: path + name: tagName + required: true + schema: + type: string + format: urlencoded + responses: + '200': + content: + application/json: + examples: + opc ua domain tags example: + description: An example for domain tags in opc ua + summary: 'Example for domain tags for opc ua ' + value: + items: + - definition: + node: ns=2;i=test + name: tag1 + - definition: + node: ns=2;i=test2 + name: tag2 + schema: + $ref: ../components/schemas/JsonNode.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Adapter not found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: >- + Get a json schema that explains the json schema that is used to write to a + PLC for the given tag name. + tags: + - Protocol Adapters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_sampling_schema_{topic}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_sampling_schema_{topic}.yaml new file mode 100644 index 0000000000..109b8f2f13 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_sampling_schema_{topic}.yaml @@ -0,0 +1,33 @@ +get: + description: Obtain a JsonSchema based in the stored samples for a given topic. + operationId: getSchemaForTopic + parameters: + - description: The topic. + in: path + name: topic + required: true + schema: + type: string + format: urlencoded + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/JsonNode.yaml + description: Success + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: No samples found + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Obtain a JsonSchema based in the stored samples for a given topic. + tags: + - Payload Sampling diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_sampling_topic_{topic}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_sampling_topic_{topic}.yaml new file mode 100644 index 0000000000..4ea257e5d8 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_sampling_topic_{topic}.yaml @@ -0,0 +1,38 @@ +get: + description: Obtain a list of samples that their gathered for the given topic. + operationId: getSamplesForTopic + parameters: + - description: The topic. + in: path + name: topic + required: true + schema: + type: string + format: urlencoded + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/PayloadSampleList.yaml + description: Success + summary: Obtain a list of samples that their gathered for the given topic. + tags: + - Payload Sampling +post: + description: Start sampling for the given topic. + operationId: startSamplingForTopic + parameters: + - description: The topic. + in: path + name: topic + required: true + schema: + type: string + format: urlencoded + responses: + '200': + description: Success + summary: Start sampling for the given topic. + tags: + - Payload Sampling diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters.yaml new file mode 100644 index 0000000000..7a8a8e3473 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters.yaml @@ -0,0 +1,71 @@ +get: + description: Get the list of all topic filters created in this Edge instance + operationId: get-topicFilters + responses: + '200': + content: + application/json: + examples: + An example for the topic filter list: + description: An example for the topic filter list + summary: An example for the topic filter list + value: + items: + - topicFilter: topic1 + description: filter1 + - topicFilter: topic2 + description: filter2 + schema: + $ref: ../components/schemas/TopicFilterList.yaml + description: Success + summary: Get the list of all topic filters created in this Edge instance + tags: + - Topic Filters +post: + description: Add a new topic filter. + operationId: add-topicFilters + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/TopicFilter.yaml + description: The topic filter. + required: true + responses: + '200': + description: Success + '403': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Already Present + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Add a new topic filter + tags: + - Topic Filters +put: + description: Update all topic filters + operationId: update-topicFilters + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/TopicFilterList.yaml + responses: + '200': + description: Success + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update all topic filters. + tags: + - Topic Filters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters_{filter}.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters_{filter}.yaml new file mode 100644 index 0000000000..98a497eab3 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters_{filter}.yaml @@ -0,0 +1,66 @@ +get: + description: Get the specified topic filter + operationId: get-topicFilter + parameters: + - $ref: ../components/parameters/TopicFilterId.yaml + responses: + '200': + content: + application/json: + schema: + $ref: ../components/schemas/TopicFilter.yaml + description: Success + summary: Get the specified topic filter + tags: + - Topic Filters +delete: + description: Delete the specified topic filter. + operationId: delete-topicFilter + parameters: + - $ref: ../components/parameters/TopicFilterId.yaml + responses: + '200': + description: Success + '403': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Already Present + '404': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Topic filter not found + summary: Delete an topic filter + tags: + - Topic Filters +put: + description: Update a topic filter + operationId: update-topicFilter + parameters: + - $ref: ../components/parameters/TopicFilterId.yaml + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/TopicFilter.yaml + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Topic filter failed validation + '500': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: Internal Server Error + summary: Update a topic filter. + tags: + - Topic Filters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters_{filter}_schema.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters_{filter}_schema.yaml new file mode 100644 index 0000000000..fc78d7f6e2 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_topic-filters_{filter}_schema.yaml @@ -0,0 +1,19 @@ +get: + description: Get the schema of the specified topic filter + operationId: get-topicFilter-schema + parameters: + - $ref: ../components/parameters/TopicFilterId.yaml + responses: + '200': + content: + application/json: + schema: + type: string + format: data-url + description: >- + The optional json schema for this topic filter in the data uri + format. + description: Success + summary: Get the schema of the specified topic filter + tags: + - Topic Filters diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_management_uns_isa95.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_management_uns_isa95.yaml new file mode 100644 index 0000000000..c1725f2b98 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_management_uns_isa95.yaml @@ -0,0 +1,47 @@ +get: + description: Obtain isa95 config. + operationId: get-isa95 + responses: + '200': + content: + application/json: + examples: + default-configuration: + description: An example ISA 95 config. + summary: Example configuration + value: + enabled: true + prefixAllTopics: true + enterprise: enterprise + site: site + area: area + productionLine: production-line + workCell: work-cell + schema: + $ref: ../components/schemas/ISA95ApiBean.yaml + description: Success + summary: Obtain isa95 config + tags: + - UNS +post: + description: Set isa95 config. + operationId: set-isa95 + requestBody: + content: + application/json: + schema: + $ref: ../components/schemas/ISA95ApiBean.yaml + description: The updated isa95 configuration. + required: true + responses: + '200': + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: isa95 config failed validation + summary: Set isa95 config + tags: + - UNS diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_metrics.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_metrics.yaml new file mode 100644 index 0000000000..0298c672e8 --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_metrics.yaml @@ -0,0 +1,64 @@ +get: + description: Obtain the latest sample for the metric requested. + operationId: getMetrics + responses: + '200': + content: + application/json: + examples: + metrics-list-sample: + description: Example response with metrics listed. + summary: List Metrics + value: + items: + - name: com.hivemq.edge.bridge.simons-cloud.local.publish.count + - name: simulation + - name: com.hivemq.edge.messages.dropped.count + - name: com.hivemq.edge.mqtt.connection.not-writable.current + - name: com.hivemq.edge.bridge.simons-cloud.forward.publish.count + - name: >- + com.hivemq.edge.bridge.simons-cloud.local.publish.received.count + - name: com.hivemq.edge.messages.outgoing.publish.count + - name: com.hivemq.edge.sessions.overall.current + - name: >- + com.hivemq.edge.bridge.simons-cloud.forward.publish.failed.count + - name: com.hivemq.edge.networking.bytes.read.total + - name: com.hivemq.edge.messages.outgoing.total.count + - name: com.hivemq.messages.governance.count + - name: >- + com.hivemq.edge.bridge.simons-cloud.local.publish.failed.count + - name: com.hivemq.edge.networking.connections.current + - name: >- + com.hivemq.edge.persistence.retained-messages.in-memory.total-size + - name: >- + com.hivemq.edge.bridge.simons-cloud.forward.publish.loop-hops-exceeded.count + - name: com.hivemq.edge.messages.incoming.connect.count + - name: >- + com.hivemq.edge.bridge.simons-cloud.local.publish.no-subscriber-present.count + - name: com.hivemq.edge.messages.incoming.publish.count + - name: com.hivemq.edge.messages.incoming.total.count + - name: com.hivemq.edge.messages.will.count.current + - name: com.hivemq.edge.messages.will.published.count.total + - name: >- + com.hivemq.edge.persistence.client-session.subscriptions.in-memory.total-size + - name: >- + com.hivemq.edge.bridge.simons-cloud.remote.publish.loop-hops-exceeded.count + - name: com.hivemq.edge.networking.bytes.write.total + - name: >- + com.hivemq.edge.bridge.simons-cloud.forward.publish.excluded.count + - name: com.hivemq.edge.networking.connections-closed.total.count + - name: >- + com.hivemq.edge.bridge.simons-cloud.remote.publish.received.count + - name: com.hivemq.edge.subscriptions.overall.current + - name: >- + com.hivemq.edge.persistence.queued-messages.in-memory.total-size + - name: >- + com.hivemq.edge.persistence.client-sessions.in-memory.total-size + - name: com.hivemq.edge.messages.retained.current + schema: + $ref: ../components/schemas/MetricList.yaml + description: Success + summary: Obtain a list of available metrics + tags: + - Metrics + - Metrics Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/api_v1_metrics_{metricName}_latest.yaml b/hivemq-edge-openapi/openAPI/paths/api_v1_metrics_{metricName}_latest.yaml new file mode 100644 index 0000000000..0ad85e492b --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/api_v1_metrics_{metricName}_latest.yaml @@ -0,0 +1,34 @@ +get: + description: Obtain the latest sample for the metric requested. + operationId: getSample + parameters: + - description: The metric to search for. + in: path + name: metricName + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + metric-sample: + description: Example response with metrics listed. + summary: Metric Sample + value: + sampleTime: '2023-06-28T11:39:12.789+01' + value: 0 + schema: + $ref: ../components/schemas/DataPoint.yaml + description: Success + '400': + content: + application/json: + schema: + $ref: ../components/schemas/ProblemDetails.yaml + description: URL parameter missing + summary: Obtain the latest sample for the metric requested + tags: + - Metrics + - Metrics Endpoint diff --git a/hivemq-edge-openapi/openAPI/paths/root.yaml b/hivemq-edge-openapi/openAPI/paths/root.yaml new file mode 100644 index 0000000000..512ae7294c --- /dev/null +++ b/hivemq-edge-openapi/openAPI/paths/root.yaml @@ -0,0 +1,7 @@ +get: + operationId: getRoot + responses: + default: + content: + '*/*': {} + description: default response diff --git a/hivemq-edge-openapi/package.json b/hivemq-edge-openapi/package.json new file mode 100644 index 0000000000..78667e4759 --- /dev/null +++ b/hivemq-edge-openapi/package.json @@ -0,0 +1,14 @@ +{ + "name": "hivemq-edge-api", + "version": "1.0.0", + "dependencies": { + "@redocly/cli": "1.34.3" + }, + "private": true, + "scripts": { + "dev:start": "redocly preview-docs -p 8888", + "dev:build": "redocly bundle openapi/openapi.yaml -o dist/bundle.yaml", + "dev:test": "redocly lint", + "prod:release": "redocly bundle openapi/openapi.yaml -o ../ext/hivemq-edge-openapi-2025.9-SNAPSHOT.yaml" + } +} diff --git a/hivemq-edge-openapi/pnpm-lock.yaml b/hivemq-edge-openapi/pnpm-lock.yaml new file mode 100644 index 0000000000..3ba5bd2924 --- /dev/null +++ b/hivemq-edge-openapi/pnpm-lock.yaml @@ -0,0 +1,2049 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@redocly/cli': + specifier: 1.34.3 + version: 1.34.3(ajv@8.17.1) + +packages: + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.27.1': + resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + engines: {node: '>=6.9.0'} + + '@emotion/is-prop-valid@1.2.2': + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} + + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + '@emotion/unitless@0.8.1': + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + + '@exodus/schemasafe@1.3.0': + resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + + '@faker-js/faker@7.6.0': + resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} + engines: {node: '>=14.0.0', npm: '>=6.0.0'} + + '@humanwhocodes/momoa@2.0.4': + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jsep-plugin/assignment@1.3.0': + resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsep-plugin/regex@1.0.4': + resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@opentelemetry/api-logs@0.53.0': + resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.26.0': + resolution: {integrity: sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.26.0': + resolution: {integrity: sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-trace-otlp-http@0.53.0': + resolution: {integrity: sha512-m7F5ZTq+V9mKGWYpX8EnZ7NjoqAU7VemQ1E2HAG+W/u0wpY1x0OmbxAXfGKFHCspdJk8UKlwPGrpcB8nay3P8A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-exporter-base@0.53.0': + resolution: {integrity: sha512-UCWPreGQEhD6FjBaeDuXhiMf6kkBODF0ZQzrk/tuQcaVDJ+dDQ/xhJp192H9yWnKxVpEjFrSSLnpqmX4VwX+eA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-transformer@0.53.0': + resolution: {integrity: sha512-rM0sDA9HD8dluwuBxLetUmoqGJKSAbWenwD65KY9iZhUxdBHRLrIdrABfNDP7aiTjcgK8XFyTn5fhDz7N+W6DA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagator-b3@1.26.0': + resolution: {integrity: sha512-vvVkQLQ/lGGyEy9GT8uFnI047pajSOVnZI2poJqVGD3nJ+B9sFGdlHNnQKophE3lHfnIH0pw2ubrCTjZCgIj+Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.26.0': + resolution: {integrity: sha512-DelFGkCdaxA1C/QA0Xilszfr0t4YbGd3DjxiCDPh34lfnFr+VkkrjV9S8ZTJvAzfdKERXhfOxIKBoGPJwoSz7Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.26.0': + resolution: {integrity: sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.53.0': + resolution: {integrity: sha512-dhSisnEgIj/vJZXZV6f6KcTnyLDx/VuQ6l3ejuZpMpPlh9S1qMHiZU9NMmOkVkwwHkMy3G6mEBwdP23vUZVr4g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.26.0': + resolution: {integrity: sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.26.0': + resolution: {integrity: sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.26.0': + resolution: {integrity: sha512-Fj5IVKrj0yeUwlewCRwzOVcr5avTuNnMHWf7GPc1t6WaT78J6CJyF3saZ/0RkZfdeNO8IcBl/bNcWMVZBMRW8Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.27.0': + resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} + engines: {node: '>=14'} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/cli@1.34.3': + resolution: {integrity: sha512-GJNBTMfm5wTCtH6K+RtPQZuGbqflMclXqAZ5My12tfux6xFDMW1l0MNd5RMpnIS1aeFcDX++P1gnnROWlesj4w==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + hasBin: true + + '@redocly/config@0.22.2': + resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==} + + '@redocly/openapi-core@1.34.3': + resolution: {integrity: sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@redocly/respect-core@1.34.3': + resolution: {integrity: sha512-vo/gu7dRGwTVsRueVSjVk04jOQuL0w22RBJRdRUWkfyse791tYXgMCOx35ijKekL83Q/7Okxf/YX6UY1v5CAug==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@22.15.21': + resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} + + '@types/stylis@4.2.5': + resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + better-ajv-errors@1.2.0: + resolution: {integrity: sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + ajv: 4.11.8 - 8 + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + core-js@3.42.0: + resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decko@1.2.0: + resolution: {integrity: sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dompurify@3.2.6: + resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fast-xml-parser@4.5.3: + resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} + hasBin: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http2-client@1.3.5: + resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsep@1.4.0: + resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} + engines: {node: '>= 10.16.0'} + + json-pointer@0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonpath-plus@10.3.0: + resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} + engines: {node: '>=18.0.0'} + hasBin: true + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mobx-react-lite@4.1.0: + resolution: {integrity: sha512-QEP10dpHHBeQNv1pks3WnHRCem2Zp636lq54M2nKO2Sarr13pL4u6diQXf65yzXUn0mkk18SyIDCm9UOJYTi1w==} + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 || ^19 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + mobx-react@9.2.0: + resolution: {integrity: sha512-dkGWCx+S0/1mfiuFfHRH8D9cplmwhxOV5CkXMp38u6rQGG2Pv3FWYztS0M7ncR6TyPRQKaTG/pnitInoYE9Vrw==} + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 || ^19 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + mobx@6.13.7: + resolution: {integrity: sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-fetch-h2@2.3.0: + resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} + engines: {node: 4.x || >=6.0.0} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-readfiles@0.2.0: + resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + oas-kit-common@1.0.8: + resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} + + oas-linter@3.2.2: + resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==} + + oas-resolver@2.5.6: + resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==} + hasBin: true + + oas-schema-walker@1.1.5: + resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==} + + oas-validator@5.0.8: + resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + open@10.1.2: + resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} + engines: {node: '>=18'} + + openapi-sampler@1.6.1: + resolution: {integrity: sha512-s1cIatOqrrhSj2tmJ4abFYZQK6l5v+V4toO5q1Pa0DyN8mtyqy2I+Qrj5W9vOELEtybIMQs/TBZGVO/DtTFK8w==} + + outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + perfect-scrollbar@1.5.6: + resolution: {integrity: sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + polished@4.3.1: + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-tabs@6.1.0: + resolution: {integrity: sha512-6QtbTRDKM+jA/MZTTefvigNxo0zz+gnBTVFw2CFVvq+f2BuH0nF0vDLNClL045nuTAdOoK/IL1vTP0ZLX0DAyQ==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redoc@2.5.0: + resolution: {integrity: sha512-NpYsOZ1PD9qFdjbLVBZJWptqE+4Y6TkUuvEOqPUmoH7AKOmPcE+hYjotLxQNTqVoWL4z0T2uxILmcc8JGDci+Q==} + engines: {node: '>=6.9', npm: '>=3.0.0'} + peerDependencies: + core-js: ^3.1.4 + mobx: ^6.0.4 + react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5 + + reftools@1.1.9: + resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + should-equal@2.0.0: + resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} + + should-format@3.0.3: + resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==} + + should-type-adaptors@1.1.0: + resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==} + + should-type@1.4.0: + resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==} + + should-util@1.0.1: + resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==} + + should@13.2.3: + resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} + + simple-websocket@9.1.0: + resolution: {integrity: sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==} + + slugify@1.4.7: + resolution: {integrity: sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==} + engines: {node: '>=8.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stickyfill@1.1.1: + resolution: {integrity: sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + + styled-components@6.1.18: + resolution: {integrity: sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==} + engines: {node: '>= 16'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + + stylis@4.3.2: + resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + swagger2openapi@7.0.8: + resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} + hasBin: true + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} + + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + + url-template@2.0.8: + resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} + + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs@17.0.1: + resolution: {integrity: sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==} + engines: {node: '>=12'} + +snapshots: + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/runtime@7.27.1': {} + + '@emotion/is-prop-valid@1.2.2': + dependencies: + '@emotion/memoize': 0.8.1 + + '@emotion/memoize@0.8.1': {} + + '@emotion/unitless@0.8.1': {} + + '@exodus/schemasafe@1.3.0': {} + + '@faker-js/faker@7.6.0': {} + + '@humanwhocodes/momoa@2.0.4': {} + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': + dependencies: + jsep: 1.4.0 + + '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': + dependencies: + jsep: 1.4.0 + + '@opentelemetry/api-logs@0.53.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/exporter-trace-otlp-http@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-exporter-base@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.53.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.53.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) + protobufjs: 7.4.0 + + '@opentelemetry/propagator-b3@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/resources@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-logs@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.53.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-trace-base@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-trace-node@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.26.0(@opentelemetry/api@1.9.0) + semver: 7.7.2 + + '@opentelemetry/semantic-conventions@1.27.0': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/cli@1.34.3(ajv@8.17.1)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/exporter-trace-otlp-http': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@redocly/config': 0.22.2 + '@redocly/openapi-core': 1.34.3 + '@redocly/respect-core': 1.34.3(ajv@8.17.1) + abort-controller: 3.0.0 + chokidar: 3.6.0 + colorette: 1.4.0 + core-js: 3.42.0 + dotenv: 16.5.0 + form-data: 4.0.2 + get-port-please: 3.1.2 + glob: 7.2.3 + handlebars: 4.7.8 + mobx: 6.13.7 + pluralize: 8.0.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + redoc: 2.5.0(core-js@3.42.0)(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + semver: 7.7.2 + simple-websocket: 9.1.0 + styled-components: 6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + yargs: 17.0.1 + transitivePeerDependencies: + - ajv + - bufferutil + - encoding + - react-native + - supports-color + - utf-8-validate + + '@redocly/config@0.22.2': {} + + '@redocly/openapi-core@1.34.3': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.2 + colorette: 1.4.0 + https-proxy-agent: 7.0.6 + js-levenshtein: 1.1.6 + js-yaml: 4.1.0 + minimatch: 5.1.6 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@redocly/respect-core@1.34.3(ajv@8.17.1)': + dependencies: + '@faker-js/faker': 7.6.0 + '@redocly/ajv': 8.11.2 + '@redocly/openapi-core': 1.34.3 + better-ajv-errors: 1.2.0(ajv@8.17.1) + colorette: 2.0.20 + concat-stream: 2.0.0 + cookie: 0.7.2 + dotenv: 16.4.5 + form-data: 4.0.0 + jest-diff: 29.7.0 + jest-matcher-utils: 29.7.0 + js-yaml: 4.1.0 + json-pointer: 0.6.2 + jsonpath-plus: 10.3.0 + open: 10.1.2 + openapi-sampler: 1.6.1 + outdent: 0.8.0 + set-cookie-parser: 2.7.1 + undici: 6.21.3 + transitivePeerDependencies: + - ajv + - supports-color + + '@sinclair/typebox@0.27.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@22.15.21': + dependencies: + undici-types: 6.21.0 + + '@types/stylis@4.2.5': {} + + '@types/trusted-types@2.0.7': + optional: true + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + agent-base@7.1.3: {} + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + balanced-match@1.0.2: {} + + better-ajv-errors@1.2.0(ajv@8.17.1): + dependencies: + '@babel/code-frame': 7.27.1 + '@humanwhocodes/momoa': 2.0.4 + ajv: 8.17.1 + chalk: 4.1.2 + jsonpointer: 5.0.1 + leven: 3.1.0 + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-me-maybe@1.0.2: {} + + camelize@1.0.1: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + classnames@2.5.1: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@1.4.0: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + cookie@0.7.2: {} + + core-js@3.42.0: {} + + css-color-keywords@1.0.0: {} + + css-to-react-native@3.2.0: + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + + csstype@3.1.3: {} + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + decko@1.2.0: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + define-lazy-prop@3.0.0: {} + + delayed-stream@1.0.0: {} + + diff-sequences@29.6.3: {} + + dompurify@3.2.6: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dotenv@16.4.5: {} + + dotenv@16.5.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + emoji-regex@8.0.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es6-promise@3.3.1: {} + + escalade@3.2.0: {} + + event-target-shim@5.0.1: {} + + eventemitter3@5.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.0.6: {} + + fast-xml-parser@4.5.3: + dependencies: + strnum: 1.1.2 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + foreach@2.0.6: {} + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + 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 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-port-please@3.1.2: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gopd@1.2.0: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http2-client@1.3.5: {} + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@7.0.0: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + js-levenshtein@1.1.6: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsep@1.4.0: {} + + json-pointer@0.6.2: + dependencies: + foreach: 2.0.6 + + json-schema-traverse@1.0.0: {} + + jsonpath-plus@10.3.0: + dependencies: + '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) + '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) + jsep: 1.4.0 + + jsonpointer@5.0.1: {} + + leven@3.1.0: {} + + long@5.3.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lunr@2.3.9: {} + + mark.js@8.11.1: {} + + marked@4.3.0: {} + + math-intrinsics@1.1.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + mobx-react-lite@4.1.0(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + mobx: 6.13.7 + react: 19.1.0 + use-sync-external-store: 1.5.0(react@19.1.0) + optionalDependencies: + react-dom: 19.1.0(react@19.1.0) + + mobx-react@9.2.0(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + mobx: 6.13.7 + mobx-react-lite: 4.1.0(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + optionalDependencies: + react-dom: 19.1.0(react@19.1.0) + + mobx@6.13.7: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + neo-async@2.6.2: {} + + node-fetch-h2@2.3.0: + dependencies: + http2-client: 1.3.5 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-readfiles@0.2.0: + dependencies: + es6-promise: 3.3.1 + + normalize-path@3.0.0: {} + + oas-kit-common@1.0.8: + dependencies: + fast-safe-stringify: 2.1.1 + + oas-linter@3.2.2: + dependencies: + '@exodus/schemasafe': 1.3.0 + should: 13.2.3 + yaml: 1.10.2 + + oas-resolver@2.5.6: + dependencies: + node-fetch-h2: 2.3.0 + oas-kit-common: 1.0.8 + reftools: 1.1.9 + yaml: 1.10.2 + yargs: 17.0.1 + + oas-schema-walker@1.1.5: {} + + oas-validator@5.0.8: + dependencies: + call-me-maybe: 1.0.2 + oas-kit-common: 1.0.8 + oas-linter: 3.2.2 + oas-resolver: 2.5.6 + oas-schema-walker: 1.1.5 + reftools: 1.1.9 + should: 13.2.3 + yaml: 1.10.2 + + object-assign@4.1.1: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + open@10.1.2: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + openapi-sampler@1.6.1: + dependencies: + '@types/json-schema': 7.0.15 + fast-xml-parser: 4.5.3 + json-pointer: 0.6.2 + + outdent@0.8.0: {} + + path-browserify@1.0.1: {} + + path-is-absolute@1.0.1: {} + + perfect-scrollbar@1.5.6: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pluralize@8.0.0: {} + + polished@4.3.1: + dependencies: + '@babel/runtime': 7.27.1 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prismjs@1.30.0: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.15.21 + long: 5.3.2 + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react-tabs@6.1.0(react@19.1.0): + dependencies: + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.1.0 + + react@19.1.0: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + redoc@2.5.0(core-js@3.42.0)(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): + dependencies: + '@redocly/openapi-core': 1.34.3 + classnames: 2.5.1 + core-js: 3.42.0 + decko: 1.2.0 + dompurify: 3.2.6 + eventemitter3: 5.0.1 + json-pointer: 0.6.2 + lunr: 2.3.9 + mark.js: 8.11.1 + marked: 4.3.0 + mobx: 6.13.7 + mobx-react: 9.2.0(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + openapi-sampler: 1.6.1 + path-browserify: 1.0.1 + perfect-scrollbar: 1.5.6 + polished: 4.3.1 + prismjs: 1.30.0 + prop-types: 15.8.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-tabs: 6.1.0(react@19.1.0) + slugify: 1.4.7 + stickyfill: 1.1.1 + styled-components: 6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + swagger2openapi: 7.0.8 + url-template: 2.0.8 + transitivePeerDependencies: + - encoding + - react-native + - supports-color + + reftools@1.1.9: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + run-applescript@7.0.0: {} + + safe-buffer@5.2.1: {} + + scheduler@0.26.0: {} + + semver@7.7.2: {} + + set-cookie-parser@2.7.1: {} + + shallowequal@1.1.0: {} + + should-equal@2.0.0: + dependencies: + should-type: 1.4.0 + + should-format@3.0.3: + dependencies: + should-type: 1.4.0 + should-type-adaptors: 1.1.0 + + should-type-adaptors@1.1.0: + dependencies: + should-type: 1.4.0 + should-util: 1.0.1 + + should-type@1.4.0: {} + + should-util@1.0.1: {} + + should@13.2.3: + dependencies: + should-equal: 2.0.0 + should-format: 3.0.3 + should-type: 1.4.0 + should-type-adaptors: 1.1.0 + should-util: 1.0.1 + + simple-websocket@9.1.0: + dependencies: + debug: 4.4.1 + queue-microtask: 1.2.3 + randombytes: 2.1.0 + readable-stream: 3.6.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + slugify@1.4.7: {} + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + stickyfill@1.1.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strnum@1.1.2: {} + + styled-components@6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@emotion/is-prop-valid': 1.2.2 + '@emotion/unitless': 0.8.1 + '@types/stylis': 4.2.5 + css-to-react-native: 3.2.0 + csstype: 3.1.3 + postcss: 8.4.49 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + shallowequal: 1.1.0 + stylis: 4.3.2 + tslib: 2.6.2 + + stylis@4.3.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + swagger2openapi@7.0.8: + dependencies: + call-me-maybe: 1.0.2 + node-fetch: 2.7.0 + node-fetch-h2: 2.3.0 + node-readfiles: 0.2.0 + oas-kit-common: 1.0.8 + oas-resolver: 2.5.6 + oas-schema-walker: 1.1.5 + oas-validator: 5.0.8 + reftools: 1.1.9 + yaml: 1.10.2 + yargs: 17.0.1 + transitivePeerDependencies: + - encoding + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + tslib@2.6.2: {} + + typedarray@0.0.6: {} + + uglify-js@3.19.3: + optional: true + + undici-types@6.21.0: {} + + undici@6.21.3: {} + + uri-js-replace@1.0.1: {} + + url-template@2.0.8: {} + + use-sync-external-store@1.5.0(react@19.1.0): + dependencies: + react: 19.1.0 + + util-deprecate@1.0.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + wordwrap@1.0.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.10: {} + + y18n@5.0.8: {} + + yaml-ast-parser@0.0.43: {} + + yaml@1.10.2: {} + + yargs-parser@20.2.9: {} + + yargs@17.0.1: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 diff --git a/hivemq-edge-openapi/redocly.yaml b/hivemq-edge-openapi/redocly.yaml new file mode 100644 index 0000000000..9f21f1cf03 --- /dev/null +++ b/hivemq-edge-openapi/redocly.yaml @@ -0,0 +1,25 @@ +# See https://redocly.com/docs/cli/configuration/ for more information. +apis: + hivemq-edge@v1: + root: ./openapi/openapi.yaml +extends: + - recommended +rules: + no-unused-components: error + ### Custom rules - error must be fixed + security-defined: off + no-server-example.com: error +theme: + openapi: + htmlTemplate: ./docs/index.html + theme: + colors: + primary: + main: "#32329f" + generateCodeSamples: + languages: # Array of language config objects; indicates in which languages to generate code samples. + - lang: curl + - lang: Node.js + - lang: JavaScript + - lang: PHP + - lang: Python