From 88ec10a75515316a7583ef5ed5c89b57b49389c3 Mon Sep 17 00:00:00 2001 From: Kerim Satirli Date: Fri, 6 Sep 2024 05:22:16 -0700 Subject: [PATCH] Adds initial version of spec (#1) * adds Makefile * adds GHA Workflows * adds API spec * adds movement plan --- .github/workflows/redocly-docs.yml | 75 + .github/workflows/superlinter.yml | 36 + .../terraform-provider-generator.yml | 172 +++ .gitignore | 3 + .redocly.yml | 247 ++++ .spectral.yml | 8 + .yaml-lint.yml | 23 + LICENSE | 25 - Makefile | 15 + README.md | 81 ++ locals.mk | 7 + mobility-platform/README.md | 12 + mobility-platform/openapi.yml | 1210 +++++++++++++++++ movement-plan/README.md | 122 ++ movement-plan/track.png | Bin 0 -> 107787 bytes 15 files changed, 2011 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/redocly-docs.yml create mode 100644 .github/workflows/superlinter.yml create mode 100644 .github/workflows/terraform-provider-generator.yml create mode 100644 .gitignore create mode 100644 .redocly.yml create mode 100644 .spectral.yml create mode 100644 .yaml-lint.yml create mode 100644 Makefile create mode 100644 README.md create mode 100644 locals.mk create mode 100644 mobility-platform/README.md create mode 100644 mobility-platform/openapi.yml create mode 100644 movement-plan/README.md create mode 100644 movement-plan/track.png diff --git a/.github/workflows/redocly-docs.yml b/.github/workflows/redocly-docs.yml new file mode 100644 index 0000000..7b15649 --- /dev/null +++ b/.github/workflows/redocly-docs.yml @@ -0,0 +1,75 @@ +--- + +name: "Redocly: Documentation" + +on: # yamllint disable-line rule:truthy + push: + branches: + - main + - adds-spec + +env: + REDOCLY_CONFIG: ".redocly.yml" + REDOCLY_FORMAT: "github-actions" + REDOCLY_OUTPUT: "dist/" + +jobs: + github-pages: + name: GitHub Pages + + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency + concurrency: + group: "${{ github.workflow }}-${{ github.ref }}-pages" + cancel-in-progress: true + +# # Deploy to the github-pages environment +# environment: +# name: github-pages +# url: ${{ steps.deployment.outputs.page_url }} + + permissions: + contents: read + pages: write + id-token: write + + runs-on: ubuntu-latest + + strategy: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast + fail-fast: false + matrix: + # TODO: make this a more global setting + targets: + - "./mobility-platform" + + timeout-minutes: 5 + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + # see https://github.com/actions/configure-pages + - name: Setup GitHub Pages + uses: actions/configure-pages@v5 + + # see https://github.com/marketplace/actions/redocly-cli-github-action + - name: Lint OAS file for target `${{ matrix.targets }}` + uses: fluximus-prime/redocly-cli-github-action@v1 + with: + args: "lint --config='${{ env.REDOCLY_CONFIG }}' --format='${{ env.REDOCLY_FORMAT }}' '${{ matrix.targets }}/openapi.yml'" + + # see https://github.com/marketplace/actions/redocly-cli-github-action + - name: Build Redocly Docs for target `${{ matrix.targets }}` + uses: fluximus-prime/redocly-cli-github-action@v1 + with: + args: "build-docs --config='${{ env.REDOCLY_CONFIG }}' --disableGoogleFont --output='${{ env.REDOCLY_OUTPUT }}/${{ matrix.targets }}' '${{ matrix.targets }}/openapi.yml'" + +# # see https://github.com/actions/upload-pages-artifact +# - name: Upload artifacts for target `${{ matrix.targets }}` +# uses: actions/upload-pages-artifact@v3 +# with: +# path: "${{ env.REDOCLY_OUTPUT }}/${{ matrix.targets }}" +# +# # see https://github.com/actions/deploy-pages +# - name: Deploy to GitHub Pages +# uses: actions/deploy-pages@v4 diff --git a/.github/workflows/superlinter.yml b/.github/workflows/superlinter.yml new file mode 100644 index 0000000..074ce50 --- /dev/null +++ b/.github/workflows/superlinter.yml @@ -0,0 +1,36 @@ +--- + +name: "Code Quality: Super-Linter" + +on: # yamllint disable-line rule:truthy + push: + +jobs: + superlinter: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency + concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + + name: Super-Linter + + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + # Super-Linter needs full git history + fetch-depth: 0 + + - name: Lint Code with Super-Linter + uses: super-linter/super-linter/slim@v6 + env: + DEFAULT_BRANCH: main + DISABLE_ERRORS: false + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VALIDATE_ALL_CODEBASE: true + VALIDATE_MD: true + VALIDATE_OPENAPI: true + VALIDATE_YML: true diff --git a/.github/workflows/terraform-provider-generator.yml b/.github/workflows/terraform-provider-generator.yml new file mode 100644 index 0000000..a6a335a --- /dev/null +++ b/.github/workflows/terraform-provider-generator.yml @@ -0,0 +1,172 @@ +--- + +name: "Terraform: Provider Generator" + +on: # yamllint disable-line rule:truthy + push: +# branches: +# - main + +env: + CACHE_KEY: "${{ github.repository }}-${{ github.ref }}" + CACHE_PATHS: | + ~/.cache/go-build + /go/bin + /home/runner/go/bin/ + + GO_VERSION: 1.23 + + OPENAPI_GENERATOR_CONFIG: generator_config.yml + OPENAPI_GENERATOR_INPUT: openapi.yml + OPENAPI_GENERATOR_OUTPUT: provider_code_spec.json + +jobs: + install-binaries: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency + concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: false + + name: install-binaries + runs-on: ubuntu-latest + + strategy: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast + fail-fast: false + matrix: + tools: + - binary: tfplugingen-framework + repository: "github.com/hashicorp/terraform-plugin-codegen-framework/cmd/tfplugingen-framework@latest" + - binary: tfplugingen-openapi + repository: "github.com/hashicorp/terraform-plugin-codegen-openapi/cmd/tfplugingen-openapi@latest" + + timeout-minutes: 5 + + steps: + # see https://github.com/marketplace/actions/checkout + - name: Checkout Repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + # see https://github.com/marketplace/actions/setup-go-environment + - name: Setup Go `v${{ env.GO_VERSION }}` + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + cache: true + + # see https://github.com/actions/cache + - name: Restore Cache + uses: actions/cache@v4 + with: + key: "${{ env.CACHE_KEY }}" + path: ${{ env.CACHE_PATHS }} + + # see https://github.com/actions/cache + - name: Populate Cache + uses: actions/cache@v4 + with: + key: "${{ env.CACHE_KEY }}" + path: ${{ env.CACHE_PATHS }} + + - name: Install `${{ matrix.tools.binary }}` + run: | + go \ + install \ + "${{ matrix.tools.repository }}" + + - name: Print `${{ matrix.tools.binary }}` version + run: | + ${{ matrix.tools.binary }} \ + --version + + generate-provider: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency + concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: false + + name: generate-provider + needs: install-binaries + runs-on: ubuntu-latest + + strategy: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast + fail-fast: false + matrix: + # TODO: make this a more global setting + targets: + - "./mobility-platform" + + timeout-minutes: 5 + + steps: + # see https://github.com/actions/cache + - name: Restore existing cache + uses: actions/cache@v4 + with: + key: "${{ env.CACHE_KEY }}" + path: ${{ env.CACHE_PATHS }} + + # TODO: + - name: Render Terraform Provider spec with `tfplugingen-openapi` + run: | + echo tfplugingen-openapi \ + generate \ + --config "${{ matrix.targets }}${{ env.OPENAPI_GENERATOR_CONFIG }}" \ + --output "${{ matrix.targets }}${{ env.OPENAPI_GENERATOR_OUTPUT }}" \ + "${{ matrix.targets }}${{ env.OPENAPI_GENERATOR_INPUT }}" + + commit-changes: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency + concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: false + + name: commit-changes + needs: generate-provider + + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions + permissions: + # needed for `git-auto-commit-action` to be able to make changes to the generated output file + contents: write + + runs-on: ubuntu-latest + + strategy: + # see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast + fail-fast: false + matrix: + # TODO: make this a more global setting + targets: + - "./mobility-platform" + + timeout-minutes: 5 + + steps: + - name: Add updated Output to Repository + run: | + echo "Add updated Output to Repository" + +# # see https://github.com/marketplace/actions/git-auto-commit +# - name: Add updated Output to Repository +# uses: stefanzweifel/git-auto-commit-action@v5 +# with: +# commit_author: "GitHub Actions " +# commit_message: automated update of rendered provider specification +# commit_options: "--no-verify --signoff" +# commit_user_email: "github-actions[bot]@users.noreply.github.com" +# commit_user_name: "github-actions[bot]" +# +# create_branch: true +# +# disable_globbing: true +# +# file_pattern: "${{ env.OPENAPI_GENERATOR_OUTPUT }}" +# repository: . +# status_options: "--untracked-files=normal" +# +# skip_dirty_check: false +# skip_fetch: false +# skip_checkout: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..477fa07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +### Project-specific ### +docs/ +dist/ diff --git a/.redocly.yml b/.redocly.yml new file mode 100644 index 0000000..d64b4d9 --- /dev/null +++ b/.redocly.yml @@ -0,0 +1,247 @@ +--- + +# see https://redocly.com/docs/cli/configuration/reference/apis +# see https://redocly.com/docs/cli/configuration/reference/apis#api-object +apis: + mobility-platform@v1: + # see https://redocly.com/docs/cli/configuration/reference/decorators + decorators: + # Arduino-specific decorators + arduino-webserver-config/render-config: on # yamllint disable-line rule:truthy + arduino-webserver-config/remove-cruft: on # yamllint disable-line rule:truthy + + # Terraform-specific decorators + tfplugingen-config/render-config: on # yamllint disable-line rule:truthy + tfplugingen-config/remove-cruft: on # yamllint disable-line rule:truthy + + root: mobility-platform/openapi.yml + +# see https://redocly.com/docs/cli/configuration/reference/extends +extends: + # see https://redocly.com/docs/cli/rules/recommended#recommended-strict-ruleset + - recommended-strict + +# see https://redocly.com/docs/cli/configuration/reference/plugins +plugins: + - "../redocly-arduino-webserver-config/main.js" + - "../redocly-tfplugingen-config/main.js" + +# see https://redocly.com/docs/cli/configuration/reference/rules +rules: + # `info.contact` must be present + info-contact: error + + # `info.license` must be present + info-license: error + + # ignore requirement for `info.license.url` as the spec provides `info.license.identifier` + # see https://redocly.com/docs/cli/rules/info-license-url + info-license-url: off # yamllint disable-line rule:truthy + + # paths must not be ambiguous + no-ambiguous-paths: error + + # paths must not have HTTP verbs + no-http-verbs-in-paths: error + + # paths must be unique + no-identical-paths: error + + # schema examples must be valid + no-invalid-schema-examples: error + + # paths must not have trailing slashes + no-path-trailing-slash: error + + # see https://redocly.com/docs/cli/rules/no-server-example-com + no-server-example.com: error + + # server variables must be defined + no-undefined-server-variable: error + + # refs must not be unresolved + no-unresolved-refs: error + + # path must not include parameters + path-not-include-query: error + + # path segments must not be plural + path-segment-plural: + severity: off # yamllint disable-line rule:truthy + + # operations must have at least one 2xx and 4xx response + operation-2xx-response: error + operation-4xx-response: error + + # 4xx operations must conform to the RFC 7807 format + # (this may switch to RFC 9457 format in the future) + # see https://redocly.com/docs/cli/rules/operation-4xx-problem-details-rfc7807 + operation-4xx-problem-details-rfc7807: error + + # operations must have an operation identifier and it must be unique + operation-operationId: error + operation-operationId-unique: error + + # operations must have a tag + operation-tag-defined: error + + # requests must have one of the allowed MIME types + request-mime-type: + severity: error + allowedValues: + - "application/json" + - "application/problem+json" + - "text/html" + + # responses must contain the required properties + response-contains-property: + severity: error + names: + 4xx: + - message + - status + 5xx: + - message + - status + + # responses must have one of the allowed MIME types + response-mime-type: + severity: error + allowedValues: + - "application/json" + - "application/problem+json" + - "text/html" + + # descriptions must start with a capital letter + rule/description-capitalization: + subject: + type: any + property: description + assertions: + pattern: /^([A-Z]|)/ + + # headers must include an example + rule/headers-include-example: + subject: + type: Header + property: example + assertions: + defined: true + nonEmpty: true + + # `info.description` must be present` + rule/info-description: + subject: + type: Info + property: description + assertions: + defined: true + + # `info.title` must not include `API` + rule/omit-title-api: + subject: + type: Info + property: title + assertions: + notPattern: /.*API.*/ + + # operation identifiers must have the correct case + rule/operationId-casing: + subject: + type: Operation + property: operationId + assertions: + casing: camelCase + + # operation identifiers must have the correct prefix + rule/operationId-prefix: + subject: + type: Operation + property: operationId + assertions: + pattern: /^GET|POST|DELETE/i + + # operation summaries must start with an allowed word + rule/operation-summary: + subject: + type: Operation + property: summary + where: + - subject: + type: Paths + assertions: + defined: true + assertions: + pattern: /^(Allow|Disallow|Initiate|Retrieve|Stop|Update).*[^\.]$/ + + # operation summaries must start with an allowed word + rule/operation-summary-check: + subject: + type: Operation + property: summary + assertions: + pattern: /^(Allow|Disallow|Initiate|Retrieve|Stop|Update).*[^.]$/ + + # operation summaries must not end with a period character + rule/operation-summary-period: + subject: + type: Operation + property: summary + assertions: + pattern: /[^.]$/ + + # parameters must have the correct case + rule/parameter-casing: + subject: + type: Parameter + assertions: + casing: camelCase + + # parameters must include examples + rule/params-must-include-examples: + severity: error + subject: + type: Parameter + assertions: + requireAny: + - examples + mutuallyRequired: + - examples + + # schemas must have the correct case + rule/schema-properties-casing: + subject: + type: Schema + property: properties + assertions: + casing: camelCase + scalar-property-missing-example: error + + # security must be defined, even if its empty + security-defined: error + + # tags must have a description + tag-description: error + + # tags must be in alphabetical order + tags-alphabetical: error + +# see https://redocly.com/docs/cli/configuration#configure-openapi-features-and-documentation-styles-in-theme +theme: + # see https://redocly.com/docs/redoc/config + openapi: + disableSearch: false + + # see https://redocly.com/docs/redoc/config#expandresponses + expandResponses: '200' + + # see https://redocly.com/docs/api-reference-docs/guides/generate-code-samples#api-docs-configuration + generateCodeSamples: + languages: + - lang: curl + + hideDownloadButton: true + hideHostname: true + hideLoading: true + nativeScrollbars: true + requiredPropsFirst: true diff --git a/.spectral.yml b/.spectral.yml new file mode 100644 index 0000000..c408021 --- /dev/null +++ b/.spectral.yml @@ -0,0 +1,8 @@ +--- + +# see https://meta.stoplight.io/docs/spectral/01baf06bdd05a-create-a-ruleset#extend-an-existing-ruleset +extends: "spectral:oas" + +# see https://docs.stoplight.io/docs/spectral/e5b9616d6d50c-rulesets#formats +formats: + - oas3_1 diff --git a/.yaml-lint.yml b/.yaml-lint.yml new file mode 100644 index 0000000..96f6380 --- /dev/null +++ b/.yaml-lint.yml @@ -0,0 +1,23 @@ +--- + +extends: default + +ignore: + - 'dist' + +rules: + # see https://yamllint.readthedocs.io/en/stable/rules.html#module-yamllint.rules.line_length + line-length: + max: 180 + + # see https://yamllint.readthedocs.io/en/stable/rules.html#module-yamllint.rules.truthy + truthy: + allowed-values: [ + 'true', + 'false' + ] + check-keys: true + +yaml-files: + - '*.yml' + - '*.yaml' diff --git a/LICENSE b/LICENSE index 261eeb9..d9a10c0 100644 --- a/LICENSE +++ b/LICENSE @@ -174,28 +174,3 @@ of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9c3fadc --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +## Makefile for Pathfinder OpenAPI Specs + +# configuration +MAKEFILE_TITLE = 🧭 PATHFINDER OPENAPI SPECS +PORT_PRISM_MOBILITY ?= 7284 +SPEC_PRISM_MOBILITY ?= "mobility-platform/openapi.yml" + +include ../tooling/make/configs/shared.mk +include ../tooling/make/functions/shared.mk +include ../tooling/make/targets/yamllint.mk +include ../tooling/make/targets/openapi.mk +include ./locals.mk +include ../tooling/make/targets/tfplugingen-openapi.mk +include ../tooling/make/targets/shared.mk +include ../tooling/make/targets/vale.mk diff --git a/README.md b/README.md new file mode 100644 index 0000000..9867e62 --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# Pathfinder OpenAPI Specifications + +> OpenAPI Specifications for the Pathfinder platform + +## Table of Contents + + +* [Pathfinder OpenAPI Specifications](#pathfinder-openapi-specifications) + * [Table of Contents](#table-of-contents) + * [Specifications](#specifications) + * [Requirements](#requirements) + * [Development](#development) + * [Usage](#usage) + * [Contributors](#contributors) + * [License](#license) + + +## Specifications + +Pathfinder consists of distinct hardware components, each with their own API specification. + +- Mobility Platform: [mobility-platform/openapi.yml](./mobility-platform/openapi.yml) +- Vision Platform: `pending` + +For more information on the underlying hardware, see [workloads/pathfinder](https://github.com/workloads/pathfinder?tab=readme-ov-file#hardware). + +## Requirements + +- a copy of [@workloads/tooling](https://github.com/workloads/tooling) + +#### Development + +For development and testing of this repository: + +* `prism` `5.9.0` or [newer](https://www.npmjs.com/package/@stoplight/prism-cli) +* `redocly` `1.19.0` or [newer](https://www.npmjs.com/package/@redocly/cli) +* `spectral` `6.1.0` or [newer](https://www.npmjs.com/package/@stoplight/spectral-cli) + +These tools provide linting, validation, and documentation generation for OpenAPI specifications. + +## Usage + +This repository provides a [Makefile](./Makefile)-based workflow. + +Running `make` without commands prints the following help information: + +```text +🧭 PATHFINDER OPENAPI SPECS + +Target Description Usage +lint-yaml lint YAML files using yamllint `make lint-yaml` +lint-redocly lint OAS files using redocly `make lint-redocly` +lint-redocly-config lint Redocly config file using redocly `make lint-redocly-config` +lint-spectral lint OAS files using spectral `make lint-spectral` +redocly-preview preview docs using redocly `make redocly-preview` +redocly-build build docs using redocly `make redocly-build` +redocly-bundle bundle output without decorators using redocly `make redocly-bundle` +redocly-bundle-terraform bundle output for Terraform using redocly `make redocly-bundle-terraform` +redocly-bundle-arduino bundle output for Arduino using redocly `make redocly-bundle-arduino` +redocly-generate-ignore generate (or update) an ignores file using redocly `make redocly-generate-ignore` +prism-mock-mobility start mock server using prism `make prism-mock-mobility` +provider-config generate plugin generator config using tfplugingen-openapi `make provider-config` +provider-framework generate plugin framework config using tfplugingen-framework `make provider-framework` +help display a list of Make Targets `make help` +_listincludes list all included Makefiles and *.mk files `make _listincludes` +_selfcheck lint Makefile `make _selfcheck` +lint-vale lint prose using vale `make lint-vale` +vale-sync sync Vale dependencies `make vale-sync` +``` + +## Contributors + +For a list of current (and past) contributors to this repository, see [GitHub](https://github.com/workloads/pathfinder-openapi-specs/graphs/contributors). + +## License + +Licensed under the Apache License, Version 2.0 (the "License"). + +You may download a copy of the License at [apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0). + +See the License for the specific language governing permissions and limitations under the License. diff --git a/locals.mk b/locals.mk new file mode 100644 index 0000000..b18bddf --- /dev/null +++ b/locals.mk @@ -0,0 +1,7 @@ +# local, repository-specific Makefile configuration + +include ../tooling/make/functions/prism.mk + +.SILENT .PHONY: prism-mock-mobility +prism-mock-mobility: # start mock server using prism [Usage: `make prism-mock-mobility`] + $(call prism_mock,${SPEC_PRISM_MOBILITY},${PORT_PRISM_MOBILITY}) diff --git a/mobility-platform/README.md b/mobility-platform/README.md new file mode 100644 index 0000000..af034e8 --- /dev/null +++ b/mobility-platform/README.md @@ -0,0 +1,12 @@ +# Specification: Mobility Platform + +> OpenAPI Specifications for the _Mobility Platform_ component of the Pathfinder platform + + +* [Specification: Mobility Platform](#specification-mobility-platform) + * [Notes](#notes) + + +## Notes + +A detailed description of the _Movement Plan_ schema can be found in the root-level directory [movement-plan](../movement-plan/README.md). diff --git a/mobility-platform/openapi.yml b/mobility-platform/openapi.yml new file mode 100644 index 0000000..30cd222 --- /dev/null +++ b/mobility-platform/openapi.yml @@ -0,0 +1,1210 @@ +--- + +openapi: 3.1.0 + +# see https://swagger.io/specification/#info-object +info: + title: "Pathfinder - Mobility Platform" + version: 0.10.0 + + # see https://swagger.io/specification/#contact-object + contact: + email: github.com/workloads + name: Project Maintainers + url: "https://github.com/workloads/pathfinder/issues" + + description: | + This OpenAPI specification describes the programmatic interface of the _Pathfinder Mobility Platform_. + + For more information, see the `externalDocs` in this file as well as [github.com/workloads/pathfinder](https://github.com/workloads/pathfinder). + + # see https://swagger.io/specification/#license-object + license: + name: Apache License 2.0 + identifier: Apache-2.0 + + summary: "Pathfinder - Mobility Platform" + + termsOfService: "https://github.com/workloads/.github/blob/main/CONTRIBUTING.md" + + # see https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md#x-logo + x-logo: + url: "https://assets.workloads.io/pathfinder/mobility-platform-logo.png" + backgroundColor: "#282433" + altText: Pathfinder logo + + x-terraform-provider-name: pathfinder + +# see https://swagger.io/specification/#components-object +components: + # see https://swagger.io/specification/#schema-object + schemas: + DeviceStatus: + description: "Response containing the device status" + example: + features: + isHttpEnabled: true + isInsightsEnabled: false + identifiers: + long: pathfinder-000000000000C418 + short: pathfinder-c418 + name: Pathfinder + uptime: 1234 + versions: + api: 0.1.0 + app: 0.10.0 + properties: + features: + additionalProperties: + $ref: "#/components/schemas/FeatureFlagItem" + description: "Feature flags" + examples: + - isHttpEnabled: true + - isInsightsEnabled: false + type: object + identifiers: + description: "Identifiers" + properties: + long: + description: "Long identifier" + examples: + - pathfinder-000000000000C418 + type: string + short: + description: "Short identifier" + examples: + - pathfinder-c418 + type: string + required: + - short + - long + type: object + name: + description: "Name" + examples: + - Pathfinder + type: string + uptime: + description: "Uptime (in seconds)" + examples: + - 1234 + type: number + versions: + description: "Versions" + properties: + api: + description: "API version" + examples: + - 0.1.0 + - 1.0.0 + type: string + app: + description: "Application version" + examples: + - 0.10.0 + - 1.0.0 + type: string + required: + - api + - app + type: object + required: + - features + - identifiers + - name + - uptime + - versions + type: object + + DeviceBattery: + description: "Response containing the battery status" + examples: + - shuntVoltage: + unit: mV + value: 1 + busVoltage: + unit: mV + value: 2 + current: + unit: mA + value: 3 + power: + unit: mW + value: 4 + loadVoltage: + unit: mV + value: 5 + ina219Overflow: false + properties: + shuntVoltage: + $ref: "#/components/schemas/DeviceBatteryItem" + busVoltage: + type: object + $ref: "#/components/schemas/DeviceBatteryItem" + current: + type: object + $ref: "#/components/schemas/DeviceBatteryItem" + power: + type: object + $ref: "#/components/schemas/DeviceBatteryItem" + loadVoltage: + type: object + $ref: "#/components/schemas/DeviceBatteryItem" + ina219Overflow: + type: boolean + examples: + - true + - false + type: object + + DeviceBatteryItem: + description: "Structure of a single battery item" + examples: + - unit: mA + value: 1 + - unit: mV + value: 2 + properties: + unit: + description: "Unit of the battery item" + examples: + - mA # milli ampere + - mV # milli volt + - V # volt + type: string + value: + description: "Value of the battery item" + examples: + - 1 + - 2 + type: integer + required: + - unit + - value + type: object + + DeviceReboot: + description: "Response containing the reboot status" + examples: + - reboot: true + properties: + reboot: + description: "Reboot status" + examples: + - true + type: boolean + required: + - reboot + type: object + + DeviceWifi: + description: "Response containing the Wi-Fi network" + items: + $ref: "#/components/schemas/DeviceWifiNetworkItem" + type: array + maximum: 1 + minimum: 1 + + DeviceWifiRequest: + description: "Request containing a Wi-Fi network configuration" + examples: + - password: workloads + ssid: workloads + properties: + password: + description: "Password" + examples: + - workloads + type: string + ssid: + description: "SSID" + examples: + - workloads + type: string + required: + - password + - ssid + type: object + + DeviceWifiNetworkItem: + description: "Structure of a single Wi-Fi network item" + examples: + - encrypted: true + rssi: -30 + ssid: workloads + properties: + encrypted: + description: "Encryption status" + examples: + - true + type: boolean + rssi: + description: "RSSI (in dBm)" + examples: + - -30 # great signal + - -67 # okay signal + - -90 # unusable signal + format: float + type: number + ssid: + description: "SSID" + examples: + - workloads + type: string + required: + - encrypted + - rssi + - ssid + type: object + + DeviceWifiScan: + description: "Response containing the detected Wi-Fi networks" + items: + $ref: "#/components/schemas/DeviceWifiNetworkItem" + type: array + + ErrorMessage: + description: "Response containing the error" + examples: + - title: Bad Request + type: 400 + - title: Internal Server Error + type: 500 + properties: + title: + description: "Title of error" + examples: + - Bad Request + - Internal Server Error + type: string + type: + description: "Type of error" + examples: + - 400 + - 500 + type: number + required: + - title + - type + type: object + + ErrorBadRequest: + allOf: + - $ref: "#/components/schemas/ErrorMessage" + - type: object + properties: + title: + type: string + examples: + - Bad Request + type: + type: number + examples: + - 400 + examples: + - title: Bad Request + type: 400 + + ErrorForbidden: + allOf: + - $ref: "#/components/schemas/ErrorMessage" + - type: object + properties: + title: + type: string + examples: + - Forbidden + type: + type: number + examples: + - 403 + examples: + - title: Forbidden + type: 403 + + ErrorInternalServerError: + allOf: + - $ref: "#/components/schemas/ErrorMessage" + - type: object + properties: + title: + type: string + examples: + - Internal Server Error + type: + type: number + examples: + - 500 + examples: + - title: Internal Server Error + type: 500 + + ErrorNotFound: + allOf: + - $ref: "#/components/schemas/ErrorMessage" + - type: object + properties: + title: + type: string + example: Not Found + type: + type: number + example: 400 + examples: + - title: Not Found + type: 404 + + ErrorUnauthorized: + allOf: + - $ref: "#/components/schemas/ErrorMessage" + - type: object + properties: + title: + type: string + examples: + - Unauthorized + type: + type: number + examples: + - 401 + examples: + - title: Unauthorized + type: 401 + + FeatureFlagItem: + description: "Structure of a single feature flag item" + examples: + - true + - false + type: boolean + + Healthz: + description: "Response containing the health status" + examples: + - healthy: true + properties: + healthy: + description: "Health status" + examples: + - true + type: boolean + required: + - healthy + type: object + + MovementDelete: + description: "Request containing the movement identifier TODO" + examples: + - id: movement-1ab2 + name: Movement Plan + properties: + id: + description: "Identifier of the movement plan" + examples: + - movement-1ab2 + type: string + name: + description: "Name of the movement plan" + examples: + - Movement Plan + - movement-plan + type: string + required: + - id + - name + type: object + + MovementLock: + description: "Response containing the movement lock status" + examples: + - locked: true + properties: + locked: + description: "Movement lock status" + examples: + - true + type: boolean + required: + - locked + type: object + + MovementStepItem: + description: "Structure of a single movement step" + examples: + - bearing: 90 + direction: forward + distance: 10 + # see https://swagger.io/specification/#external-documentation-object + externalDocs: + description: "Documentation on the Schema of a Movement Plans" + url: "https://github.com/workloads/pathfinder-openapi-specs/blob/main/movement-plan/README.md" + properties: + bearing: + description: "Angle (in degrees) of movement" + examples: + - 90 + maximum: 360 + minimum: -360 + type: integer + direction: + description: "Direction of movement" + enum: + - backward + - forward + examples: + - forward + type: string + distance: + description: "Distance (in centimeters) of movement" + examples: + - 10 + maximum: 100 + minimum: 1 + type: number + required: + - bearing + - direction + - distance + type: object + + MovementRequest: + description: "Request for a movement" + examples: + - name: Movement Plan + persist: true + steps: + - bearing: 90 + direction: forward + distance: 10 + properties: + name: + description: "Name of the movement plan" + examples: + - Movement Plan + - movement-plan + type: string + persist: + description: "Persist the movement plan to the filesystem" + examples: + - true + type: boolean + steps: + description: "List of movement steps" + items: + $ref: "#/components/schemas/MovementStepItem" + maxItems: 50 + minItems: 1 + type: array + required: + - name + - persist + - steps + type: object + + MovementResponse: + description: "Response containing the movement operation status" + examples: + - id: movement-1ab2 + name: Movement Plan + properties: + id: + description: "Identifier of the movement plan" + examples: + - movement-1ab2 + type: string + name: + description: "Name of the movement plan" + examples: + - Movement Plan + - movement-plan + type: string + required: + - id + - name + type: object + + Readyz: + description: "Response containing the readiness status" + examples: + - ready: true + properties: + ready: + description: "Readiness status" + examples: + - true + type: boolean + required: + - ready + type: object + + # see https://swagger.io/specification/#responses-object + responses: + DeviceStatus: + content: + application/json: + schema: + $ref: "#/components/schemas/DeviceStatus" + description: "Response containing the device status" + + DeviceBattery: + content: + application/json: + schema: + $ref: "#/components/schemas/DeviceBattery" + description: "Response containing the battery status" + + DeviceReboot: + content: + application/json: + schema: + $ref: "#/components/schemas/DeviceReboot" + description: "Response containing the reboot status" + + DeviceWifi: + content: + application/json: + schema: + $ref: "#/components/schemas/DeviceWifi" + description: "Response containing the Wi-Fi status" + + DeviceWifiScan: + content: + application/json: + schema: + $ref: "#/components/schemas/DeviceWifiScan" + description: "Response containing the available Wi-Fi networks" + + ErrorBadRequest: + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ErrorBadRequest" + description: "Response containing the error object" + + ErrorForbidden: + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ErrorForbidden" + description: "Response containing the error object" + + ErrorInternalServerError: + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ErrorInternalServerError" + description: "Response containing the error object" + + ErrorNotFound: + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ErrorNotFound" + description: "Response containing the error object" + + ErrorUnauthorized: + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ErrorUnauthorized" + description: "Response containing the error object" + + Healthz: + content: + application/json: + schema: + $ref: "#/components/schemas/Healthz" + description: "Response containing the health status" + + InterfaceRoot: + content: + text/html: + schema: + type: string + examples: + - "Index" + description: "Response containing HTML" + + InterfaceApiRoot: + content: + text/html: + schema: + type: string + examples: + - "API Index" + description: "Response containing HTML" + + Movement: + content: + application/json: + schema: + $ref: "#/components/schemas/MovementResponse" + description: "Response containing the movement response object" + + MovementLock: + content: + application/json: + schema: + $ref: "#/components/schemas/MovementLock" + description: "Response containing the movement lock object" + + Readyz: + content: + application/json: + schema: + $ref: "#/components/schemas/Readyz" + description: "Response containing the ready status" + + # see https://swagger.io/specification/#security-scheme-object + securitySchemes: + apiKey: + description: "Access Key for endpoints requiring authorization" + in: header + name: x-api-key + type: apiKey + +# see https://swagger.io/specification/#external-documentation-object +externalDocs: + description: "Project Documentation" + url: "https://github.com/workloads/pathfinder" + +# see https://swagger.io/specification/#paths-object +paths: + /: + get: + description: "Retrieve the root HTML content." + operationId: getRootContent + responses: + '200': + $ref: "#/components/responses/InterfaceRoot" + '400': + $ref: "#/components/responses/InterfaceRoot" + security: [] + summary: "Retrieve root" + tags: + - meta + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/' \ + --header 'Accept: text/html' + + /v1: + get: + description: "Retrieve the API root content." + operationId: getApiRootContent + responses: + '200': + $ref: "#/components/responses/InterfaceApiRoot" + '400': + $ref: "#/components/responses/InterfaceRoot" + security: [] + summary: "Retrieve API root" + tags: + - meta + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1' \ + --header 'Accept: text/html' + + /v1/device/status: + get: + description: "Retrieve the device status." + operationId: getDeviceStatus + responses: + '200': + $ref: "#/components/responses/DeviceStatus" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve device status" + tags: + - device + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/device/status' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + + /v1/device/battery: + get: + description: "Retrieve the battery status." + operationId: getDeviceBattery + responses: + '200': + $ref: "#/components/responses/DeviceBattery" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve battery status" + tags: + - device + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/device/battery' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + + /v1/device/reboot: + post: + description: "Initiate a reboot." + operationId: postDeviceReboot + requestBody: + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/DeviceReboot" + responses: + '200': + $ref: "#/components/responses/DeviceReboot" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '401': + $ref: "#/components/responses/ErrorUnauthorized" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: + - apiKey: [] + summary: "Initiate reboot" + tags: + - device + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request POST \ + --url 'http://mock.local.svcs.dev:7284/v1/device/reboot' \ + --header 'Content-Type: application/json' \ + --header 'x-api-key: ' \ + --data '{"reboot": true}' + + /v1/device/wifi: + get: + description: "Retrieve the Wi-Fi status." + operationId: getDeviceWifi + responses: + '200': + $ref: "#/components/responses/DeviceWifi" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve Wi-Fi status" + tags: + - device-wifi + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/device/wifi' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + + post: + description: "Update the Wi-Fi configuration." + operationId: postDeviceWifiChange + responses: + '200': + $ref: "#/components/responses/DeviceWifi" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + requestBody: + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/DeviceWifiRequest" + security: [] + summary: "Update Wi-Fi configuration" + tags: + - device-wifi + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request POST \ + --url 'http://mock.local.svcs.dev:7284/v1/device/wifi' \ + --header 'Content-Type: application/json' \ + --data '{"ssid": "workloads", "password": "workloads"}' + + /v1/device/wifi/scan: + get: + description: "Initiate a Wi-Fi scan" + operationId: getDeviceWifiScan + responses: + '200': + $ref: "#/components/responses/DeviceWifiScan" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Initiate Wi-Fi scan" + tags: + - device-wifi + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/device/wifi/scan' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + + /v1/healthz: + get: + description: "Retrieve the health status" + operationId: getHealthz + responses: + '200': + $ref: "#/components/responses/Healthz" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve health status" + tags: + - health + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/healthz' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + + '/v1/movement/{movementIdentifier}': + delete: + description: "Delete a movement plan" + operationId: deleteMovement + parameters: + - description: "The identifier of the movement plan to delete" + examples: + example: + value: 550e8400-e29b-41d4-a716-446655440000 + in: path + name: movementIdentifier + required: true + schema: + format: uuid + maxLength: 64 + type: string + responses: + '200': + $ref: "#/components/responses/Movement" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/MovementDelete" + security: [] + summary: "Stop movement" + tags: + - movement + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request DELETE \ + --url 'http://mock.local.svcs.dev:7284/v1/movement/550e8400-e29b-41d4-a716-446655440000' \ + --header 'Content-Type: application/json' \ + --data '{"id": "movement-1ab2", "name": "Movement Plan"}' + x-terraform-types: + - resource + + /v1/movement: + get: + description: "Retrieve the movement status" + operationId: getMovement + responses: + '200': + $ref: "#/components/responses/Movement" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '404': + $ref: "#/components/responses/ErrorNotFound" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve movement status" + tags: + - movement + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/movement' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + - resource + + post: + description: "Initiate a movement" + operationId: postMovement + responses: + '200': + $ref: "#/components/responses/Movement" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '403': + $ref: "#/components/responses/ErrorForbidden" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + requestBody: + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/MovementRequest" + security: [] + summary: "Initiate movement" + tags: + - movement + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request POST \ + --url 'http://mock.local.svcs.dev:7284/v1/movement' \ + --header 'Content-Type: application/json' \ + --data '{"name": "Movement Plan", "persist": true, "steps": [{"bearing": 90, "direction": "forward", "distance": 10}]}' + x-terraform-types: + - resource + + /v1/movement/lock: + delete: + description: "Allow movements" + operationId: deleteMovementLock + responses: + '200': + $ref: "#/components/responses/MovementLock" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + requestBody: + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/MovementLock" + security: + - apiKey: [] + summary: "Allow movements" + tags: + - movement + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request DELETE \ + --url 'http://mock.local.svcs.dev:7284/v1/movement/lock' \ + --header 'Content-Type: application/json' \ + --data '{"locked": false}' + + post: + description: "Disallow movements" + operationId: postMovementLock + responses: + '200': + $ref: "#/components/responses/MovementLock" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + requestBody: + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/MovementLock" + security: [] + summary: "Disallow movements" + tags: + - movement + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request POST \ + --url 'http://mock.local.svcs.dev:7284/v1/movement/lock' \ + --header 'Content-Type: application/json' \ + --data '{"locked": true}' + + get: + description: "Retrieve the movement lock status" + operationId: getMovementLockStatus + responses: + '200': + $ref: "#/components/responses/MovementLock" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve movement lock status" + tags: + - movement + - terraform-enabled + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/movement/lock' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + + /v1/readyz: + get: + description: "Retrieve the readiness status" + operationId: getReadyz + responses: + '200': + $ref: "#/components/responses/Readyz" + '400': + $ref: "#/components/responses/ErrorBadRequest" + '500': + $ref: "#/components/responses/ErrorInternalServerError" + security: [] + summary: "Retrieve readiness status" + tags: + - health + # see https://redocly.com/docs/api-reference-docs/specification-extensions/x-code-samples + x-codeSamples: + - lang: 'cURL' + label: 'CLI' + source: | + curl \ + --request GET \ + --url 'http://mock.local.svcs.dev:7284/v1/readyz' \ + --header 'Accept: application/json' + x-terraform-types: + - datasource + +# security requirements are set on a per-operation basis +# see https://swagger.io/specification/#security-scheme-object +security: [] + +# see https://swagger.io/specification/#server-object +servers: + - description: "Mock HTTP interface for testing" + url: "http://mock.local.svcs.dev:7284" + + - description: "On-device HTTP interface" + url: "http://pathfinder-{deviceIdentifier}.local.workloads.io:7284" + + # see https://swagger.io/specification/#server-variable-object + variables: + deviceIdentifier: + default: 0a1b + description: "short device-specific identifier string (4 characters)" + +# see https://swagger.io/specification/#tag-object +tags: + - name: authorization + description: "Endpoints requiring normal authorization" + x-displayName: Authorization + + - name: authorization-sudo + description: "Endpoints requiring elevated authorization" + x-displayName: Elevated Authorization + + - description: "Endpoints for retrieving device status" + name: device + x-displayName: Device + + - description: "Endpoints for retrieving and managing Wi-Fi connections" + name: device-wifi + x-displayName: Device / Wi-Fi + + - description: "Endpoints for retrieving health and readiness status" + name: health + x-displayName: Health + + - description: "Meta Endpoints for retrieving" + name: meta + x-displayName: Meta + + - name: movement + description: "Endpoints for managing and monitoring movements" + x-displayName: Movement + + - name: terraform-enabled + description: "Endpoints supported by the Terraform Provider for Pathfinder" + x-displayName: Terraform-enabled + + # see https://swagger.io/specification/#external-documentation-object + externalDocs: + description: "Terraform Provider for Pathfinder" + url: "https://github.com/workloads/terraform-provider-pathfinder" diff --git a/movement-plan/README.md b/movement-plan/README.md new file mode 100644 index 0000000..7dae63a --- /dev/null +++ b/movement-plan/README.md @@ -0,0 +1,122 @@ +# Movement Plan for Pathfinder + +> This document describes `v1` of the "movement plan" schema for Pathfinder. + +## Table of Contents + + +* [Movement Plan for Pathfinder](#movement-plan-for-pathfinder) + * [Table of Contents](#table-of-contents) + * [Definition](#definition) + * [Movement Plan](#movement-plan) + * [Movement Step](#movement-step) + * [Bearing](#bearing) + * [Direction](#direction) + * [Distance](#distance) + * [Track Map](#track-map) + * [Map Legend](#map-legend) + * [Example Movement Plan](#example-movement-plan) + + +## Definition + +A _movement plan_ represents the sequence of steps that Pathfinder will follow to navigate a track. + +This section defines the structure of a movement plan and its child items. + +### Movement Plan + +Each movement plan consists of `n` number of steps. + +* `n` is defined as `>= 1` and `<= 50`, for a maximum possible total of 50 steps. + +### Movement Step + +Each movement step consists of three child items. + +#### Bearing + +The `bearing` value represents the heading of the next movement. + +* This value is expressed in degrees. +* The acceptable range for this value is `>= -360` and `<= 360`. + +> [!IMPORTANT] +> The `bearing` value is _always_ relative to the device's current heading. + +#### Direction + +The `direction` value represents the direction of the next movement. + +* This value is expressed as a string. +* The acceptable options are `forward` and `backward`. + +#### Distance + +The `distance` value represents the distance of the next movement. + +* This value is expressed in centimeters. +* The acceptable range for this value is `>= 1` and `<= 100`. + +## Track Map + +![track map](./track.png) + +This track map visualizes a movement plan that starts and ends in the same position (bottom, center) + +The track starts and ends in the checkered area (bottom center of the image). + +The full movement plan consists of 34 steps and runs counter-clockwise. + +### Map Legend + +* The checkered area (bottom center) represents the starting and ending position. +* The track is represented by the dark thick line. +* Dots represent a single movement step. +* Lines represent a single movement path. + +## Example Movement Plan + +This section provides an example of a movement plan that represents 10 of the 34 steps in the track map. + +**Step 1** + +* bearing: `0` +* direction: `forward` +* distance: `50` + +```hcl +step { + bearing = 0 + direction = "forward" + distance = "50" +} +``` + +**Step 2** + +* bearing: `-25` +* direction: `forward` +* distance: `10` + +```hcl +step { + bearing = -25 + direction = "forward" + distance = "10" +} +``` + +**Step 3** + +* bearing: `-20` +* direction: `forward` +* distance: `10` + +```hcl +step { + bearing = -20 + direction = "forward" + distance = "10" +} +``` diff --git a/movement-plan/track.png b/movement-plan/track.png new file mode 100644 index 0000000000000000000000000000000000000000..341417b96a5b0d3824e66ca9c64ce328606d8ae6 GIT binary patch literal 107787 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ÌUfX!NG(3 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